以上拙作,见笑了。请高手指点迷津。 |
我写的程序的控制思路是: 1,当对讲机收到信号后,2051的7脚变哦0继电器J1吸合,MP3开始录音。并启动定时器1,以1秒为基准,软件计数器31H自加一,录音停止后,31H的数保存。(31H中的数就是录音时间) 2,对讲机停止接收信号后,录音完毕。2051的9脚变0,继电器J2吸合,开始放音和发射,同时,调用time2子程序计数,以1秒为基准计数,计数结果存32H。 把31H和32H中的数对比,相同(表示放音时间到),则程序跳转到guaji(挂机),2051的9脚变1,继电器J2释放,停止放音和发射,重新循环。 |
附上我编写的小程序,漏洞百出,请您不要见笑。 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 ;---------------------------------------------------- |
本人菜鸟,买了一本汇编语言的书。学单片机是算学算看,惭愧。 也反复看了本坛的单片机基础教程里的定时器和中断一课, 我搭建好了控制电路,又写了一个小程序,把车台对讲机和MP3连接在一起,,可以实现以下功能: 1、手持机讲话,车台收到信号,2051的13脚电位变0,7脚变0,继电器J1吸合,开始录音。 2、录音完毕,13脚电位跳变1, 2057的7脚变1,继电器J1释放,停止录音。 3、稍微延时,2051的9脚变0,继电器J2吸合,开始放音和对讲机发射信号。 4、由于写入的定时器的捕捉程序错误,无论录音时间有多少秒钟,只能控制放音几秒钟(对讲机也发射几秒钟)。 这证明电路搭建成功,控制程序可以实现简单控制。 也感觉这个录音时间是个变量,可能要录音3秒5秒,也可能录音100秒200秒。如何在录音完毕后执行自动放音,放音完毕后停止发射,还是一头雾水。 呵呵,惭愧,请坛内高手指教。 |