附上我编写的小程序,漏洞百出,请您不要见笑。
org 0000h
ajmp start
org 0030h
start:
mov p3,#0ffh ;p3口全置1
mov p1,#0ffh ;p1口全置1,
mov a, #00h
main:
jb p1.1,main ;对讲机无信号,13脚平时为1,有信号变0,程序向下执行。13脚1程序跳转至开始
lcall delay10ms ;调用10毫秒延时去抖
clr p3.3 ;7脚低电平,继电器1吸合,开始录音
lcall time1 ;调用time1
lcall del ;调用一个延时
jnb p1.1,$ ;13脚0,程序原地踏步 ,对讲机接收完毕13脚变1,程序向下执行
mov a,31h ;31h中的数送累加器
clr tr1 ;关闭定时器1
setb p3.3 ;7脚高电平,继电器1断开,停止录音
lcall del ;调用1个延时
clr p3.5 ;9脚低电平,继电器2吸合,开始放音和发射
lcall time2 ;调用time2
lcall del ;调用1个延时
guaji:
setb p3.5 ;放音完毕,9脚高电平,继电器3断开,停止发射
clr tr1 ;关闭定时器1
lcall del
ajmp main
;-------------------------------------------------------------------------------------
time1:
MOV 30h,#20 ;软件计数器置20
mov 31h,#00h
mov tmod, #10h ;定时器T1置工作于方式1
mov th1, #3ch ;装入预置数高位3ch (65536-50000=15536=#3c b0h)
mov tl1, #0b0h ;装入预置数低位b0h(预置设定50毫秒)
CLR TF1 ;先把溢出标志位清零
clr ea ;禁止中断
setb tr1 ;打开定时器1
loop:
jbc tf1,loop1 ;查询T1的溢出标志TF1。TF1=0,50毫秒定时未到,向下执行。TF1=1,定时到,转Loop1.
ajmp loop ;转LOOP处继续查询
loop1:
mov th1,#3ch ;重新装入初始值3CH
mov tl1,#0b0h ;重新装入 0B0H
djnz 30h,loop ;判断是否到1秒。未到1秒,转到LOOP继续循环。到1秒,向下执行
mov 30h,#20
inc 31h ;31h加1
;
ret
;--------------------------------------------------------------------------------------
;----------------------------------------------------------------------------
time2:
MOV 30h,#20 ;软件计数器置20
mov 32h,#00h
mov tmod, #10h ;定时器T1置工作于方式1
mov th1, #3ch ;装入预置数高位3ch (65536-50000=15536=#3c b0h)
mov tl1, #0b0h ;装入预置数低位b0h(预置设定50毫秒)
CLR TF1 ;先把溢出标志位清零
clr ea ;禁止中断
setb tr1 ;打开定时器1
loopa:
jbc tf1,loop1 ;查询T1的溢出标志TF1。TF1=0,50毫秒定时未到,向下执行。TF1=1,定时到,转Loopb.
ajmp loopa ;转LOOPa处继续查询
loopb:
mov th1,#3ch ;重新装入初始值3CH
mov tl1,#0b0h ;重新装入 0B0H
djnz 30h,loop ;判断是否到1秒。未到1秒,转到LOOP继续循环。到1秒,向下执行
mov 30h,#20
inc 32h ;32h加1
cjne a,32h,guaji ;
ret
;-----------------------------------------------------------------------------------
delay10ms: ;10毫秒延时去抖子程序
mov r7, #20
y1:mov r6, #250
y2:djnz r6,y2
djnz r7,y1
ret
del: mov r5, #5 ;延时
del1: mov r6, #0ffh
del2: mov r7, #0ffh
del3: djnz r7, del3
djnz r6, del2
djnz r5, del1
ret
end
;----------------------------------------------------
|