PWM 기술로 조명의 무극도 조절(코드+상세 주석)
8167 단어 평상시 수업
DIRLOP EQU 38H //
DISP0 EQU 39H // 0
DISP1 EQU 3AH // 1
DISP2 EQU 3BH // 2
LDAN EQU 58H //
T2H EQU 59H //T1 8
T2D EQU 5AH //T1 8
LAMP EQU P1.2 //
ORG 0000H
;
; ORG
; 00000H
; START 00H START
AJMP START
ORG 000BH
; 000BH T0
LJMP TIME1 //T0 ( PWM )
ORG 001BH
; 001BH T1
LJMP TIME2 //T1 ( )
ORG 0030H
; ORG 30H , 30H , 30H 。
START:SETB LAMP //
MOV A,#0
MOV LDAN,A
MOV DISP0,A
MOV DISP1,A
MOV DISP2,A
; 、 0、1、2 0
MOV TMOD,#11H // 16
; 11H --> 0001 0001 TMOD, ,
; GATE 0, “ ” 1,“ ” K TRx ( K=TRx), INTx , TRx 。
; C/T 0,
; M1 M0 --> 0 1 , 1,16 /
MOV IE,#10001010B //
; 51 IE
; 1, , 0, ;
; D7: ,1, ; 1
; D6: ; 0
; D5: / 2(52 ) 0
; D4: ,0, 0
; D3: / 1,1, 1
; D2: 1,0, 0
; D1: / 0,1, 1
; D0: 0,0, 0
MOV TH0,#0FCH // PWM (500Hz)
MOV TL0,#18H
; 0FC18H --> 1111 1100 0001 1000 = 64536 1/500*2 = 0.001s = 1ms = 1000us
; 1 1us
; X = 65536 - 1000 = 64536
SETB TR0 // T0
; TR0
; :MAIN
MAIN: ACALL KEY //
ACALL TRANS //
ACALL DISP //
ACALL DLYK // 20ms
NOP
NOP
; NOP:
SJMP MAIN
;
; 1:KEY, , , LADN PWM 。
KEY: MOV P2,#0FFH // P2 “1”,
; 0FFH = 1111 1111; 。
NOP
NOP
; JNB , , , 0, 。
KEY1: JNB P2.0,K1 //
; K1, K1 ,
JNB P2.1,K2
; K2, K2 ,
JNB P2.2,K3
; K3, K3 , 、
BACK: ACALL DONE // PWM
; K1、K2、K3 , , PWM
RET
; RET: , “call ” 。 BACK 。 。
K1: ACALL DLYK //
; 20ms, , 。
JB P2.0,BACK
; JB: , 。 BACK PWM 。
J1: JNB P2.0,J1 // 1
; K1 , 。
INC LDAN
; LDAN
MOV A,LDAN
; LDAN A
CJNE A,#0,BACK // 255
; 255 == FFH , 256 = 100H ,A , 0
; CJNE Compare Jump Not Equal 。
; A 256 , BACK , PWM 。
DEC LDAN
; A 256 , 255。
SJMP BACK
; 255 BACK, PWM 。
K2: ACALL DLYK
;
JB P2.1,BACK
; JB: , 。 BACK PWM 。
J2: JNB P2.1,J2 // 1
; K2 , 。
MOV A,LDAN
; LDAN A
CJNE A,#0,J22
; A 0 J22
SJMP BACK
; A 0 , BACK, 0 。
J22: DEC LDAN
; LDAN
SJMP BACK
; BACK, PWM 。
K3: ACALL DLYK
;
JB P2.2,BACK
; JB: , 。 BACK PWM 。
J3: JNB P2.2,J3 //
; K3 , 。
CPL TR0
; TR0 , , 。
NOP
NOP
;
SETB LAMP
; 1. 。
SJMP BACK
; SJMP: 。 PWM 。
; 4:DLYK:
DLYK: MOV R4,#4AH //20ms
DLYK1:MOV R5,#62H
DLYK2:DJNZ R5,DLYK2
; DJNZ RN,REL , Rn “1”, “0”,
; “0” REL ,
; , “0” , 。
DJNZ R4,DLYK1
RET
; 4AH = 72 , 62H = 98
; :1+(1*72)+(2*98*72)+(2*72)+ 2 =(2*72+3)*98+3 = 14409us 20ms
; 5:DONE , PWM 。
DONE:MOV A,LDAN // PWM
; LDAN A
CJNE A,#0,DJ0
; A 0, 0 DJ0
RET
; A 0, ,
DJ0: MOV B,#2H //
; B 2H = 2 = 0010
MUL AB
; A B 。 A B 8 , 16 8 A , 8 B 。
CPL A
; CPL A : A , 。
MOV R1,A
; A R1
MOV A, B
; B A
CPL A
; CPL A : A , 。
MOV R2, A
; A R2
MOV T2H, R2
; R2 T1 8
MOV T2D, R1
; R1 T1 8
RET
;
; A 10H = 16 = 0001 0000
; MUL AB --> 20H = 0010 0000 A = 0001 0000 ,B = 0000 0000
; T2D = R1 --> 1101 1111 T2H = R2 --> 1111 1111
; 0:
TIME1: MOV TH0,#0FCH // 0
MOV TL0,#18H
; FC18H = 64536 , 。
PUSH ACC
PUSH PSW
;
MOV A,LDAN
; LDAN A
CLR P1.2 //
; CLR: 0,
CJNE A,#0,TM1 //0
; A 0, 0 TM1,
SETB P1.2
; 1, 。
SJMP TBACK
;
TM1: CJNE A,#0,TM2 //255
; A 0, 0 TM2, 0
CLR TR1 // 1
; TR1 1, 1
SJMP TBACK
;
TM2: MOV TH1,T2H // T2
; T2H TH1, 1 4
MOV TL1,T2D
; T2D TL1, 1 4
; LDAN 10H,T2D --> 1111 T2H --> 1101, TH1 TL1, PWM , 。
SETB TR1 // 1
; 1
TBACK: POP PSW
POP ACC
RETI
;
TIME2: SETB P1.2 //
CLR TR1 // 1
RETI
; 2:TRANS: , LDAN = 10H = 0001 0000
TRANS: MOV A, LDAN // LDAN
; LDAN A ,A = LDAN = 10H = 0001 0000
MOV B, #64H
; B = 64H = 100 = 0110 0100
DIV AB
; DIV (unsigned divide)
; A
; B
; B = 10H , A = 00H
MOV DISP2,A
; DISP2 = 00H
MOV A, #0AH
; A = 0AH = 10 = 0000 1010
XCH A,B
; XCH A,B ; A B
; A = 10H , B = 0AH
DIV AB
; B = 06H, A = 01H
MOV DISP1,A
; DISP1 = 01H
MOV DISP0,B
; DISP0 = 06H
MOV 3CH, #0
; 3CH 0
RET
;
; TRANS:
; MOV 3CH,LDAN //
; MOV A,DISP2
; ,DISP2 = 0, A = 0
; ANL A,#0F0H
; , A , A。
; 0F0H = 240 = 1111 0000
; A = 0000 1111
; SWAP A
; SWAP 。
; SWAP A , A 、 4 ,
; 4 4 , 4 4 。
; A = 1111 0000
; MOV 3EH,A
; MOV A,DISP2
; ANL A,#0FH
; MOV 3FH,A
; RET
;
; 3:DISP:
DISP: MOV DIRLOP,#4 // (4 )
; DTRLOP = 4
MOV R0,#3CH //3CH 39H
; R0 = 3CH
DL0: MOV A,@R0
; LADN = 10H
; A = DISP2 = 06H
MOV DPTR,#TAB
; DPTR = TAB ,
MOVC A,@A+DPTR //
; TAB A
MOV SBUF,A //
DL1: JNB TI,DL1
;
CLR TI
; ,
DEC R0
; R0 = 3BH
DJNZ DIRLOP,DL0
; , DIRLOP “1”,
; “0”, “0” DL0 ,
; , “0” , 。
RET
;
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H //
DB 0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH
DB 7AH,9EH,8EH
END