K1 BIT P1.4 ;加速鍵
K2 BIT P1.5 ;減速鍵
K3 BIT P1.6 ;正反鍵
CLK BIT P0.0 ;速度控制信號
ZF BIT P0.1 ;正反控制信號
PWMH EQU 30H ;調寬值,定時器所賦值
PWML EQU 31H
ORG 0000H
LJMP MAIN
ORG 000BH ;中斷1控制周期
LJMP TIMER1
ORG 001BH ;中斷3控制脈寬
LJMP TIMER2
ORG 0030H
MAIN: MOV PWMH,#00H
MOV PWML,#0FH
MOV TMOD,#11H ;兩個定時器都工作在方式1
MOV TH0,#00H ;65.536mm定時
MOV TL0,#00H
MOV TH1,PWMH ;脈寬
MOV TL1,PWML
SETB EA ;CPU允許中斷
SETB ET0 ;允許定時器T0中斷
SETB ET1 ;允許定時器T1中斷
SETB TR0 ;定時器T0計數
CLR CLK
LOOP: JB K3,LOOPZF ;高電平逆時針轉,低電平順時針轉
CLR ZF ;針轉
LJMP LOOPK1
LOOPZF: SETB ZF
LOOPK1: JB K1,LOOPK2 ;K1按下加速
LCALL DELAY
MOV A,PWML
ADD A,#1 ;調寬值低4位加1
MOV PWML,A
MOV A,PWMH
ADDC A,#0 ;調寬值高4位加1
MOV PWMH,A
JNC LOOPK2 ;最大值時
MOV PWMH,#0FFH
LOOPK2: JB K2,OVER ;K2按下減速
LCALL DELAY
MOV A,PWML
CLR C
SUBB A,#1 ;調寬值低4位減1
MOV PWML,A
MOV A,PWMH
SUBB A,#0 ;調寬值高4位減1
MOV PWMH,A
JNC OVER
MOV PWMH,#00H ;最小值時
OVER: LJMP LOOP
TIMER1: CLR TR1
MOV TH0,#00H
MOV TL0,#00H
MOV TH1,PWMH ;賦調寬值
MOV TL1,PWML
SETB TR1
CLR CLK
RETI
TIMER2: CLR TR1
SETB CLK
RETI
DELAY: MOV R4,#10H
D1: DJNZ R4,D1
RET
END
|