📄 serial.c
字号:
#include <reg52.h>
unsigned char revbuf;//接收到的字符
unsigned char number;
unsigned code cash = '9';
unsigned char copyOK,re_finish;
//串口初始化
void initial()
{
SCON=0x50; //串口工作方式1,允许接收
PCON=0x80; //波特率翻倍
TCON=0;
TMOD=0x26; //T1用于串口波特率控制
TL1=0xfa; //初始化T1,波特率为9600(晶振11.0592M)
TH1=0xfa;
TR1=1; //开定时器
EA=1; //开总中断
ES=1; //开串口中断
copyOK=0;
re_finish=0;
}
void send(void)//向串口发送字符串
{
if(copyOK) //串口准备好且缓冲区准备好
{
REN = 0; //发送过程中禁止接收数据
copyOK = 0; //清缓冲区准备好标志
SBUF = cash; //发送字符串首字符
number = 0; //置发送计数器
}
else
return; //没准备好则返回
}
//串口中断处理函数_接收数据
void serial(void) interrupt 4//串口中断响应
{
if(RI)//为接收中断
{
RI=0; //清接收中断标志
revbuf = SBUF; //读取串口缓冲区数据
revbuf=revbuf-'0';
re_finish=1;
}
else
{
TI=0; //为单个字符发送完中断
if(!number) //字符串发送完
{
REN = 1; //允许接收
}
else
{ //字符串未发送完
SBUF = cash; //发送下一字符
number--; //发送字符数减一
}
}
}
main()
{
initial();
while(1)
{
if(re_finish)
{
re_finish=0;
switch(revbuf)
{
case 0:
P0=0xfe;
break;
case 1:
P0=0xfd;
break;
case 2:
P0=0xfb;
break;
case 3:
P0=0xf7;
break;
case 4:
P0=0xef;
break;
case 5:
P0=0xdf;
break;
case 6:
P0=0xbf;
break;
case 7:
P0=0x7f;
break;
default:
P0=0xff;
break;
}
copyOK=1;
send();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -