人狗畜禽COMPANY LIMITED|全是肉的高H文〈男男〉|全篇肉高H秘书被C办公室四爱|全黄H全肉共妻|全黄H全肉短篇禁乱NP慕浅浅|全黄H全肉短篇N男男

技術(shù)熱線: 4007-888-234
設(shè)計開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動態(tài)

PIC16F877單片機(jī)的應(yīng)用

更新時間: 2019-03-21
閱讀量:1495

PIC16F877單片機(jī)片內(nèi)有8路10位A/D轉(zhuǎn)換器,引腳②~⑤為AN0~AN3、⑦~⑩為AN4~AN7。MPLAB-ICD的實驗板上16F877單片機(jī)的RA0口接了一只供有電壓的10kΩ電位器,在D口(RD0~RD7)接了8只LED,如附圖所示。筆者用16F877 A/D轉(zhuǎn)換通道其中一路作A/D轉(zhuǎn)換,以說明A/D轉(zhuǎn)換編寫程序的方法和在線調(diào)試及編程。

          在附圖中,筆者把R6的可變輸出(電壓模擬量)端接到RA0/AN0作為模擬量輸入;用D口(RD0~RD7)的8只LED顯示A/D轉(zhuǎn)換的結(jié)果(按二進(jìn)制顯示)。

          一、 建立A/D轉(zhuǎn)換源程序的要點  編寫10位的一路A/D轉(zhuǎn)換程序看似簡單,但對初學(xué)者卻有一定難度,因為編寫A/D轉(zhuǎn)換程序時,要熟練使用PIC16F877內(nèi)部的多個特殊功能寄存器。附表列出了與A/D轉(zhuǎn)換有關(guān)的部分特殊功能寄存器。在A/D轉(zhuǎn)換器中未用到的寄存器位以空白表示。

    1.A/D引腳控制寄存器ADCON1  ADCON1的bit0~bit3(PCFG0~PCFG3)為A/D轉(zhuǎn)換功能選擇位,若為1110,則表示AN0(RA0)通道是模擬量輸入,其余通道為數(shù)字I/O(其他編碼功能,請參見書籍介紹)。Bit7(ADFM)為A/D結(jié)果格式選擇位,1表示結(jié)果右移,0表示結(jié)果左移。

    2.中斷標(biāo)志寄存器PIR1  PIR1的bit6(ADIF)為A/D中斷標(biāo)志位,該位為1表示模數(shù)轉(zhuǎn)換已完成,為0表示轉(zhuǎn)換未完成。

    3.A/D操作控制寄存器ADCON0  ADCON0的bit0(ADON)為A/D轉(zhuǎn)換允許位,該位為1打開A/D轉(zhuǎn)換器,為0關(guān)閉A/D轉(zhuǎn)換器;bit2(GO/DONE)為A/D轉(zhuǎn)換狀態(tài)位,該位為1啟動A/D轉(zhuǎn)換,為0表示A/D轉(zhuǎn)換已完成(A/D轉(zhuǎn)換完成后該位自動清零);bit3~bit5為A/D通道選擇位,其值對應(yīng)于通道號,000為0通道;bit6~Bit7(ADCS0、ADCS1)為A/D轉(zhuǎn)換時鐘選擇,00=fosc/2,01=fosc/8,10=fosc/32,11=fRC(RC振蕩器)。為正確進(jìn)行A/D轉(zhuǎn)換,A/D轉(zhuǎn)換時鐘值不宜選得太小。

    4.A/D結(jié)果高字節(jié)寄存器ADRESH  存放A/D轉(zhuǎn)換結(jié)果的高字節(jié)。

    編寫A/D轉(zhuǎn)換的源程序,還會用到STATUS、OPTION、INTCON……寄存器。

          二、PIC16F877單片機(jī)A/D轉(zhuǎn)換源程序.ASM實例

    筆者編寫的A/D轉(zhuǎn)換源程序清單如下:

            LIST  P=PIC16F877    ;選單片機(jī)型號

            #INCLUDE  P16F877.INC

            ORG     0                       ;復(fù)位矢量

            GOTU   START

            ORG     D'20"               ;程序起始

START  BCF     STATUS,6

            BSF     STATUS,5         ;選BANK1

            CLRF   TRISD               ;設(shè)D口為輸出

            CLRW                            ;0→W

            MOVLW  B'10000111'  ;TMR0,預(yù)分頻

            MOVWF  OPTION_REG    ;1:256

            CLRW

            MOVLW  B'00000001'

            MOVWF  TRISB              ;設(shè)B0為輸入

            MOVWF  TRISA

            MOVLW  0

            MOVLW  B'00001110'  ;A/D結(jié)果左移

            MOVWF  ADCON1            ;VDD為參考電壓

            BCF      STATUS,5        ;復(fù)位

                                                ;BANK0

            CLRF    PORTD              ;清D口

            MOVLW  B'01000001'  ;打開A/D選時鐘

            MOVWF  ADCON0            ;fosc/8

MAIN    BTFSS  INTCON,T0IF  ;TMR0溢出?

            GOTO    MAIN                ;等待

            BCF      INTCON,T0IF  ;TMR0溢出

BCF      PIR1,ADIF      ;清標(biāo)志位

                                                ;T0IF

            BSF      ADCON0,GO      ;啟動A/D變換

WAIT    BTFSS  PIR1,ADIF      ;變換判標(biāo)志位?

            GOTO    WAIT                ;等待

            MOVF    ADRESH,W        ;A/D轉(zhuǎn)換完成

            MOVWF  PORTD              ;高字節(jié)到D口

            CLRF    PORTD              ;0→D口

WAITPWSH BTFSS    PORTB,0   ;判0位

            GOTO    WAITPUSH        ;等待

            MOVWF  PORTD              ;高字節(jié)送D口

            GOTO    MAIN            

            END                       

    說明:1. 因LED顯示僅用了8位(D口上),所以A/D轉(zhuǎn)換的低二位未顯示。2. 從源程序中可以看出,A/D轉(zhuǎn)換是通過控制PIC16F877內(nèi)部特殊功能寄存器來完成的。

          三、PIC01.ASM的在線調(diào)試和程序固化

          上述源程序可按照上期本版介紹的方法進(jìn)行在線調(diào)試。調(diào)試時可用MPLAB工具欄中的連續(xù)功能鍵操作。若在操作一次后再連續(xù)調(diào)試時,應(yīng)改變附圖中電位器中心抽頭的電壓值,方能觀察A/D變換的結(jié)果。程序調(diào)試好后再把目標(biāo)碼.Hex固化到16F877單片機(jī)中,即可觀察不同的模擬量變換成數(shù)字量的結(jié)果,并可用三用表實測進(jìn)行驗證。

壓縮機(jī)控制電路圖.png


拉萨市| 东丽区| 孙吴县| 伊宁县| 徐水县| 利辛县| 淮滨县| 晴隆县| 陆丰市| 临泽县| 汽车| 隆尧县| 灵寿县| 敦化市| 延吉市| 南投县| 昂仁县| 麟游县| 普宁市| 禹州市| 黔东| 额敏县| 夏津县| 鱼台县| 牙克石市| 博客| 山东省| 武安市| 株洲县| 灵台县| 曲周县| 寿宁县| 沙田区| 邹城市| 马尔康县| 手游| 固始县| 普格县| 垣曲县| 仁化县| 吉木萨尔县|