📄 serial.c.bak
字号:
//========================================================
//深圳奥特迅电力设备有限公司
//电池监控系统用无线传输模块
//文件名:serial.h
//描述:串口操作
//By:Andylee 2006-6-13
//anssett@163.com
//=========================================================
unsigned char TxBuf[TxBuf_Len]; //发送缓冲区
unsigned char RxBuf[RxBuf_Len]; //接收缓冲区
unsigned char *toTxBuf,*fromTxBuf,*toRxBuf,*fromRxBuf;//fifo 指针
bit TIflag=1;
//================================================================
//函数功能:串口初始化
//filename:InitSerial()
//input:none
//output:none
//================================================================
void InitSerial(void) reeentrant
{
TH1 = 243; // 19200@16MHz (when T1M=1 and SMOD=1)
CKCON |= 0x10; // T1M=1 (/4 timer clock)
PCON = 0x80; // SMOD=1 (double baud rate)
SCON = 0x52; // Serial mode1, enable receiver
TMOD &= ~0x30;
TMOD |= 0x20; // Timer1 8bit auto reload
TR1 = 1; // Start timer1
P0_ALT |= 0x06; // Alternate functions on pins P0.1-2
}
//================================================================
//函数功能:串口缓冲区初始化
//filename:InitSerialBuffer()
//input:none
//output:none
//================================================================
void InitSerialBuffer(void) reentrant
{
toTxBuf=TxBuf;
fromTxBuf=TxBuf;
toRxBuf=RxBuf;
fromRxBuf=RxBuf;
ES=1;
}
//================================================================
//函数功能:串口中断服务程序
//filename:SerialIsr()
//input:none
//output:none
//================================================================
void SerialIsr(void) interrupt 4
{ unsigned char *temp;
if(TI)
{
TI=0;
if(toTxBuf==fromTxBuf) //发送缓冲区为空
{
TIflag=1;
return;
}
SBUF=*fromTxBuf++; //取数指针指向下一单元
if(fromTxBuf==TxBuf+TxBuf_Len) //指向缓冲区开头
fromTxBuf=TxBuf;
}
if(RI)
{
RI=0;
temp=toRxBuf;
if(temp==RxBuf+RxBuf_Len)
temp=RxBuf; //指向缓冲区开头
if(++temp==fromRxBuf) //接收缓冲区为满
return;
*toRxBuf=SBUF;
toRxBuf=temp;
}
}
//================================================================
//函数功能:从串口缓冲区读取一个字节的数据
//filename:L_getch()
//input:ch 指针指向读出的地址
//output:none
//================================================================
bit L_getch(unsigned char *ch) reentrant//从串口缓冲区读1字节数据
{
if(inRxBuf==outRxBuf)
{ES=1;return 0;} //RxBuf Empty
*ch=*fromRxBuf;
fromRxBuf++;
if(fromRxBuf==RxBuf+LenRxBuf)
fromRxBuf=RxBuf;
return 1;
}
//================================================================
//函数功能:打印一个字符(向发送缓冲区写入一个字符)
//filename:PrintChar()
//input:ch char变量
//output:none
//================================================================
void PrintChar(unsigned char ch) reentrant
{
unsigned char *t;
if(TIflag)
{
TIflag=0;
TI=1; //启动串口发送
}
t=toTxBuf; //toTxBuf总是指向一个空的可用单元
t++;
if(t==TxBuf+TxBuf_Len) t=TxBuf;
if(t==fromTxBuf) {/*ES=1;*/return;} //TxBuf Full
*toTxBuf=ch;
toTxBuf=t;
}
//================================================================
//函数功能:显示ASII
//filename:PrintChar()
//input:ch char变量
//output:none
//================================================================
void PrintCh(unsigned char ch) reentrant
{
if(ch>=0&&ch<=9) ch=ch+'0';
else ch=ch+'A'-10;
PrintChar(ch);
}
//================================================================
//函数功能:以十六进制格式显示1个字节数据
//filename:insidePrintByte()
//input:Byte char变量
//output:none
//================================================================
void insidePrintByte(unsigned char Byte) reentrant
{
unsigned char c;
c=Byte;
c=c>>4;
PrintCh(c);
c=Byte;
c=c&0x0F;
PrintCh(c);
}
//================================================================
//函数功能:以十六进制格式显示1个字节数据
//filename:PrintByte()
//input:Byte char变量
//output:none
//================================================================
void PrintByte(unsigned char Byte) reentrant//以十六进制格式显示1个字节数据
{
EA=0;
insidePrintByte(Byte);
EA=1;
}
//================================================================
//函数功能:以十六进制格式显示1个字数据
//filename:insidePrintWord()
//input:Word int变量
//output:none
//================================================================
void insidePrintWord(unsigned int Word) reentrant
{
insidePrintByte(Word>>8);
insidePrintByte(Word&0xFF);
}
//================================================================
//函数功能:以十六进制格式显示1个字数据
//filename:PrintWord()
//input:Word int变量
//output:none
//================================================================
void PrintWord(unsigned int Word) reentrant
{
EA=0;
insidePrintWord(Word);
EA=1;
}
//================================================================
//函数功能:以十六进制格式显示1个长字数据
//filename:PrintLong()
//input:Long0Word Long变量
//output:none
//================================================================
void PrintLong(unsigned long LongWord) reentrant
{
EA=0;
insidePrintWord(LongWord>>16);
insidePrintWord(LongWord&0xFFFF);
EA=1;
}
//================================================================
//函数功能:显示字符串
//filename:PrintStr()
//input:char *str
//output:none
//================================================================
void PrintStr(unsigned char *str) reentrant//显示字符串
{
int i;
unsigned char j;
unsigned char ch;
EA=0;
for(i=0;i<MaxLenStr;i++){
ch=*(str+i);
if(ch=='\0') break;
else if(ch=='\n'){PrintChar(10);PrintChar(13);}
else PrintChar(ch);
}
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -