📄 bus-tx.asm
字号:
;五功能遥控车发射程序.
;MCU:2051
;OSC:12M
;DATE:08.05.18
;功能:
;前进(F)
;后退(B),
;左转(L),
;右转(R).
;加速(T).
;作者:徐增钟
;===================================================================================
KEY EQU P3
DATAOUT BIT P1.0 ;数据输出口.
LED BIT P1.1 ;发射指示灯.
KEYBUF EQU 70H ;键号存放单元.
KEYMASK BIT 01H
KEYFLAG BIT 05H
ORG 0000H
AJMP START
ORG 000BH
AJMP INTTCC
ORG 0030H
;===================================================================================
CLEAR_RAM:
MOV R0,#30H ;从30H单元开始.
MOV R3,#127 ;清除127个单元
NEXT: MOV @R0,#00 ;清除
INC R1 ;
DJNZ R3,NEXT ;127个单元清完?;
RET
;==================================================================================
;程序初始化;
BEGIN:
MOV SP,#50H ;
MOV P1,#00H ;
MOV P3,#0FFH ;
MOV TMOD,#01H
MOV TH0,#0B1H
MOV TL0,#0E0H
SETB TR0
SETB EA
SETB ET0
CLR KEYFLAG
SETB KEYMASK
RET
;===================================================================================
START:
CALL CLEAR_RAM ;清除RAM
CALL BEGIN ;程序初始化;
LOOP:
CALL KEYON ;调用KEYSCAN
AJMP LOOP
NOP
NOP
NOP
AJMP START
;===================================================================================
INTTCC:
MOV TH0,#0B1H
MOV TL0,#0E0H
SETB KEYFLAG
RETI
;===================================================================================
KEYON:
MOV A,KEY
CJNE A,#0FFH,KEYSEND
JB KEYMASK,ET
SETB KEYMASK
CLR LED
MOV R5,#2
X2: MOV R3,#4
CALL SEND
DJNZ R5,X2
SETB DATAOUT
CALL DY5MS
MOV P1,#00
ET:
RET
;====================================================================================
KEYSEND:
SETB LED
CLR KEYMASK
CJNE A,#0DFH,K1
MOV R3,#10 ;发送10个脉冲.
AJMP SEND
RET
K1: CJNE A,#0EFH,K2
MOV R3,#40 ;发送40个脉冲.
AJMP SEND
RET
K2: CJNE A,#0F7H,K3
MOV R3,#64 ;发送64个脉冲.
AJMP SEND
RET
K3: CJNE A,#0FBH,K4
MOV R3,#58 ;发送58个脉冲.
AJMP SEND
RET
K4: CJNE A,#0D7H,K5
MOV R3,#34 ;发送34个脉冲.
AJMP SEND
RET
K5: CJNE A,#0DBH,K6
MOV R3,#28 ;发送28个脉冲.
AJMP SEND
RET
K6: CJNE A,#0E7H,K7
MOV R3,#46 ;发送46个脉冲.
AJMP SEND
RET
K7: CJNE A,#0EBH,K8
MOV R3,#52 ;发送52个脉冲.
AJMP SEND
K8: CJNE A,#0FFH,KEXIT
KEXIT:
RET
;===================================================================================
DOUT:
SETB DATAOUT
CALL DYMS5
CLR DATAOUT
CALL DYMS5
DJNZ R3,DOUT
MOV P2,#00
RET
SEND:
MOV R1,#04
N1: SETB DATAOUT
MOV R4,#255
D1: NOP
NOP
NOP
NOP
DJNZ R4,D1
CLR DATAOUT
CALL DYMS5
DJNZ R1,N1
AJMP DOUT
NOP
NOP
AJMP START
;===================================================================================
DYMS5:
MOV R6,#250
D2:
DJNZ R6,D2
RET
;==================================================================================
DY5MS:
MOV R5,#4
D3: MOV R3,#248
DJNZ R3,$
DJNZ R5,D3
RET
;==================================================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -