<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC16F877單片機的應用--A/D轉換器

PIC16F877單片機的應用--A/D轉換器

作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò ) 收藏
PIC16F877片內有8路10位A/D轉換器,引腳②~⑤為AN0~AN3、⑦~⑩為AN4~AN7。MPLAB-ICD的實(shí)驗板上16F877的RA0口接了一只供有電壓的10kΩ電位器,在D口(RD0~RD7)接了8只LED,如附圖所示。筆者用16F877A/D轉換通道其中一路作A/D轉換,以說(shuō)明A/D轉換編寫(xiě)程序的方法和在線(xiàn)調試及編程。
在附圖中,筆者把R6的可變輸出(電壓模擬量)端接到RA0/AN0作為模擬量輸入;用D口(RD0~RD7)的8只LED顯示A/D轉換的結果(按二進(jìn)制顯示)。
一、建立A/D轉換源程序的要點(diǎn)編寫(xiě)10位的一路A/D轉換程序看似簡(jiǎn)單,但對初學(xué)者卻有一定難度,因為編寫(xiě)A/D轉換程序時(shí),要熟練使用PIC16F877內部的多個(gè)特殊功能寄存器。附表列出了與A/D轉換有關(guān)的部分特殊功能寄存器。在A/D轉換器中未用到的寄存器位以空白表示。
1.A/D引腳控制寄存器ADCON1ADCON1的bit0~bit3(PCFG0~PCFG3)為A/D轉換功能選擇位,若為1110,則表示AN0(RA0)通道是模擬量輸入,其余通道為數字I/O(其他編碼功能,請參見(jiàn)書(shū)籍介紹)。Bit7(ADFM)為A/D結果格式選擇位,1表示結果右移,0表示結果左移。
2.中斷標志寄存器PIR1PIR1的bit6(ADIF)為A/D中斷標志位,該位為1表示模數轉換已完成,為0表示轉換未完成。
3.A/D操作控制寄存器ADCON0ADCON0的bit0(ADON)為A/D轉換允許位,該位為1打開(kāi)A/D轉換器,為0關(guān)閉A/D轉換器;bit2(GO/DONE)為A/D轉換狀態(tài)位,該位為1啟動(dòng)A/D轉換,為0表示A/D轉換已完成(A/D轉換完成后該位自動(dòng)清零);bit3~bit5為A/D通道選擇位,其值對應于通道號,000為0通道;bit6~Bit7(ADCS0、ADCS1)為A/D轉換時(shí)鐘選擇,00=fosc/2,01=fosc/8,10=fosc/32,11=fRC(RC振蕩器)。為正確進(jìn)行A/D轉換,A/D轉換時(shí)鐘值不宜選得太小。
4.A/D結果高字節寄存器ADRESH存放A/D轉換結果的高字節。
編寫(xiě)A/D轉換的源程序,還會(huì )用到STATUS、OPTION、INTCON……寄存器。
二、PIC16F877A/D轉換源程序.ASM實(shí)例
筆者編寫(xiě)的A/D轉換源程序清單如下:
LISTP=PIC16F877;選單片機型號
#INCLUDEP16F877.INC
ORG0;復位矢量
GOTUSTART
ORGD'20";程序起始
STARTBCFSTATUS,6
BSFSTATUS,5;選BANK1
CLRFTRISD;設D口為輸出
CLRW;0→W
MOVLWB'10000111';TMR0,預分頻
MOVWFOPTION_REG;1:256
CLRW
MOVLWB'00000001'
MOVWFTRISB;設B0為輸入
MOVWFTRISA
MOVLW0
MOVLWB'00001110';A/D結果左移
MOVWFADCON1;VDD為參考電壓
BCFSTATUS,5;復位
;BANK0
CLRFPORTD;清D口
MOVLWB'01000001';打開(kāi)A/D選時(shí)鐘
MOVWFADCON0;fosc/8
MAINBTFSSINTCON,T0IF;TMR0溢出?
GOTOMAIN;等待
BCFINTCON,T0IF;TMR0溢出
BCFPIR1,ADIF;清標志位
;T0IF
BSFADCON0,GO;啟動(dòng)A/D變換
WAITBTFSSPIR1,ADIF;變換判標志位?
GOTOWAIT;等待
MOVFADRESH,W;A/D轉換完成
MOVWFPORTD;高字節到D口
CLRFPORTD;0→D口
WAITPWSHBTFSSPORTB,0;判0位
GOTOWAITPUSH;等待
MOVWFPORTD;高字節送D口
GOTOMAIN
END
說(shuō)明:1.因LED顯示僅用了8位(D口上),所以A/D轉換的低二位未顯示。2.從源程序中可以看出,A/D轉換是通過(guò)控制PIC16F877內部特殊功能寄存器來(lái)完成的。
三、PIC01.ASM的在線(xiàn)調試和程序固化
上述源程序可按照上期本版介紹的方法進(jìn)行在線(xiàn)調試。調試時(shí)可用MPLAB工具欄中的連續功能鍵操作。若在操作一次后再連續調試時(shí),應改變附圖中電位器中心抽頭的電壓值,方能觀(guān)察A/D變換的結果。程序調試好后再把目標碼.Hex固化到16F877單片機中,即可觀(guān)察不同的模擬量變換成數字量的結果,并可用三用表實(shí)測進(jìn)行驗證。

單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>