[讨论] 根据协议编写单片机串口程序的问题

zhangdong158   2009-5-14 14:16 楼主
单片机和PC上位机定好了协议,然后我这里是单片机接收PC的数据,根据协议是一个一个数据包处理的。
以前没怎么编过这方面的程序,还请各位帮帮忙……
具体协议:
1. PC给MCU发: 帧头:0xff + 卡号(1BYTE)0x_ _ + 时(1BYTE):0x_ _ + 分(1BYTE):0x_ _ + 秒
(1BYTE):0x_ _ + 校验位(1BYTE)(卡号,时分秒相或的结果)
2. MCU给PC发: (这里先给每个MCU编号)
   帧头:0xff + 卡号(1BYTE)0x_ _  + 状态(0x01为正确,0x00为错误)+ 校验位(1BYTE) (卡号和
状态相或的结果)

我试着编程,可是总是出错,以前只会一个一个数据接收,不知道怎么一个一个数据包接收……
请高手们帮忙看看如何编程序啊?

回复评论 (3)

郁闷,没人顶
点赞  2009-5-15 08:31
这个首先得知道包的大小,然后做一指针,和一计数。
如,一个数据包有16个字节,它将放在20H到2FH的地址上。

那么在主程序里给它初始化一下:
MOV R0,#20H  ;把指针指向存放数据的首地址。
MOV R1,#0FH  ;定义数据包的大小

串口中断程序:
MOV @R0,SBUF
INC R0
DJNZ R1,继续接收
MOV R0,下一次接收存放数据的地址  ;本次接收完后为下一次数据的接收做初始化
MOV R1,下一次接收的数据包的大小
继续接收: RETI         ;中断返回


大概一个意思,具体的一些细节得看具体情况。
点赞  2009-5-16 00:17
楼主要问的是上位机呢还是单片机呢?还是两者呢?
点赞  2009-5-16 00:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复