新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)實(shí)現(xiàn)音樂播放

        PIC單片機(jī)實(shí)現(xiàn)音樂播放

        作者: 時(shí)間:2011-02-18 來源:網(wǎng)絡(luò) 收藏

        源程序:



        以下程序要用二個(gè)定時(shí)器資源,凡是有二個(gè)定時(shí)器的PIC均可實(shí)現(xiàn),該范例需要的是MICROCHIPPIC16C62

        INCLUDE"D:PICP16XX.EQU";該文件在MICROCHIP光盤中可找到

        ;**************************************************

        #defineBeepOutRC,4

        ;**************************************************

        W_TEMPEQU0X20;(0XA0)

        STATUS_TEMPEQU0X21

        BeepCntequ30h

        TmrBakequ31h

        BeepModeequ32h

        Sflagequ33h

        ;**************************************************

        CSTIME100MSequ.8;

        ;**************************************************

        ;Sflag

        Fg_100msequ0

        FgBeepequ1

        ;**************************************************

        ORG000H;

        GOTOMAIN;Skipoverinterruptvecter

        ORG04H;InterruptVector

        GOTOINTZ



        ;**************************************************

        OkTab:

        movfBeepCnt,w

        addwfPCL,f

        retlw.255-.130;0xf6;1;

        retlw.255-.126;0xfa;2;

        retlw.255-.119;0xfd;3;

        retlw0

        ;**************************************************

        WhisleTab:

        movfBeepCnt,w

        addwfPCL,f

        retlw.255-.239;523Hz;0;

        retlw.255-.179;698Hz;1;

        retlw.255-.159;784Hz;2;

        retlw.255-.119;1046Hz;3;

        retlw.0

        ;**************************************************

        HangTab:

        movfBeepCnt,w

        addwfPCL,f

        retlw.255-.159;784Hz;0;

        retlw.255-.119;1046Hz;1;

        retlw.255-.150;830Hz;2;

        retlw.255-.112;1109Hz;3;

        retlw.255-.142;880Hz;4;

        retlw.255-.106;1174Hz;5;

        retlw.255-.134;932Hz;6;

        retlw.255-.100;1244Hz;7

        retlw.255-.126;988Hz;8;

        retlw.255-.94;1318Hz;9;

        retlw.255-.119;1046Hz;10;

        retlw.255-.89;1397Hz;11;

        retlw.0



        ;**************************************************

        WelcomTab:

        movfBeepCnt,w

        addwfPCL,f

        retlw.255-.89;1397Hz;11;

        retlw.255-.119;1046Hz;10;

        retlw.255-.94;1318Hz;9;

        retlw.255-.126;988Hz;8;

        retlw.255-.100;1244Hz;7

        retlw.255-.134;932Hz;6;

        retlw.255-.106;1174Hz;5;

        retlw.255-.142;880Hz;4;

        retlw.255-.112;1109Hz;3;

        retlw.255-.150;830Hz;2;

        retlw.255-.119;1046Hz;1;

        retlw.255-.159;784Hz;0;

        retlw.0

        ;**************************************************

        BeepModeJmp:

        addwfPCL,f

        bpsWhisle;0

        bpsOk;1

        bpsHang;2

        bpsWelcom;3

        ;**************************************************

        IO_SET:

        BANK1_

        MOVLWB’11001011’

        MOVWFTRISA

        MOVLWB’00001100’

        movwfTRISB

        MOVLWB’00000011’

        movwfTRISC;SetPort_Ctoalloutputs

        BANK0_

        RETURN

        ;**************************************************

        SYS_SET:

        BANK1_

        MOVLWB’00000111’;1:256TMR0分頻

        MOVWFOPTION_R

        BSFPIE1,TMR2IE;TMR2中斷允許

        BANK0_

        MOVLWB’00000001’;開TMR1

        MOVWFT1CON

        bsfINTCON,TOIE;TMR0中斷允許

        BSFINTCON,PEIE;允許所有未被屏蔽之外圍接口中斷

        RETURN

        ;**************************************************

        MAIN:;Mainrotation

        CALLIO_SET

        MOVLWB’00000000’;關(guān)所有中斷

        MOVWFINTCON

        ;****************************

        CALLSYS_SET

        ;****************************

        callPlayPsWelcom;上電提示音

        MAINLOOP:

        bsfINTCON,GIE;開所有中斷

        CLRWDT;ClearWDT

        callBeepFor

        BMAINLOOP

        ;**************************************************

        INTZ:

        PUSH;Push;中斷服務(wù)程序

        BTFSCPIR1,TMR2IF;測試TMR2中斷標(biāo)志位

        bINT_TMR2;

        BTFSCINTCON,TOIF;測試TMR0中斷標(biāo)志位

        GOTOINT_TMR0

        IntRet:

        POP;Pop

        RETFIE

        ;**************************************************

        INT_TMR2:

        BCFPIR1,TMR2IF;清TMR2中斷標(biāo)志位

        movfTmrBak,w

        movwfTMR2

        CPLBeepOut

        BeeperEnd:

        bIntRet

        ;**************************************************

        INT_TMR0:;定時(shí)0中斷

        BCFINTCON,TOIF;clearINTF

        MOVLW.255-.38;10ms

        MOVWFTMR0

        ;====================

        decfszT100ms,f

        bint_tmr0_ret

        movlwCSTIME100MS

        movwfT100ms

        bsfSflag,Fg_100ms

        ;=====================

        int_tmr0_ret:

        bIntRet

        ;**************************************************

        PlayPsWhisle:

        bsfFg,FgBeep

        clrfBeepCnt

        movlw.0

        movwfBeepMode

        movlwCSTIME100MS

        movwfT100ms

        retlw0

        ;**************************************************

        PlayPsOk:

        bsfFg,FgBeep

        clrfBeepCnt

        movlw.1

        movwfBeepMode

        movlwCSTIME100MS

        movwfT100ms

        retlw0

        ;**************************************************

        PlayPsHang:

        bsfFg,FgBeep

        clrfBeepCnt

        movlw.2

        movwfBeepMode

        movlwCSTIME100MS

        movwfT100ms

        retlw0

        ;**************************************************

        PlayPsWelcom:

        bsfFg,FgBeep

        clrfBeepCnt

        movlw.3

        movwfBeepMode

        movlwCSTIME100MS

        movwfT100ms

        retlw0

        ;**************************************************

        ;音樂播放程序

        ;BeepMode=0:psWhisle

        ;BeepMode=1:psOk

        ;BeepMode=2:psHang

        ;BeepMode=3:psWelcom

        ;**************************************************

        BeepFor:

        btfssSflag,Fg_100ms

        bBeepForEnd

        bcfSflag,Fg_100ms

        btfssSflag,FgBeep

        bBeepForEnd

        MOVLWB’00000101’;開TMR21:4分頻

        MOVWFT2CON

        movfBeepMode,w

        bBeepModeJmp

        psWhisle:

        callWhisleTab

        bBeepPlay

        psOk:

        callOkTab

        bBeepPlay

        psHang:

        callHangTab

        bBeepPlay

        psWelcom:

        callWelcomTab

        bBeepPlay

        BeepPlay:

        incfBeepCnt,f

        movwfTmrBak

        movfTmrBak,f

        btfscstatus,z

        bBeepOff

        movlw.1

        xorwfTmrBak,w

        btfscstatus,z

        bBeepStop

        bBeepForEnd

        BeepOff:

        clrfBeepCnt

        bcfSflag,FgBeep

        bcfBeepOut

        bcfT2CON,TMR2ON

        bBeepForEnd

        BeepStop:

        bcfT2CON,TMR2ON;stop

        bcfBeepOut

        BeepForEnd:

        retlw0

        ;**************************************************

        END



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 房产| 兴文县| 江孜县| 宜黄县| 鄄城县| 河北省| 博兴县| 沧源| 岳池县| 旬邑县| 当涂县| 平昌县| 会泽县| 镇赉县| 嫩江县| 元氏县| 东至县| 乌兰察布市| 龙门县| 威海市| 南充市| 永嘉县| 明水县| 怀来县| 钟山县| 平度市| 达拉特旗| 达孜县| 长寿区| 崇明县| 健康| 德兴市| 深水埗区| 安义县| 镇沅| 赞皇县| 微山县| 东城区| 南平市| 桃江县| 新源县|