?? pwm-led.asm
字號:
;/******************************************************************
;/* */
;/* ME300B單片機開發系統演示程序 - PWM控制LED燈漸亮漸滅程序 */
;/* */
;/* LED顯示 */
;/* */
;/* 郵箱: gguoqing@willar.com */
;/* 網站: http://www.willar.com */
;/* 作者: gguoqing */
;/* 時間: 2005/11/25 */
;/* */
;/*【版權】Copyright(C)偉納電子 www.willar.com All Rights Reserved */
;/*【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息! */
;/* */
;/******************************************************************/
;----------------------------
; PWM 控制 LED 燈漸亮漸滅程序
; 適用 ME300B 開發系統
; 晶振為11.0592M
; 利用定時器控制產生占空比可變的 PWM 波
; 按K1,PWM值增加,則占空比減小,LED 燈漸暗。
; 按K2,PWM值減小,則占空比增加,LED 燈漸亮。
;當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警。
;----------------------------
PWM EQU 7FH ;PWM賦初始值
OUT EQU P0 ;8個LED燈的接口
INCKEY EQU P1.4 ;K1,PWM值增加鍵。
DECKEY EQU P1.5 ;K2,PWM值減小鍵。
BEEP EQU P3.7
;----------------------------
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 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
DJNZ R7,$
DJNZ R6,DELAY1
RET
;-----------------------------------------------
;蜂鳴器響一聲子程序
;-----------------------------------------------
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL BEEP
DJNZ R6,BL1
MOV R5,#25
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延時R5×10MS
MOV R6,#50
BL4: MOV R7,#100
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
;---------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -