×
单片机 > 单片机程序设计 > 详情

C51单片机串口通信

发布时间:2020-08-21 发布时间:
|

1、在使用串口之前,应对其进行初始化,步骤如下:
(1)定时器1工作模式,设置TMOD寄存器
(2)装载TH1,TL1,决定波特率的值
(3)启动定时器1
(4)串口工作模式设置,SCON
(5)如需中断,开总中断,开串行中断

2、如需奇偶校验:
偶校验:就是发送的8个数据位的1的个数为偶数时,TB8=0;为奇数时,TB8=1;
奇校验:与偶校验相反的TB8。

用软件产生奇偶校验位是根据51系列单片机的状态寄存器PSW的定义:当累加器ACC中为1的个数为奇数时,P=1,否则P=0。

3、程序(采用偶校验)
#include
#define uchar unsigned char
#define uint unsigned int
uchar rcvd_num;
bit chk_error;
bit rcvd_ok;
void init(void);
void main(void)
{
init();
while(1)
{
if(rcvd_ok)
{
rcvd_ok=0;
ES=0;
if(chk_error)
{
ACC='e';
TB8=P;
SBUF='e';
while(!TI);
TI=0;
}
else
{
P0=rcvd_num;
ACC='c';
TB8=P;
SBUF='c';
while(!TI);
TI=0;
}
ES=1;
}
}
}
void init(void)
{
TMOD=0x20; //定时器1工作模式2
TH1=0xfd; //初值装载,波特率9600
TL1=0xfd;
SCON=0x50; //串口工作模式3
EA=1; //开总中断
ES=1; //开串行中断
TR1=1; //启动定时器1
}
void serial() interrupt 4
{
rcvd_num=SBUF;
ACC=rcvd_num; //将数据送入累加器中算出1奇偶个数,奇数时P为1,偶数时P为0;
if(RB8==P)chk_error=0; //1奇偶个数与发送的相同,则数据无错
else chk_error=1;
RI=0;
rcvd_ok=1; //接收完成标志位
}

关键字:C51单片机  串口通信  初始化 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析