利用定时器控制产生占空比可变的 PWM 波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用定时器控制产生占空比可变的 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 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
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 ;是,蜂鸣器报警。
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
DJN Z R7,$
DJN Z R6,DELAY1
RET