返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 论坛

;变频输出!按p3.2连续输出50hz,1KHZ,1KHZ窄脉冲, 停止。输出口P3.3。
;********************************************************************************
;*  E-mail:sxj1974@163.com (51c51 test web)  51单片机学习网,自学单片机的网站         *
;* www.51c51.com www.8951.com 51单片机学习网系列自学单片机例程
*   
;********************************************************************************

hex格式文件下载(点右键,目标另存为hex即可直接烧写)


;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