单片机上电发送乱码00,有时候第一帧数据还会缺少首个字节 随后的数据正常 是怎么回事

我的一帧数据49个字节 上电后发送了一个00 然后只发送48个字节,之后的字节数都是49,有时候下电还会发送上次发送的那帧数据的最后一个字节 请大神帮我看看是怎么回事?

你的程序是在中断函数里发送数据的吗?
最好不要这样,采用查询式发送比较好。
因上电的初始程序就开中断了吧,而上电会因干扰产生中断信号。
或者串口中断函数中要判断一下是由TI还是由RI产生的中断。
关电时,有时会发送一个乱码,这正常。你是用电脑接收的吧。
因你没有上传一点程序,所以,这些都是猜测的。
如果需要在中断函数中发送,最好是开机延时几秒后再开中断,而且在开中断前先设置串口工作模式,设置串口模式时,要写SCON=0x50;而不要一位一位地写,这样写可以清除RI和TI,可以防止因开机干扰产生的错误发送。追问

你好,我用的是430单片机,发送数据在主函数进行,用的for循环,中断是在程序初始化结束之后开的,这个因上电产生的干扰应该怎么屏蔽?
接收用的是电脑,乱码时有时没有的。。。都快整蒙了。。。
开机延时开中断,是不是在主函数刚开始就加一个while(i--);?
我试过了,延时2S多都不行。。。而且这个00在串口软件上出现的时间比2S要短。。。是不是说明这个00跟程序没什么关系?

追答

根据你的描述,就是硬件产生的干扰,并非是串口发送的。
你这串口是RS232吧,向电脑发送数据的,但不知用的什么232芯片。
你可以这样试一下,在单片机发送引脚上加一个10K的上拉电阻。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-02
应该程序有BUG,你是串口发送吗,注意发送开始的地址追问

我是把接收到的数据先保存进一个数组a,然后在a中提取到有用的字节,将有用信息再存入数组b,然后将数组b发送出去。。。发送的时候从b[0]开始的...用的是for循环发送。。这个发送开始的地址应该注意一些什么呢?

第2个回答  2015-08-02
你试试在main函数开始的时候给一个延时还有没有问题追问

有。。。延时了2s多。。。

第3个回答  2015-08-02
也是醉了。。。这不是我提问的么。。。
相似回答