专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

C51单片机串口通信

作者:huqin   来源:本站原创   点击数:  更新时间:2014年04月13日   【字体:

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<reg52.h>
#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;      //接收完成标志位 
}

 

关闭窗口

相关文章