www.pudn.com > WEB020.rar > SERIAL.C
//-----------------------------------------------------------------------------
// Copyright (c) 2002 Jim Brady
// Do not use commercially without author's permission
// Last revised August 2002
// Net SERIAL.C
//
// This module handles RS-232 messages and associated tasks
//-----------------------------------------------------------------------------
#include "C8051f.h"
#include "intrins.h"
#include "net.h"
#include "serial.h"
bit CommRecDataOverflowFlag,FlagRecComm,SendItComm;
unsigned char CommSendBufferHead, CommSendBufferTail;
unsigned char CommRecBufferHead, CommRecBufferTail;
unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE] _at_ 0 ; //串行口缓冲区定位在内部4K XRAM中
unsigned char xdata CommRecBuffer[DB_RECMAXSIZE] _at_ DB_SENDMAXSIZE;
void ClearCommRecBuffer(void)
{
unsigned char i;
CommRecBufferHead=CommRecBufferTail=0;
CommSendBufferHead=CommSendBufferTail=0;
FlagRecComm=0;
for (i=0;i>4;
SendCommChar(hex[ch]);
ch=senddata&0x0F;
SendCommChar(hex[ch]);
}
void SendCommWord(unsigned int asciiword)
//向串口发送一个int型的 hex码表示的字符 例如:asciiword=0x124D 将向串口发送4个字符:'1','2','4','D'
{
unsigned char ascii;
ascii=asciiword>>8;
SendCommHex(ascii);
ascii=asciiword&0xff;
SendCommHex(ascii);
}
void SendCommLong(unsigned long asciilong)
{
SendCommWord(asciilong>>16);
SendCommWord(asciilong&0xffff);
}
*/
void serial_send(unsigned char *base)
{
SendCommString(base);
}
void SendCommString(unsigned char *base)
{
unsigned char i=0;
if (base[0]==0) return;
for (;;)
{
if (base[i]==0) break;
CommSendBuffer[CommSendBufferTail]=base[i];
CommSendBufferTail++;
if (CommSendBufferTail==DB_SENDMAXSIZE)
{
CommSendBufferTail=0;
}
i++;
}
if (SendItComm)
{
SendItComm=0;
SBUF0=CommSendBuffer[CommSendBufferHead];
}
while (CommSendBufferHead!=CommSendBufferTail);
}
/*
void SendCommBuffer(unsigned char *base, unsigned char size)
{
unsigned char i=0;
if (!size) { return; }
while (i 0x39) i += 7;
*--ptr = i;
value = value / radix;
} while(value != 0);
// Next, move the string 6 places to the left
// Include NULL character
for( ; (*buf++ = *ptr++); );
return(temphold);
}*/
char * itoa(UINT value, char * buf, UCHAR radix)
{
UINT i,t1;
char * ptr;
char * temphold;
temphold = buf;
ptr = buf + 12;
*--ptr = 0; // Insert NULL char
t1=0;
if(radix==10)
{
do
{
// First create string in reverse order
i = (value % radix) + 0x30;
if(i > 0x39) i += 7;
*--ptr = i;
value = value / radix;
t1++;
} while(value != 0);
}
// Next, move the string 6 places to the left
// Include NULL character
else
{
radix=radix-1;
do
{
// First create string in reverse order
i = (value % radix) + 0x30;
if(i > 0x39) i += 7;
*--ptr = i;
value = value / radix;
t1++;
} while(value != 0);
if(!(t1==2))
{ t1=2-t1;
for(i=0;i