51串口通信出错,第一个数据被覆盖[求助]
我是一个单片机初学者,希望大侠不吝赐教!
我写了个串口数据接受程序(蛮菜的一个程序)!如果我一位一位的发送数据,接受端就可以正确的接受,但是一旦一起发送,如:01 02 03 04 05 06(我这个程序,只接受6字节数据),那么接收的数据就成了:02 03 04 05 06 06!
我不知道是甚么原因,希望各位高手指点!以下是我的程序:
要是各位高手看出甚么不对的地方,就请直接提出,小弟这里受教了,都是为了学习嘛!
ORG 0070H
COMM_BUFFER: DS 7;接受缓冲区
STOP_NUM EQU 77H ;本地识别号,判断是否为发送给自己的数据
REC_NUM EQU COMM_BUFFER+3;存放识别号
ORG 0000H
SJMP INIT
ORG 0023H
SJMP COM_INT
ORG 0050H
INIT:
MOV R0,#STOP_NUM
MOV A,#07H
MOV @R0,A
MOV TMOD,#20H;以下把波特率设置为9600
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
SETB ES
SETB EA
MOV R0,#COMM_BUFFER
MOV R7,#0 ;计数器
MAIN: JMP $ ;主循环
COM_INT:
PUSH ACC
PUSH B
CLR RI
CLR EA
MOV A,SBUF;我看了好像只要一起发送,第一个接收的就是02
;而不是01
MOV @R0,A
INC R7
INC R0
CJNE R7,#6,GO_ON
MOV A,REC_NUM
CJNE A,STOP_NUM,NO_MINE;不是自己的数据就不管
MOV A,74H ;74H存放的是识别号
CJNE A,#0A1H,NOT_A1
MOV P1,#0FFH
CALL DELAY
JMP GO_ON
NOT_A1:
CJNE A,#0A2H,NOT_A2
MOV P2,#0FFH
CALL DELAY
JMP GO_ON
NOT_A2:
CJNE A,#0A3H,NOT_A3
MOV P3,#0FFH
CALL DELAY
JMP GO_ON
NOT_A3: ;命令等待执行
CALL DELAY
JMP NO_MINE
GO_ON: SETB EA
POP B
POP ACC
RETI
NO_MINE:
MOV R0,#COMM_BUFFER
MOV R7,#0
JMP MAIN
DELAY: MOV R2,#78
DELAY1: MOV R3,#0FFH
DELAY2: MOV R4,#0FFH
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
RET
END
发表时间:2007年9月8日12:55:35