?? serial_80c552.asm
字號:
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SERVE ;串行口中斷服務程序入口
ORG 500H
MAIN: MOV TMOD,#20H ;定時器T1為方式2
MOV TL1,#0FDH
MOV TH1,#0FDH ;波特率為9600
SETB TR1 ;啟動T1
MOV S0CON,#50H ;串行口工作在方式1 ,并啟動接收
SETB EA ;開CPU總中斷
WAIT: SETB ES0 ;開串口中斷
NOP
NOP
CLR P1.0
SETB P1.0
LCALL DELAY1
CLR P1.0
CLR P1.1
SETB P1.1
LCALL DELAY1
CLR P1.1
NOP
NOP
AJMP WAIT ;等待中斷
GO: NOP
AJMP GO
;******串口中斷服務程序
SERVE:CLR ES0 ;關串口中斷
PUSH ACC
PUSH DPH
PUSH DPL
MOV R1,#58H ;接收字符存放始址
MOV R7,#02H ;接收字符的字節數
RXD: JNB RI,RXD ;等待接收字符
CLR RI
MOV A,S0BUF
; MOV R2,ACC.7 ;將偶校驗位送至60H保存
; MOV 60H,R2
; ANL A,#7FH ;去偶校驗位
MOV @R1, A
; MOV R3,P ;取奇偶標志送至61H保存
; MOV B,R3
; ANL 60H,#01H ;屏蔽他們的高7位
; ANL B,#01H
; MOV A,60H
; XRL A,B
; JNZ ERR1 ;偶校驗正確否?
INC R1
DJNZ R7,RXD
;AJMP $
;----判斷接收的指令
PD: MOV R1,#58H ;接收字符存放始址
MOV R2,#02H ;字節數
LOOP: CJNE @R1,#2FH,PD1
INC R1
DJNZ R2,LOOP
AJMP PD2
PD1: MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV S0CON,#40H
MOV R0,#48H ;發送字符的始址
MOV R7,#02H ;發送字符的字節數
MOV 48H, #33H
MOV 49H, #44H
SETB TR1
AJMP TXD
PD2: MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV S0CON,#40H
MOV R0,#48H ;發送字符的始址
MOV R7,#02H ;發送字符的字節數
MOV 48H, #55H
MOV 49H, #66H
SETB TR1
TXD:MOV A,@R0
MOV S0BUF,A
WAIT1:JNB TI,WAIT1
CLR TI
INC R0
DJNZ R7,TXD
POP DPL
POP DPH
POP ACC
MOV S0CON,#50H
SETB ES0
RETI
DELAY1: MOV R1,#0AH
DEL11: MOV R2,#0FFH
DEL12: MOV R3,#080H
DEL13: DJNZ R3,DEL13 ; 1+[1+(1+2*255+ 2)*255+2]*10+2=0.66S
DJNZ R2,DEL12
DJNZ R1,DEL11
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -