📄 pwm产生程序.asm
字号:
;//标题:PWM产生程序 //
;//-------------------------------------------------------------------------------------------------------------//
;12MHZ晶振,使PWM输出为1KHZ,定时中断数设为N=10即每0。01ms中断一次,则TH1=FFH,TL1=F6H,由于设定中断时间为0.01us
; 这样可以设定占空比从1--100变化,即0.01us*100=1ms 1khz
;资源:定时器T1,P1.1输出,P1.2占空比加,P1.3 占空比减
;//---------------------------------------------------------------------------------------------------------------//
zkb equ 21h
intclick equ 22h
deckey equ p1.3
inckey equ P1.2
pwmout equ p1.1
BEEP EQU P3.7
org 0000h
sjmp start
org 001bh
sjmp PWMINT1
org 0030h
start:mov sp,#30h
mov tmod,#01h
mov th1,#0ffh
MOV TL1,#0F6H
MOV ZKB,#50H
SETB TR1
SETB EA
SETB ET1
CLR INTCLICK
MOV A,ZKB
LOOP:JB INCKEY,LOOP1
INC ZKB
MOV A,ZKB
MOV R1,A
MOV A,#64H
SUBB A,R1
JC BEEP_BL
SJMP LOOP
LOOP1:JB DECKEY ,LOOP2
CALL DELAY
JB DECKEY,LOOP2
MOV R1,#00H
DEC ZKB
MOV R1,ZKB
MOV A,#02H
SUBB A,R1
JC BEEP_BL
SJMP LOOP
LOOP2:SJMP LOOP
PWMINT1:CLR TR1
INC INTCLICK
MOV R1 ,#00H
MOV R1,INTCLICK
MOV A,#64H
SUBB A,R1
JC CLEAR
MOV A,ZKB
SUBB A,R1
JC PWMOUT1
CLR PWMOUT
MOV TH1,#0FFH
MOV TL1,#0F6H
SETB TR1
RETI
CLEAR:mov INTCLICK ,#00h
retI
PWMOUT1:SETB PWMOUT
retI
;------------------------------
;10ms延时子程序
;------------------------------
DELAY:
MOV R6,#50
DELAY1:
MOV R1,#100
DJNZ R1,$
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 R1,#180
BL3: NOP
DJNZ R1,BL3
RET
DELAY2: ;延时R5×10MS
MOV R6,#50
BL4: MOV R1,#100
BL5: DJNZ R1,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
;---------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -