附上我編寫的小程序,漏洞百出,請您不要見笑。
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
;----------------------------------------------------
|