您的位置 首页 电源

蜂鸣器操控高档程序

;目的:掌握蜂鸣器的控制程序;程序名字:蜂鸣器;这是一个非常好的一个控制蜂鸣器的程序,用到了定时器中断方式来定时,且弄能够用程序状态…

;意图:把握蜂鸣器的操控程序

;程序姓名:蜂鸣器
;这是一个非常好的一个操控蜂鸣器的程序,用到了守时器中止方法来守时,且弄能够用程序状态字中的CY标志位来进行运算,
;而且用到了CJNE中的比的不行CY为1,比大的话,为0来进行运算,使程序愈加丰厚

INTR_CNT EQU30H;作为守时器中止的计数值运用

MS10 EQU9217; 关于11.0592的晶振来说,相当于10ms的计数
BUZZER EQUP1.0
;
ORG0000H
JMPSTART
ORG0003H
RETI
ORG000BH
JMPT0_ISR;只设置了守时器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

;
;守时器中止处理函数
T0_ISR: MOVTH0,#HIGH(65536-MS10)
MOVTL0,#LOW(65536-MS10)
PUSHPSW
PUSHACC

MOVA,INTR_CNT
CJNEA,#10,L1
L1:NCL2 ;标志位CY为0则搬运指令 ,假如上面A的值没10大的话,cy为1,即不履行这条跳转程序
SETBBUZZER ;意思是假如没到10ms的时分,蜂鸣器不响
SJMPL3
L2: CLRBUZZER ;到100ms(10*10ms)了,蜂鸣器响,但是响的有时间约束
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
;发动守时器中止
SET_TMR0:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-MS10)
MOVTL0,#LOW(65536-MS10)
CLRTF0
SETBTR0
SETBET0
SETBEA
RET

END

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/266708.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部