📄 tiaoshi.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0023H ;串行中断
LJMP INT
ORG 0030H
MAIN: MOV SP,#70H
CLR P2.0
MOV IE,#90H ;允许串行中断
MOV SCON,#0C0H ;设置串行口方式3
MOV TMOD,#20H
MOV TH1,#0E8H ;设置波特率200B/S
MOV TL1,#0E8H
SETB TR1 ;启动定时器1
SETB REN ;允许串行接收
SETB ES ;启动串行中断
SJMP $
;串行中断子程序
INT: CLR EA ;关中断
PUSH ACC
PUSH PSW
MOV PSW,#08H
MOV A,SBUF ; 接收一个数据
CLR RI
CJNE A,#33H,LP1 ; 是否收到询问信号"1"
LCALL LP2
LCALL PMOVE
SJMP LP3
LP1: CJNE A,#34H,LP3
LCALL LP2
LCALL NMOVE
LP3: JMP OUT
LP2: MOV A,#37H ;发送回答信号"A"
LCALL SIOO ;调发一字节数据子程序
RET
LP12: MOV A,#39H ;发送回答"
LCALL SIOO ;调发一字节数据子程序
RET
PMOVE: MOV A,SBUF
CLR RI
LCALL LP6
CJNE A,#35H,LP4 ;是否收到"3"
MOV A,SBUF
CLR RI
LCALL LP12
MOV R1,A
LCALL PMOVE2
JMP LP5
LP4: CJNE A,#36H,LP5
LCALL LP6
MOV A,SBUF
CLR RI
MOV R1,A
MOV A,SBUF
CLR RI
LCALL LP12
MOV R2,A
LCALL PMOVE1
LP5: JMP OUT
LP6: MOV A,#38H ;发送回答信号"B"
LCALL SIOO ;调发一字节数据子程序
RET
PMOVE1: MOV R0,#00H ;反转子程序
LP71: MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ PMOVE1
CPL A
MOV P1,A
LCALL DELAY1
INC R0
DJNZ R1,LP71
DJNZ R2,PMOVE1
RET
PMOVE2: MOV R0,#00H ;反转子程序
LP72: MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ PMOVE2
CPL A
MOV P1,A
LCALL DELAY1
INC R0
DJNZ R1,LP72
RET
NMOVE: MOV A,SBUF
CLR RI
CJNE A,#35H,LP8 ;是否收到"3"
LCALL LP6
MOV A,SBUF
CLR RI
LCALL LP12
MOV R1,A
LCALL NMOVE2
JMP LP9
LP8: CJNE A,#36H,LP9
LCALL LP6
MOV A,SBUF
CLR RI
MOV R1,A
MOV A,SBUF
CLR RI
MOV R2,A
LCALL LP12
LCALL NMOVE1
LP9: RET
NMOVE1: MOV R0,#05H ;反转子程序
LP11: MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ PMOVE1
CPL A
MOV P1,A
LCALL DELAY1
INC R0
DJNZ R1,LP11
DJNZ R2,NMOVE1
RET
NMOVE2: MOV R0,#05H ;反转子程序
LP10: MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ NMOVE2
CPL A
MOV P1,A
LCALL DELAY1
INC R0
DJNZ R1,LP10
RET
OUT: POP PSW
POP ACC
SETB EA ;开中断
SETB REN ;允许串行接收
SETB ES ;启动串行中断
RETI
SIOO: CLR ES
MOV SBUF,A
JNB TI,$ ;1 帧是否发送完
CLR TI
LCALL DELAY1
SETB ES
RET
DELAY1: MOV R6,#74 ;延时20MS
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 03H,06H,0CH,09H
DB 00
DB 03H,09H,0CH,06H
DB 00
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -