📄 kqtt.asm
字号:
;2;程序清单:(12MHz)
ORG 0000H
AJMP START
ORG 0003H
AJMP PINT1
ORG 000BH
AJMP T0Int
ORG 0200H
PwmData0H DATA 20H
PwmData0L DATA 21H
PwmData1H DATA 22H
PwmData1L DATA 23H
;PwmData0 ;T0定时t1所需的定时初值(字)
;PwmData1 ;T0定时t2所需的定时初值(字)
;PwmF ;PWM输出标志
START: MOV SP ,#70H
SETB IT0;开中断
SETB EA
SETB EX0
MOV PCON, #00H
MOV SCON, #52H
MOV TMOD, #20H
MOV TH1,#0E8H
MOV TL1,#0E8H
SETB TR1
MOV DPTR,#1B31H ;初始化
MOV A,#0D1H
MOVX @DPTR,A
LP1: MOVX A,@DPTR
JB Acc.7,LP1
MOV A,#00H
MOVX @DPTR,A
MOV A,#32H ;18分频
MOVX @DPTR,A
WAIT: JMP WAIT ;等待中断
KEY:
MOV A,#01H
MOV PwmData0H, #3CH
MOV PwmData0L, #0B0H
MOV PwmData1H, #3CH
MOV PwmData1L, #0B0H
NEXT: MOV P1,A
MOV TMOD,#01H
MOV R0,00H
Mov TH0, PwmData1H ;High(PwmData1)
Mov TL0, PwmData1L ;Low(PwmData1)
SETB ET0
SETB EA
SETB TR0 ;启动T0
SJMP $
T0Int: ;T0中断服务程序
DJNZ R0,PwmOutH ;PWM输出未完成返回
Mov TH0, PwmData0H ;High(PwmData0)
Mov TL0, PwmData0L ;Low(PwmData0)
SETB TR0
MOV R0,01H ;PwmF
Clr p1.0 ;PWM输出脚
Reti
PwmOutH:
Setb p1.0
Clr tr0
Mov TH0, PwmData1H ;High(PwmData1)
Mov TL0, PwmData1L ;Low(PwmData1)
SETB TR0
MOV R0,00H ;PwmF
reti ;说明在主程序中计算PwmData0、PwmData1
PINT1: PUSH PSW
PUSH DPH
PUSH DPL
PUSH Acc ;现场保护
MOV DPTR,#1B31H
MOV A,#40H ;读键值
MOVX @DPTR,A
MOV DPTR,#1B30H
MOVX A,@DPTR
MOV R7,A
CALL cxz
POP Acc
POP DPL
POP DPH
POP PSW ;恢复现场
RETI
;以下为对FIFO存储器中数据的处理
cxz: MOV A,R7
ANL A,#07H
MOV R5,A ;将列信号送入R5
MOV R4,A
MOV A,R7
RR A
RR A
RR A ;A循环右移三位
ANL A,#07H
MOV R6,A ;将列信号送入R1
MOV R3,A
;将R1,R0的值输出
DIR: MOV A,R5
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R5,A ;
MOV A,R6
MOV DPTR,#TAB ;
MOVC A,@A+DPTR
MOV R6,A
; ADD A,DPTR ;
MOV DPTR, #1B31H ;
MOV A, #90H ;
MOVX @DPTR,A ;
MOV DPTR,#1B30H ;
MOV A,R5 ;
MOVX @DPTR,A ;将R0输出
MOV A,R6 ;
MOVX @DPTR,A ;将R0输出
MOV A,R7
ANL A,#3FH
CJNE A,#09H,LLL
JMP KEY
LLL: Clr p1.0
LJMP WAIT
RET ;
TAB: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H,73H,3EH
DB 31H,6EH,1CH,23H,40H,03H
DB 18H,38H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -