;变频输出!按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
|