[51单片机] 求助关于单片机串口

[复制链接]
845|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);  试一试。
ywlzh 发表于 2015-12-29 22:53 | 显示全部楼层
   跟你说说51单片机对串口的处理吧,一般是放在中断里去做的,向你这样在主程序里一直判断也是可以的,当数据来了,会使RI置一,这是如果你开了中断使能,就会响应中断,你这样去判断它是否为一也可以,接下来就得将RI清零,读buff,离开。你说要回传一个字节,就在读完buff后加一句发送字节的指令,然后等待TI置一,将其清零即可。
ff8zgs 发表于 2015-12-30 14:08 | 显示全部楼层
你换一个usb转串口吧,十有**是他的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部