虽然都是串口,但在这两款CPU上有一点区别。51单片机发送数据时的结束位留的比较长,大约是1个bit的宽度。发完这个结束位之后,内部才会报告“发送缓冲区空”。而PIC18系列单片机则不是,发送结束位的同时就开始报告“发送缓冲区空”。richfan78@hotmail.com
这点区别会带来什么不同呢?当用在全双工通讯时(如RS232)或者单工通讯时,两者没有区别,甚至PIC18的速度更快一些,因为结束位与起始位重合在一起了。richfan78@hotmail.com
当用在半双工通讯时(如RS485)就不一样了。一般在RS485总线上,设备发送完数据后会马上将状态切换为接收(通过控制485收发芯片的状态)。如果CPU是51单片机,那么好,数据在被完全发出去后还要跟上结束位,然后向CPU的程序报告“发送缓冲区空”,这时CPU将485芯片状态切换至接收。整个通讯非常正常。 如果CPU是PIC18系列单片机,那么数据在发出去之后在发送结束位的同时,CPU就向程序报告“发送缓冲区空”了,程序如果此时立即转换485的芯片状态,则会导致结束位只发出去了一点点。结果总线上的侦听端没有收到结束位,还在那里傻等呢。使用PIC18单片机进行485操作的正确做法是——程序收到“发送缓冲区空”的报告后,延时一个bit的时间,再去转换485芯片的状态。richfan78@hotmail.com
别看这个小区别,差点毁了一个公司呢。以前我工作的一家公司为了适应市场需要,进行了新产品研发,而将一部分设备的CPU从51单片机换成了PIC18,把以前的程序拿过来改吧改吧就给客户跑上了。结果原来能够达到3600米的通讯距离,变成了最远1100米,而且还老丢数。这种情况持续了一年,客户意见老大了。而且这个客户是公司的最重要支柱,他们几次威胁要拆掉我们的系统,弄得老板很头大。后来,我接手了这项任务,经过仔细研究波形终于发现了这个小区别,在CPU里加了一条延时指令后,通讯又回到了以前3600米的稳定水平,老板的脸上又恢复了笑容。hiahia...richfan78@hotmail.com