利用定时器控制产生占空比可变的 PWM 波

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档