我来回答你的问题:
1。串口,即串行通迅(异步心通迅)本来就是一位一位的将数据串行发出,所以你的数据(10字节)肯定是一位一位的发,发完第一字--》第二字节--》。。。第10字节。注意发送某一字节时不能停顿,当然串口会自动完成,不需要人工干扰;发完一个字节后中途肯定是可以停顿的,否则我1ms不发送串口就不工作???肯定不会的了。
2。接收端用状态机来做最方便,编者顺手,读者称心。收到一字节后,自动进入中断,定义一下step来指示接收到了哪一个“阶段”,如:地址检验阶段,然后step++,退出中的,下次再进中断时,就进入了下一个“阶段”了,就是你的“数据长度”,然后step++,退出中断(如果数据如:ID,址址不对就直接返回STEP=0)。。。。。直到接收完整个数据帧;接收完一字节数据肯定是要退出中断去做其它事情的,要不就成了轮循的接收方式,而不叫中断方式了;
以下为我用PIC的USART做的一段状态机接收接收程序:
ISR_USART_RX;串口接收中断
MOVFW
RX_STEP
;the
counter
of
RX
ADDWF
PCL,F
GOTO
ISR_RX_PREAMBLE
;同步头检验
GOTO
ISR_RX_ID_H
;ID_H检验,不对就置RX_STEP=0
GOTO
ISR_RX_ID_L
;ID_L检验,不对就置RX_STEP=0
GOTO
ISR_RX_DATA
;数据
GOTO
ISR_RX_CHECK
;检验
希望楼主能满意我的回答。
温馨提示:答案为网友推荐,仅供参考