《利用定时器控制产生占空比可变的 PWM 波.docx》由会员分享,可在线阅读,更多相关《利用定时器控制产生占空比可变的 PWM 波.docx(4页珍藏版)》请在三一办公上搜索。
1、利用定时器控制产生占空比可变的 PWM 波利用定时器控制产生占空比可变的 PWM 波 * ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 * ; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 * ;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 * ;资源:p0口,8路指示灯。p1.0,p1.4亮度控制按键p3.3小喇叭报警 * ;* ; PWM EQU 7FH ;PWM赋初始值PWM 定义为,7FH OUT EQU P0 ;1个LED灯的接口OUT 定义为,P0.1 INCKEY EQU P1.0 ;K1,PWM值增加键。INCKEY 定义为,P1.4 DECKEY
2、EQU P1.4 ;K2,PWM值减小键。DECKEY 定义为,P1.5 BEEP EQU P3.3 ;BEEP 定义为,接口3第3位 ; ORG 0000H SJMP START ORG 000BH SJMP INTT0 ORG 001BH SJMP INTT1 ORG 0030H ; ;主程序 ;定时器0工作在模式1,定时器1工作在模式2。 ; START: MOV SP,#30H MOV TMOD,#21H MOV TH1,PWM ;脉宽调节 MOV TL1,#00H MOV TH0,#0FCH ;1ms延时常数 MOV TL0,#066H ;频率调节 SETB EA SETB ET0
3、SETB ET1 SETB TR0 LOOP: MOV A,PWM ; JB INCKEY,LOOP1 ;增加键是否按下? CALL DELAY ;延时去抖动 JB INCKEY,LOOP1 CJNE A,#0FFH,PWMINC ;是否到最大值? CALL BEEP_BL ;是,蜂鸣器报警。 SJMP LOOP PWMINC: INC PWM ;调节脉宽 SJMP LOOP LOOP1: JB DECKEY,LOOP2 ;减小键是否按下? CALL DELAY ;延时去抖动 JB DECKEY,LOOP2 CJNE A,#02H,PWMDEC ;是否到最小值? CALL BEEP_BL ;是
4、,蜂鸣器报警。 SJMP LOOP PWMDEC: DEC PWM ;调节脉宽 LOOP2: SJMP LOOP ; ;T0中断服务子程序 ;控制定时器1中断 ; INTT0: CLR TR1 MOV TH0,#0FCH ;1ms延时常数 MOV TL0,#066H ;频率调节 MOV TH1,PWM SETB TR1 MOV OUT,#00H ;启动输出 RETI ; ;T1中断服务子程序 ;控制PWM脉冲宽度 ; INTT1: CLR TR1 ;脉宽调节结束 MOV OUT,#0FFH ;结束输出 RETI ; ;10ms延时子程序 ; DELAY: MOV R6,#50 DELAY1: MOV R7,#100 DJNZ R7,$ DJNZ R6,DELAY1 RET