找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1879|回复: 6
打印 上一主题 下一主题
收起左侧

单片机串口程序调试

[复制链接]
跳转到指定楼层
楼主
ID:980872 发表于 2021-11-14 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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口接到的是串口传来的数据。
这是为什么?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:908826 发表于 2021-11-14 17:33 | 只看该作者
这个程序就这么长???没看见往串口发送的语句哎
回复

使用道具 举报

板凳
ID:624769 发表于 2021-11-14 18:05 | 只看该作者
#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 前抛弃第一收到的噪音,基本就没有问题了。
回复

使用道具 举报

地板
ID:980872 发表于 2021-11-14 19:33 | 只看该作者

谢谢回复,我是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 是第一个吗,这边没有把第一个噪音显示进来吗?
回复

使用道具 举报

5#
ID:980872 发表于 2021-11-14 19:38 | 只看该作者
13205495918 发表于 2021-11-14 17:33
这个程序就这么长???没看见往串口发送的语句哎

第一个程序我没有往串口发数据,P1就等于0了;
第二个程序,我往串口发什么数据,P1就等于SBUF的值。
回复

使用道具 举报

6#
ID:624769 发表于 2021-11-14 20:27 | 只看该作者
xyxiyangyaang 发表于 2021-11-14 19:33
谢谢回复,我是89C52的单片机,天祥电子的板子,我自己也试了一些程序,第一个确实是乱七八糟的数字,但 ...

串口收到的数据,就是在SBUF里面的
你P1 =SBUF; 自然发什么,P1 就等于什么。

你While(1) 是重复执行的,所以,SBUF收到的内容是一直在变的。
你按我说的改了的话,你重起就不会亮灯,串口发了任何数据之后,会所有灯都亮。
说白了那个事列,只是为了验证,RI 有没有动作。
你改成 P1 = SBUF 也就是能多一些变化,实际意义来讲,也就是验证串口有没有正确验证
回复

使用道具 举报

7#
ID:104472 发表于 2021-11-14 20:46 | 只看该作者
程序里面把P1口写成0了,语句是P1=0x00;正确的是当收到串口信号后,读取串口收到的信号,就是读SBUF。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表