📄 05hz.asm
字号:
;变频输出!按p3.2连续输出50hz,1KHZ,1KHZ窄脉冲, 停止。输出口P3.3。
;***************************************************************************
;* sxj1974@163.com (51c51 test web) www.8951.com *
;* Create by :石学军 www.51c51.com 更多例程请登陆网站 *
;***************************************************************************
;p3.2 control p1.3 (led)
;p3.4 control p3.3(buzzer)
org 0000h
ajmp main0
org 000bh
ajmp timer0
org 001bh
ajmp timer1
org 0030h
MAIN0:
CLR 21H ;清标志位
mov 30h,#01h
mov tmod,#12h ;设定定时器工作方式
mov ie,#8ah ;开中断
mov th0,#(256-50) ;设定时初值
mov tl0,#(256-50)
mov th1,#high(65536-50000)
mov tl1,#low(65536-50000)
mov r0,#00h
main:
mov c,p3.2 ;检测按键
jc testp34
MOV R6,#200 ;设定0.5秒延时
MOV R7,#200
ajmp tt0
testp34:
mov c,p3.4 ;检测按键
jc main
ajmp insert
TT0:
JNB 21H,TT2 ;判断灯的状态
tt:
mov c,p3.2
jnc tt1
JNB 20H,MAIN ;检测0.5秒时间到否
CLR 20H
AJMP TT3
TT2:
mov c,p3.2 ;检测按键
jnc tt2
TT3:
CPL 21H ;取反灯的状态
cpl p1.3
ajmp main
TT1: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
insert:
lcall delay10ms
mov c,p3.4 ;检测按键
jc main
ins1:
mov c,p3.4
jnc ins1 ;等待键释放
mov a,30h ;状态切换
rl a
mov 30h,a
jb acc.0,l1
jb acc.1,l2
jb acc.2,l3
jb acc.3,l4
jb acc.4,l1
jb acc.5,l2
jb acc.6,l3
jb acc.7,l4
ajmp main
l1: mov r5,#2 ;10%占空比,脉冲频率1KHZ
setb tr0
clr tr1
ajmp l5
l2: mov r5,#5 ;25%占空比,脉冲频率1KHZ
setb tr0
clr tr1
ajmp l5
l3: clr tr0
clr tr1
setb p3.3 ;全为高电平
ajmp l5
l4: clr tr0
setb tr1
ajmp l5
l5: ajmp main
timer0: ;定时器0中断服务程序,产生50US定时
push acc
push psw
mov th0,#(256-50)
mov tl0,#(256-50)
inc r0
mov a,r0
mov 31h,r5
cjne a,31h,compend
cpl p3.3
ajmp exit
compend:
cjne a,#20,exit
mov r0,#00h
cpl p3.3
exit:
pop psw
pop acc
reti
timer1: ;定时器1中断服务程序,产生50mS定时
push acc
push psw
mov th1,#high(65536-50000)
mov tl1,#low(65536-50000)
cpl p3.3
pop psw
pop acc
reti
delay10ms:
mov 40h,#50
ttp:
mov 41h,#100
djnz 41h,$
djnz 40h,ttp
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -