📄 键盘程序a.asm
字号:
;=============================================================
;
; 用定时器0 计数P1.0 宽度 2002/08/10
; 在两次捕捉期间进行A/D转换,
; 用UART 发送16字节;收16字节,方式2
; 波特=12000000/12/32=31.25K(PCON.7=0)
;=============================================================
;
;20H: EQU 00H
;21H: EQU 20H
;22H: EQU 1CH
;DATB1: EQU 77H
;DATB2: EQU 78H
org 0000h
ajmp START
ORG 0013H
AJMP KEY_INT
ORG 0023H
AJMP RS_INT
; org 0033h
; aJMP ct0int
ORG 0053H
AJMP ADINT
ORG 0080H
MOV 28H,#0FFH
START:
SETB EA
SETB EX1
CALL CLR_P4
CALL DS_1S
CALL P4_P
CALL DS_1S
AJMP START
START1: MOV 70H,#00 ;
MOV 71H,#0aah ;
MOV TMOD,#21H
MOV PWMP,#255
MOV TL1,#255
MOV TH1,#255
SETB TR1
MOV S0CON,#01010000B
MOV PCON,#80H
MOV SP,#60H
SETB EA ;开总体中断
CLR PSW.1 ;清标志
SETB EX1
wait:
jnb p3.2,wait
ACALL WORD_3_6
SETB TR0
CLR 126
WAIT1:
jb p3.2,$
CLR TR0
;ACALL WORD3_6
MOV 30H,TH0
MOV 31H,TL0
;acall div2
ACALL PLAY
ACALL DIV_3_2
acall H_D
mov 76h,2eh
mov 77h,52h
ACALL AD_X8 ;调八位A/D转换子程序
ACALL RS_SEND
MOV TH0,#0
MOV TL0,#0
MOV PWM0,7EH
MOV PWM1,7FH
SUBB_R7:
;mov R6,#0FFH
;DJNZ R6,$
;DJNZ R7,SUBB_R7
;jb p3.2,$
ajmp WAIT ;等待CT0I触发
AD_X8: ;A/D转换子程序
JB 126,NEXT1
mov R1,#78H ;设地址指针
MOV A,R1 ;
ANL A,#0FH ;关高8位
MOV ADCON,A ;启动A/D
ORL IEN0,#0C0H ;开总体中断和A/D中断
WAITAD: CJNE R1,#80H,WAITAD ;8通道转换完毕?等待
ANL ADCON,#0EFH ;清ADCI标志
SETB 126
CLR 125
NEXT1: RET ;子程序返回
ADINT: ;A/D中断子程序
MOV @R1,ADCH ;转换值进RAM
ANL ADCON,#0EFH ;清ADCI标志
INC R1 ;地址指针加一
mov A,R1 ;
ANL A,#0FH ;
MOV ADCON,A ;转换通道
ORL IEN0,#0C0H ;开中断
RETI ;中断返回
RS_SEND:
;JB 127,NEXT8
MOV R0,#70H
MOV R7,#16
LOOP_t:
MOV A,@R0
ACALL SP_OUT
INC R0
DJNZ R7,LOOP_t
;SETB 127
clr 124
;setb es
NEXT8: RET
SP_OUT:
MOV S0BUF,A
JNB TI,$
CLR TI
RETI
RS_IN:
JB 124,FF_END
MOV R7,#16
MOV R0,#30H
NEXT_: ACALL SP_IN
DJNZ R7,NEXT_
MOV R7,#16
MOV R0,#30H
FF_END: setb 124
CLR 127
RET
SP_IN:
JNB RI,$
CLR RI
MOV A,S0BUF
MOV @R0,A
INC R0
RETI
RS_INt:
PUSH A
PUSH PSW
PUSH DPL
PUSH DPH
mov r0,#30h
inti_:
JNB RI,$
CLR RI
MOV A,S0BUF
MOV @R0,A
INC R0
cjne r0,#40h,INTI_
clr es
POP DPH
POP DPL
POP PSW
POP A
end_: RETI
;==================================================
; 三字节除二字节
;==================================================
DIV_3_2:
MOV 20H,#00H
MOV 21H,#80H
MOV 22H,#70H
MOV R4,31H
MOV R5,30H
MOV R7,#18H
MOV 23H,#00H
MOV 24H,#00H
ACALL CHU7
MOV 72H,28H
MOV 73H,27H
MOV 74H,26H
;ACALL WORD3_6
RET
CHU7:
CLR C
MOV A,20H
RLC A
MOV 20H,A
MOV A,21H
RLC A
MOV 21H,A
MOV A,22H
RLC A
MOV 22H,A
MOV A,23H
RLC A
MOV 23H,A
MOV A,24H
RLC A
MOV 24H,A
MOV A,26H
RLC A
MOV 26H,A
MOV A,27H
RLC A
MOV 27H,A
MOV A,28H
RLC A
MOV 28H,A
CLR C
MOV A,23H
SUBB A,R4
MOV R1,A
MOV A,24H
SUBB A,R5
MOV R2,A
JC LOOP_1
INC 26H
MOV A,R1
MOV 23H,A
MOV A,R2
MOV 24H,A
LOOP_1:
DJNZ R7,CHU7
RET
;
;======================================================
; (53H52H51H50H)/(3BH3CH)=(51H50H)
; (R3R2)=余数部分 ADD1=BIT 54H
;======================================================
;
DIV2:
MOV 50H,#00H
MOV 51H,#20H
MOV 52H,#1CH
MOV 53H,#00H
DVT2:
MOV R6,#00H
MOV R5,#00H
MOV R4,#00H
MOV R3,30H
MOV R2,31H
DVT20: MOV R7,#20H
CLR 54H
ACALL RLN
DVL1: CLR C
MOV A,R4
SUBB A,R2
MOV R4,A
MOV A,R5
SUBB A,R3
MOV R5,A
MOV A,R6
SUBB A,#00H
MOV R6,A
JC DVL2
SETB 54H
DVL3: ACALL RLN
DJNZ R7,DVL1
RET
DVL2: MOV A,R4
ADD A,R2
MOV R4,A
MOV A,R5
ADDC A,R3
MOV R5,A
MOV A,R6
ADDC A,#00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -