欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> 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;      //接收完成標志位 
}

 

關閉窗口

相關文章