📄 10_3_2.c
字号:
//单片机发送和接收字符的程序实例:
#include<reg51.h>
unsigned idata rx[10];
unsigned idata tx[10];
unsigned receive(unsigned addrs);
unsigned send();
main()
{
TMOD=0x20; //定时器T1定义为模式2
TL1=0xE6;TH1=0xE6; //置初值,12MHz晶振,波特率1200
PCON=0x00;
TR1=1; //启动定时器
SCON=0xE0; //串行口方式3,允许接收
receive(0xF0); //接收数据
send(); //发送数据
}
unsigned receive(unsigned addrs)
{
unsigned i,p;
while(1)
{
while(RI!=1); //等待PC机的联络信号
RI=0;
if (SBUF!=addrs)
error(); //地址出错,向PC机发出错标记
else
{
TB8=0; //地址标记位清零,准备接收数据
SBUF=0x00; //发地址正确代码
while(TI!=1); //等待发送完
TI=0;
while(RI!=1);
RI=0;
{
while(1)
{
p=0;
for (i=0;i<10;i++)
{
while(RI!=1);
RI=0;
rx[i]=SBUF; //接收数据
p+=rx[i];
}
while(RI==0);RI=0;
if (SBUF==p)
{
SBUF=0x00; //校验和相同,发0x00给PC机
while(TI!=1); //等待发送完
TI=0;
}
else
error(); //出错
}
TB8=1; //重置地址标准位
return(0)
}
}
}
}
unsigned send()
{
unsigned data i,p;
do
{
p=0; //清校验和
for (i=0;i<10;i++)
{
SBUF=tx[i]; //发送数据
p+=tx[i]; //计算校验和
while(TI!=1);
TI=0;
}
SBUF=p; //发送校验和
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}
while(SBUF!=0); //PC机接收不正确时,重新发送
TBS=1; //重置地址标记位
return(0);
}
void error() //出错处理函数
{
SBUF=0xFF; //发出错标志给PC机
while(TI!=1); //等待发送完
TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -