amobbs.com 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
回复: 5

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

[复制链接]
(146452804)

打赏出0元收入0元

发表于 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;
}
结果有的正常有的错误随机不知道什么原因
(146450939)

打赏出0元收入0元

发表于 2015-11-20 11:06:35 | 显示全部楼层
i=8; TR0=1;这后面加一句WaitTF0();
(146422690)

打赏出0元收入0元

 楼主| 发表于 2015-11-20 18:57:24 | 显示全部楼层
lcw_swust 发表于 2015-11-20 11:06
i=8; TR0=1;这后面加一句WaitTF0();

非常感谢,明白了自己查了好几遍没发现。
(146420855)

打赏出0元收入0元

发表于 2015-11-20 19:27:59 | 显示全部楼层
好歹用个高优先级的定时中断来做吧
(146419598)

打赏出0元收入0元

 楼主| 发表于 2015-11-20 19:48:56 | 显示全部楼层
amigenius 发表于 2015-11-20 19:27
好歹用个高优先级的定时中断来做吧

只要发送功能还是简单点符合我的要求
(146409841)

打赏出0元收入0元

发表于 2015-11-20 22:31:33 | 显示全部楼层
串口要求严格的时序,所以你定时器中断要用高优先级,其他中断用低优先级。
线确定你的定时时间是一个位的时间,9600就是104.17us。
回帖提示: 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-7-11 11:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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