新聞中心

蜂鳴器控制高級程序

作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
;目的:掌握蜂鳴器的控制程序

;程序名字:蜂鳴器
;這是一個(gè)非常好的一個(gè)控制蜂鳴器的程序,用到了定時(shí)器中斷方式來定時(shí),且弄能夠用程序狀態(tài)字中的CY標(biāo)志位來進(jìn)行運(yùn)算,
;并且用到了CJNE中的比的不夠CY為1,比大的話,為0來進(jìn)行運(yùn)算,使程序更加豐富

本文引用地址:http://m.butianyuan.cn/article/201611/315809.htm

INTR_CNT EQU30H;作為定時(shí)器中斷的計(jì)數(shù)值使用

MS10 EQU9217; 對于11.0592的晶振來說,相當(dāng)于10ms的計(jì)數(shù)
BUZZER EQUP1.0
;
ORG0000H
JMPSTART
ORG0003H
RETI
ORG000BH
JMPT0_ISR;只設(shè)置了定時(shí)器timer0方式一中斷

ORG0013H
RETI
ORG001BH
RETI
ORG0023H
RETI

;
ORG0030H
START:MOVR0,#00H;初始化程序
DJNZR0,$
MOVSP,#60H
MOV P1,#0FFH
MOVINTR_CNT,#00H
CLRBUZZER
ACALLSET_TMR0
LOOP:SJMPLOOP

;
;定時(shí)器中斷處理函數(shù)
T0_ISR: MOVTH0,#HIGH(65536-MS10)
MOVTL0,#LOW(65536-MS10)
PUSHPSW
PUSHACC

MOVA,INTR_CNT
CJNEA,#10,L1
L1:NCL2 ;標(biāo)志位CY為0則轉(zhuǎn)移指令 ,如果上面A的值沒10大的話,cy為1,即不執(zhí)行這條跳轉(zhuǎn)程序
SETBBUZZER ;意思是如果沒到10ms的時(shí)候,蜂鳴器不響
SJMPL3
L2: CLRBUZZER ;到100ms(10*10ms)了,蜂鳴器響,可是響的有時(shí)間限制
L3: MOVA,INTR_CNT
INC A
MOVINTR_CNT,A
CJNEA,#100,T0_END ;從100ms響到100*10ms,也就是1s,從這看出1s中響了0.9s,不響0.1s
MOVINTR_CNT,#00H

T0_END:POPACC
POPPSW
RETI
;啟動定時(shí)器中斷
SET_TMR0:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-MS10)
MOVTL0,#LOW(65536-MS10)
CLRTF0
SETBTR0
SETBET0
SETBEA
RET

END



評論


技術(shù)專區(qū)

關(guān)閉