当前位置:文档之家› 利用定时器控制产生占空比可变的 PWM 波

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

利用定时器控制产生占空比可变的 PWM 波
利用定时器控制产生占空比可变的 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 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

相关主题
文本预览
相关文档 最新文档