amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 658|回复: 5

STC89C52 IO模拟串口偶尔出现乱码

[复制链接]
发表于 2015-11-20 10:35:30 | 显示全部楼层 |阅读模式
模拟串口拜托了9600只发不收
定时器0
void S2INI(void)
{
        TMOD |=0x02;
        TH0=0x9c;
        TL0=TH0;
        TR0=1;
        TF0=0;
}
等待溢出
void WaitTF0( void )
{
        while(!TF0);
        TF0=0;
}
发送
void WByte(uchar input)
{
        //发送启始位
        uchar i;
        i=8;
        TR0=1;
        DATA=0;
        WaitTF0();
        //发送8位数据位
        while(i--)
        {
                DATA=(input&0x01);//先传低位
                WaitTF0();
                input=input>>1;
        }
        //发送结束位
        DATA=1;
        WaitTF0();
        TR0=0;
}
结果有的正常有的错误随机不知道什么原因
发表于 2015-11-20 11:06:35 | 显示全部楼层
i=8; TR0=1;这后面加一句WaitTF0();
 楼主| 发表于 2015-11-20 18:57:24 | 显示全部楼层
lcw_swust 发表于 2015-11-20 11:06
i=8; TR0=1;这后面加一句WaitTF0();

非常感谢,明白了自己查了好几遍没发现。
发表于 2015-11-20 19:27:59 | 显示全部楼层
好歹用个高优先级的定时中断来做吧
 楼主| 发表于 2015-11-20 19:48:56 | 显示全部楼层
amigenius 发表于 2015-11-20 19:27
好歹用个高优先级的定时中断来做吧

只要发送功能还是简单点符合我的要求
发表于 2015-11-20 22:31:33 | 显示全部楼层
串口要求严格的时序,所以你定时器中断要用高优先级,其他中断用低优先级。
线确定你的定时时间是一个位的时间,9600就是104.17us。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-8-20 20:56

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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