请教关于串口通讯问题

2019-07-15 08:05发布

#include<reg52.h>
unsigned int a;
void ConfigUART(unsigned int baud);

void main()
{
        ConfigUART(9600);

        while(1)
        {
                while(!RI);
                a=SBUF;
                RI = 0;
               
                SBUF = a;
                while(!ti);
                TI = 0;               
        }
}

void ConfigUART(unsigned int baud)
{
        SCON = 0x50;
        TMOD &= 0X0F;
        TMOD |= 0x20;
        TH1 = 256 - (11059200/12/32)/baud;
        TL1 = TH1;
        ET1 = 0;
        TR1 = 1;
}

这个程序是9600波特率的,这个程序的意思大致就是敲什么返回什么。
上图是我在大框里敲1返回的值,不知道哪错了



QQ图片20180807153722.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
零落凡尘
2019-07-15 15:50
#include<reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
unsigned char flag,a;
void init()
{
       
                REN=1;//允许串行口接收数据
                SM0=0;
                SM1=1;//设置串口工作方式 1
                TMOD=0x20;//定时器1工作方式2(八位自动重装)
                TH1=0xfd;
                TL1=0xfd;//波特率9600
                EA=1;//开总中断
                ES=1;//开串行口中断
                TR1=1;//启动定时器1
                while(!RI);//接收数据
                RI=0;//清零
       
}
void main()
{
        init();
        while(1)
        {
                if(flag==1)
                {
                        ES=0;  //发送数据关闭串口中断
                   SBUF = a;//发送
                   while(!TI);//TI:请求中断标志位,在发送完一帧数据后自动置位
                   TI=0;
                   ES=1;
                   flag=0;
                }               
        }
}        
void ser() interrupt 4
{
        RI=0;        //软件清零
/*    P1=SBUF   可加可不加,用于检测是否有数据接收     */
        a=SBUF;        //取走
        flag=1;
       
}
//该注释的都注释了,自己看吧

一周热门 更多>