STC12C5A60S2单片机串口接收数据

这个单片机接收一个连续的15字节的帧数据,使用定时器1波特率怎么设置呢?
用了stc的例程或者网上的例程总是不对,要不就是12字节要不就13字节,收不到全的。

第1个回答  2015-08-13
定时器1设置波特率,与接收多少个字节没有关系,接收一个,几百个,就是不停地接收,只要波特率不变,设置的时间常数就不用变。
至于接收多少字节为一帧数据,也不是用定器1来控制来计数的,它只管波特率。
要控制接收多少字节,用一个变量计数。对于这种按帧来发送/接收的数据包,都应该有一个起始字节(固定的特殊的字节),当接收到起始字节就开始计数,算起始字节共接收到15个,就设置一个标志位,表示一帧接收结束。然后主程序查询到标志位后进行执行处理。
这种以帧为一个数据包字的节数也不是固定的,所以,网上的例程也不过是个例程而已,不是拿来就直接用的,需要根据实际做适当修改的。
哪有什么都照搬的。追问

嗯,首先感谢你耐心的回答。然后反馈一下,修改后的程序现在波特率确定没问题了,我用单片机给PC段的助手发送字符串,通信无误了。
但是上面的问题仍然存在,用助手收的话是15字节,用单片机是13字节。接收的数据是一串16进制数,就是说漏了2个字节,每次都是。既然波特率没问题,怎么会少这2个字节呢?
会是什么原因呢?

追答

你之前提问过,我想起来了。
其实,这个问题,也好解决,先不管接收什么,也不管是什么数据,凡是收到一个字节就显示出来,用LCD1602两行足够显示的,就可以看到了,到底都收到什么数据了,到底还缺少什么字节了。既然串口助手收没有问题,那用单片机也一样,没有问题。

追问

用1602显示十六进制数搞了好久没搞出来。

追答

你既然用STC12C5A60S2,有两个串口,一个串口接收那个传感器的数据,用另一个串口按接收原数据发送出,再用电脑串口调试助手接看就方便多了,程序也好写。
其实,问题也很好解决,就是你准备用那个传感器做什么,就直接写那个程序吗,接收到数据后打算做什么,就做什么呀,看能不能达到效果。既然LCD显示程序不会写,总不能就在这傻等吧。得想点办法吗。

本回答被网友采纳
相似回答