📄 comtest.asm
字号:
单片机串口的测试软件,通信数据包括帧头、帧尾、帧长、帧起始和结束标志等。
Right EQU 0F0H
Error EQU 0F1H
FrameHead EQU 0F5H
FrameTail EQU 0FFH
Frame_buffer EQU 30H ;(30H~~3FH) recieve buffer
RAM EQU 40H ;(40H~~4FH) ram buffer
FrameLen EQU 25H
Frame_Temp EQU 26H
Frame_End EQU 27H
Frame_XRL EQU 28H
Frame_Start_Flag BIT 00H
Frame_End_Flag BIT 01H
Frame_Valid BIT 02H
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COMM
MAIN:
MOV SP,#60H
MOV SCON,#0F0H
; MOV PCON,#00H
MOV TMOD,#20H
MOV TH1,#0FEH
MOV TL1,#0FEH
SETB EA
SETB TR1
SETB ES
CLR P1.0
LOOP: NOP
NOP
SETB EA
JB Frame_Start_Flag,Invalid_Frame ;judge frame valid
JNB Frame_End_Flag,Invalid_Frame
MOV A,Frame_End ; frame tail judge
CJNE A,#FrameTail,Frame_Invalid ; judge frame valid
MOV R0,#Frame_buffer
MOV R1,#RAM
MOV R2,#6
CopyData:
MOV A,@R0
MOV @R1,A
XRL Frame_XRL,A
INC R0
INC R1
DJNZ R2,CopyData
MOV A,@R0
CJNE A,Frame_XRL,Frame_Invalid
SETB Frame_Valid
MOV SBUF,#Right
JNB TI,$
LJMP Invalid_Frame
Frame_Invalid:
CLR Frame_Valid
MOV SBUF,#Error
JNB TI,$
Invalid_Frame:
LJMP LOOP
COMM: PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
SETB RS0
CLR RI
MOV A,SBUF
MOV Frame_Temp,A
CJNE A,#FrameHead,Judge_Start_Flag
MOV A,FrameLen
JNZ Judge_Start_Flag
INC FrameLen
SETB Frame_Start_Flag ;set frame start flag
CLR Frame_End_Flag
MOV R0,#Frame_buffer
LJMP CommExit
Judge_Start_Flag:
JNB Frame_Start_Flag,CommExit
MOV @R0,Frame_Temp
INC R0
INC FrameLen
MOV A,FrameLen
CJNE A,#8,Next_Judge
MOV Frame_End,Frame_Temp
SETB C
Next_Judge:
JC CommExit
SETB Frame_End_Flag
CLR Frame_Start_Flag
CommExit:
POP DPL
POP DPH
POP ACC
POP PSW
SETB EA
RETI
DEL1BIT:MOV R4,#8
DJNZ R4,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -