新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 蜂鳴器控制高級程序

        蜂鳴器控制高級程序

        作者: 時間:2016-11-18 來源:網絡 收藏
        ;目的:掌握蜂鳴器的控制程序

        ;程序名字:蜂鳴器
        ;這是一個非常好的一個控制蜂鳴器的程序,用到了定時器中斷方式來定時,且弄能夠用程序狀態字中的CY標志位來進行運算,
        ;并且用到了CJNE中的比的不夠CY為1,比大的話,為0來進行運算,使程序更加豐富

        本文引用地址:http://www.104case.com/article/201611/315809.htm

        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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 罗江县| 博兴县| 防城港市| 龙江县| 土默特左旗| 祁东县| 龙海市| 武隆县| 勐海县| 曲麻莱县| 沈阳市| 河津市| 蒙城县| 灌云县| 沙河市| 本溪| 大厂| 甘泉县| 潜江市| 靖宇县| 连山| 修武县| 娄烦县| 壤塘县| 阿拉善左旗| 页游| 石城县| 津南区| 广昌县| 伽师县| 大石桥市| 永德县| 赤城县| 永泰县| 淳安县| 翁源县| 云浮市| 周至县| 石阡县| 会东县| 新邵县|