?? subproc.asm
字號:
;基于串口通訊的子程序調試軟件
;大強制作
;nie_zq@163.net
RX0 EQU 10H
RX1 EQU 11H
RX2 EQU 12H
RX3 EQU 13H
RX4 EQU 14H
TX0 EQU 15H
TX1 EQU 16H
TX2 EQU 17H
TX3 EQU 18H
TX4 EQU 19H
PARAM0 EQU 11H
PARAM1 EQU 12H
PARAM2 EQU 13H
PARAM3 EQU 14H
RET0 EQU 16H
RET1 EQU 17H
RET2 EQU 18H
RET3 EQU 19H
;---------------------------------------------------
ORG 0000H
SJMP INIT_COM
ORG 0023H
AJMP COM_INT
ORG 0030H
INIT_COM: SETB P3.0
SETB P3.1
MOV IP,#00H
;SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
MOV SCON,#11010000B ; 1 1 0 1 0 0 0 0
ANL PCON,#01111111B
MOV TCON,#00H
MOV IE,#00H
MOV TH1,#0FFH;波特率28800*TMOD
MOV TL1,#0FFH
;TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
MOV TMOD,#00100000B; 0 0 1 0 0 0 0 1
SETB TR1
SETB ES
SETB EA
MOV SP,#50H
;------------------------------------------------
CLR P3.3;Vpp=5V
CLR P3.4
SJMP $
;------------------------------------------------
; 在下面添加被調試的子程序入
;------------------------------------------------
PROCESS_1: CLR P3.3;Vpp=0v
SETB P3.4
MOV TX1,#0;顯示0v
RET
PROCESS_2: CLR P3.3;Vpp=5V
CLR P3.4
MOV TX1,#5;顯示5v
RET
PROCESS_3: CLR P3.4;Vpp=12v
SETB P3.3
MOV TX1,#12;顯示12v
RET
PROCESS_4:
RET
PROCESS_5:
RET
PROCESS_6:
RET
;--------------------------------------------------------------------------
;
;--------------------------------------------------------------------------
DELAY: MOV R6,#5
MOV R5,#5
DJNZ R6,$
DJNZ R5,$
DJNZ R7,DELAY
RET
TX_PC: CLR ES ;發送5個字節
CLR TI
MOV SBUF,TX0
JNB TI,$
CLR TI
MOV SBUF,TX1
JNB TI,$
CLR TI
MOV SBUF,TX2
JNB TI,$
CLR TI
MOV SBUF,TX3
JNB TI,$
CLR TI
MOV SBUF,TX4
JNB TI,$
CLR TI
SETB ES
RET
RX_PC: CLR ES ;接收5個字節
JNB RI,$
MOV RX0,SBUF
MOV TX0,RX0
CLR RI
JNB RI,$
MOV RX1,SBUF
CLR RI
JNB RI,$
MOV RX2,SBUF
CLR RI
JNB RI,$
MOV RX3,SBUF
CLR RI
JNB RI,$
MOV RX4,SBUF
CLR RI
SETB ES
RETI
COM_INT: PUSH A ;串口中斷服務
PUSH 00H
JNB TI,RX_INT
POP 00H
POP A
RETI
RX_INT: LCALL RX_PC
MOV A,RX0 ;接收緩沖中的第一個字節是命令,后4個是參數
CJNE A,#00H,IS_WAIT;00表示設置引腳電平
LCALL UPDATE_PINS
SJMP TX_RETS
IS_WAIT: CJNE A,#0FFH,AA ;FF表示暫停,顯示程序指針
WAIT_GO: POP 00H
POP A
POP TX2
POP TX1
PUSH TX1
PUSH TX2
PUSH A
PUSH 00
ACALL WAIT
POP 00
POP A
RET
AA: CJNE A,#01H,BB ;根據RX0調用相應的子程序,RX1-RX4是傳遞
LCALL PROCESS_1 ;給子程序的參數
SJMP TX_RETS
BB: MOV A,RX0
CJNE A,#02H,CC
LCALL PROCESS_2
SJMP TX_RETS
CC: MOV A,RX0
CJNE A,#03H,DD
LCALL PROCESS_3
SJMP TX_RETS
DD: MOV A,RX0
CJNE A,#04H,EE
LCALL PROCESS_4
SJMP TX_RETS
EE: MOV A,RX0
CJNE A,#05H,FF
LCALL PROCESS_5
SJMP TX_RETS
FF: MOV A,RX0
CJNE A,#06H,TX_RETS
LCALL PROCESS_6
TX_RETS: LCALL TX_PC ;將處理結果送電腦顯示出來
SETB ES
SJMP COM_INT_RETI
COM_INT_RETI:
POP 00H
POP A
RET
WAIT: PUSH A ;進入等待循環,直到受到RX0=0FEH才返回
RX_GO: MOV TX0,#0FFH
ACALL TX_PC
ACALL RX_PC
MOV A,RX0
CJNE A,#0FEH,RX_GO
MOV TX0,#0FEH
ACALL TX_PC
POP A
RET
BREAK: POP TX2 ;獲得PC指針
POP TX1
PUSH TX1
PUSH TX2
ACALL WAIT
RET
UPDATE_PINS:MOV P0,RX1 ;設置引腳電平
MOV P1,RX2
MOV P2,RX3
ORL RX4,#00000011B;不能改變串口通訊的引腳
MOV P3,RX4
MOV TX1,P0
MOV TX2,P1
MOV TX3,P2
MOV TX4,P3
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -