51单片机串口通信实验程序

#include
#define uchar unsigned char
#define uint unsigned int

uint infor;

void main()
{
SCON=0x50; //设置串口工作方式为:10位串口发送
TMOD=0x20; //0010 0000 表示定时器T1工作在定时模式、工作方式为:八位自动重装
TH1=0xfd; //通过波特率计算公式,计算出所需波特率对应的定时器的溢出率,设置相应重装的数,此处波特率为9600
TL1=0xfd;
TR1=1; //开启定时器让定时器T1工作
EA=1; //开总中断
ES=1; //开串口中断
// REN=1; //允许串口接收数据

while(1);
}

void CK_timer1() interrupt 4
{
if(RI) //判断是否是接收数据引起的中断
{
RI=0; //清接收中断标志位
infor=SBUF; //从SBUF中读取接收到的数据

REN=0; //不允许串口接收数据
// SBUF=infor; //将数据送给SBUF,通过串口发送出数据。
}
else //如果是发送数据完成引起的中断
{
TI=0; //清发送中断标志位
// REN=1; //发送完成,允许串口接收数据。
}
}



/*
串口实验注意事项:
1、串口设置过程:设置串口工作方式、设置波特率
2、串口中断程序运行条件:开串口中断、TI或RI置1。
3、TI和RI都是由硬件置1,但需要由软件对其进行清零。
4、输出SBUF和接收SBUF共用一个地址99H,但硬件上并不是同一个地方
*/

相关文档
最新文档