这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教一个关于单片机串口的程序问题

共7条 1/1 1 跳转至

请教一个关于单片机串口的程序问题

工程师
2021-11-14 21:44:41     打赏


#include<reg52.h>

void main()

{

        TMOD=0x20;

        TH1=0xfd;

        TL1=0xfd;

        TR1=1;

        REN=1;

        SM0=0;

        SM1=1;

        EA=1;

        

        while(1)

                {

                while(!RI);

                        RI=0;

                        P1=0x00;

                }        

}


天祥单片机里面第七讲,想不明白,为什么这样写,P1口全被置零了,事实上,我并没有往串口发送数据。程序烧好之后,按复位键之后,P1口还是全置零(P1口等于0代表LED灯亮。)


如果把循环换成

while(1)

                {

                while(!RI);

                        RI=0;

                        P1=SBUF;

                }

P1口接到的是串口传来的数据。

这是为什么?





关键词: 单片机     串口     程序    

工程师
2021-11-14 22:34:32     打赏
2楼
#include<reg52.h>
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        while(!RI);
        RI=0;        
        while(1)
                {
                while(!RI);
                        RI=0;
                        P1=0x00;
                }        
}

如果改成这样, 重起之后,应该就不会灯全亮了。

不知道你是什么板子, 也不知道你是什么单片机。很多学习板设计问题,重起后,串口会收到一个因为噪音产生的数据,其实是全1,但是你这个语句什么都没管,直接P0 = 0; 所以分辨不出。你进入while 前抛弃第一收到的噪音,基本就没有问题了。



工程师
2021-11-14 22:54:49     打赏
3楼

谢谢楼上兄弟的答复!

谢谢回复,我是89C52的单片机,天祥电子的板子,我自己也试了一些程序,第一个确实是乱七八糟的数字,但是如果程序这样写的话,
#include<reg52.h>
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        
        while(1)
                {
                while(!RI);
                        RI=0;
                        P1=SBUF;
                }        
}
串口输入什么,P1就是什么,
SBUF 是第一个吗,这边没有把第一个噪音显示进来吗?



高工
2021-11-15 11:11:07     打赏
4楼

好古老的程序啊


工程师
2021-11-19 23:55:57     打赏
5楼

问题还是比较复杂的


工程师
2021-12-20 23:38:18     打赏
6楼

大家都非常热心


高工
2021-12-21 21:31:11     打赏
7楼

学习


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]