打印
[51单片机]

求助关于单片机串口

[复制链接]
683|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shi991|  楼主 | 2015-12-28 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看视频学习单片机的串口通信,试着写一个让电脑发一个数字到单片机,只要有发单片机就反回一个0x10,程序下载进去后,打开串口助手我还没发数字它就不停的发给电脑00了,我关掉串口接收也不行,求给盾看程序那里出错了。波特率我是用stc下载器上计算器算好我复制的,串口助手也是stc下载器上自带的
#include <stc51.h>
void main()
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xB8;                //设定定时初值
        TH1 = 0xB8;                //设定定时器重装值
        TR1 = 1;
        //REN=0;
        while(1)
                {       
                        if(RI==1);
                                {       
                                        RI=0;
                                        SBUF=0x10;
                                        TI=0;                                                                               
                                }               
                }
}

相关帖子

沙发
ningling_21| | 2015-12-28 15:32 | 只看该作者
程序太乱

if(RI==1);

这是要干啥?

使用特权

评论回复
板凳
shi991|  楼主 | 2015-12-28 16:28 | 只看该作者
RI不是串口接收的标记位吗,我看都程和datasheet上都说是只要接收完成硬件自动置1啊

使用特权

评论回复
地板
李不走寻常路| | 2015-12-29 19:04 | 只看该作者
在SBUF=0x10;和TI=0;两句之间加上while(TI==0);  试一试。

使用特权

评论回复
5
ywlzh| | 2015-12-29 22:53 | 只看该作者
   跟你说说51单片机对串口的处理吧,一般是放在中断里去做的,向你这样在主程序里一直判断也是可以的,当数据来了,会使RI置一,这是如果你开了中断使能,就会响应中断,你这样去判断它是否为一也可以,接下来就得将RI清零,读buff,离开。你说要回传一个字节,就在读完buff后加一句发送字节的指令,然后等待TI置一,将其清零即可。

使用特权

评论回复
6
ff8zgs| | 2015-12-30 14:08 | 只看该作者
你换一个usb转串口吧,十有**是他的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

1

粉丝