?? 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 + -