📄 fasong.asm
字号:
;一个以89C51为核心构成的数据采集系统,要求每分钟向上位机发送32字节的采集数据
;通讯波特率9600波特,系统晶振11.0592MHz,数据采用校验和方式进行校验。
;当接收方接收的数据出错时,向发送方发送ASCII码"E",否则发送"R"。
;若发现接收错误,发送方应该重发数据。
S_END BIT 00H
ACK BIT 01H
OK BIT 02H
MIN BIT 03H
CR2 EQU 0AH
CR3 EQU 0BH ;1区R2,R3
BR0 EQU 10H
BR2 EQU 12H ;2区R0,R2
LEN EQU 32 ;数据块长度
ADDR1 EQU 30H ;数据块首地址
ORG 0
LJMP START
ORG 0BH
LJMP TS
ORG 23H
LJMP TR
ORG 30H
START: MOV SP,#60H
;===============================
;向发送数据缓冲区赋值
;===============================
MOV R0,#ADDR1
MOV R2,#26
MOV A,#'A'
LL1: MOV @R0,A
INC A
INC R0
DJNZ R2,LL1
MOV R2,#4
MOV A,#'0'
LL2: MOV @R0,A
INC A
INC R0
DJNZ R2,LL2
MOV @R0,#0AH ;存换行符
INC R0
MOV @R0,#0DH ;存回车符
;=================================
MOV TMOD,#21H
MOV TH0,#4CH
MOV TL0,#0
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB PT0
SETB ET0
ANL PCON,#7FH ;SMOD=0
MOV SCON,#50H
SETB ES
SETB EA
SETB TR0
SETB TR1
MOV CR2,#20
MOV CR3,#60
CLR S_END
CLR ACK
CLR OK
CLR MIN
LOOP: JNB MIN,$
CLR MIN
MOV R2,#LEN
MOV R0,#ADDR1
CLR A
L1: ADD A,@R0
INC R0
DJNZ R2,L1
MOV @R0,A ;存检查和
L2: MOV BR2,#LEN+1
MOV BR0,#ADDR1
MOV A,ADDR1
MOV SBUF,A ;发送第一个字节
JNB S_END,$ ;没有发送完毕就等待
CLR S_END
JNB ACK,$ ;没有应答则等待
CLR ACK
JNB OK,L2 ;接收方返回错误代码则重发
SJMP LOOP
TS: PUSH PSW
SETB RS0
CLR RS1 ;选择1区R寄存器
CLR TR0
MOV TH0,#4CH
MOV TL0,#0
SETB TR0
DJNZ R2,TS1
MOV R2,#20
DJNZ R3,TS1
MOV R3,#60
SETB MIN ;一分钟到,置MIN标志
TS1: POP PSW
RETI
TR: PUSH PSW
PUSH ACC
CLR RS0
SETB RS1 ;选2区R寄存器
JNB TI,SR2
CLR TI
DJNZ R2,SR1
SETB S_END
SJMP SR2
SR1: INC R0
MOV A,@R0
MOV SBUF,A
SJMP SR4
SR2: JNB RI,SR4
CLR RI
SETB ACK
MOV A,SBUF
CJNE A,#'R',SR3
SETB OK
SJMP SR4
SR3: CLR OK
SR4: POP ACC
POP PSW
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -