pc向c51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"
二、代码
/*程序功能:
pc向c51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"
*/
#include
#define uchar unsigned char
//定义变量
uchar recbuf[10]; //接收数据缓存
uchar recnum;
//定义引脚,P1口的0脚控制指示灯,
//light=0,表示指示灯亮,light=1, 表示指示灯暗
sbit light=P1^0;
//定义通信联络信号
char buf[2]={'o','k'};
//初始化工作,
//T0、T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号
//串口设置,
void init();
//声明处理函数
void answer();
//主函数
void main()
{
init();
while(1)
{
answer();
}
}
//初始化工作,
//T0、T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号
//串口设置,
void init()
{
//定时器设置
//T1,方式2,自动重载作波特率发生器
//T0,方式0,13位计数器,作定时器,超时溢出
TMOD=0x20;
//T1常数计算,baud=9600,f=11.0592MHZ
//晶振->12分频->定时器输入,8位计数,定时器输出->2分频(默认SMOD=0,如SMOD=1不分频)->16分频->波特率
//常数TC=2^8-f/12/2/16/baud
TL1=0xfd;
TH1=0xfd;
//串口设置
//串口方式1,允许接收
SCON=0x50;
//中断设置,串口开中断
ES=1; //串口开中断
EA=1; //打开 总允许
//启动定时器
TR1=1;
}
//定义串口中断程序,不需要声明
void serial() interrupt 4
{
//关中断
TI=0;
ES=0; //关键语句,关闭中断,程序可顺序向下执行
//启动定时器,超时推出
TH0=0x00;
TL0=0x00;
TR0=1;
//
recnum=0;
//----- 收到第一个字节
//没有收到数据,未超时,等待
while((RI==0) && (TF0==0));
//手动复位
RI=0;
//如果超时,返回
if(TF0==1)
goto mm;
//收到第一个字节数据
recbuf[recnum++]=SBUF;
//----- 收到第二个字节
//启动定时器,超时推出
TH0=0x00;
TL0=0x00;
//没有收到数据,未超时,等待
while((RI==0) && (TF0==0));
//手动复位
RI=0;
//如果超时,返回
if(TF0==1)
goto mm;
//收到第二个字节数据
recbuf[recnum++]=SBUF;
//----- 收到第三个字节
//启动定时器,超时推出
TH0=0x00;
TL0=0x00;
//没有收到数据,未超时,等待
while((RI==0) && (TF0==0));
//手动复位
RI=0;
//如果超时,返回
if(TF0==1)
goto mm;
//收到第三个字节数据
recbuf[recnum++]=SBUF;
//----- 收到第四个字节
//启动定时器,超时推出
TH0=0x00;
TL0=0x00;
//没有收到数据,未超时,等待
while((RI==0) && (TF0==0));
//手动复位
RI=0;
//如果超时,返回
if(TF0==1)
goto mm;
//收到第四个字节数据
recbuf[recnum++]=SBUF;
//----- 收到第五个字节
//启动定时器,超时推出
TH0=0x00;
TL0=0x00;
//没有收到数据,未超时,等待
while((RI==0) && (TF0==0));
//手动复位
RI=0;
//如果超时,返回
if(TF0==1)
goto mm;
//收到第五个字节数据
recbuf[recnum++]=SBUF;
//关闭T0
mm:TR0=0;
TF0=0;
ES=1;
}
//定义处理函数
void answer()
{
//
uchar i;
//关中断发送数据
RI=0;
TI=0;
ES=0;
if(recnum>0)
{
if( (recbuf[0]=='h') && (recbuf[1]=='e') && (recbuf[2]=='l') && (recbuf[3]=='l') && (recbuf[4]=='o') )
{
//点亮指示灯
light=0;
//发送OK,表示通信正常
for(i=0;i<2;i++)
{
SBUF=buf[i];
while(TI==0);
TI=0;
}
}
recnum=0;
}
ES=1;
}
推荐阅读最新更新时间:2024-03-16 15:15