?? 鍵盤程序1.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 START0
ORG 0013H
AJMP KEY_INT
ORG 0023H
AJMP RS_INT
; org 0033h
; aJMP ct0int
ORG 0053H
AJMP ADINT
start0: MOV 28H,#0FFH
START:
SETB EA
SETB EX1
CALL CLR_P4
CALL DS_1S
CALL P4_P
CALL DS_1S
JNB 28H.7,LIBERTY
JNB 28H.5,TURN
JNB 28H.4,SPEED
jnb 28h.6,start1
AJMP START
LIBERTY:
CALL LIBE_P
TURN:
CALL TURN_P
SPEED:
CALL SPEED_P
AJMP START
LIBE_P:
RET
TURN_P:
RET
SPEED_P:
MOV P4,#6DH
MOV P1,#0F0H
MOV P1,#0F1H
MOV P1,#0F2H
MOV P1,#0F3H
MOV P1,#0F4H
MOV P1,#0F5H
RET
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 ;清標志
;CLR EX1
wait:
jnb p3.2,wait
ACALL WORD_3_6
SETB TR0
CLR 126
WAIT1:
;jb 28h.6,start
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -