;*單片機模擬量進行模/數(shù)轉(zhuǎn)換,并用LED顯示出來我們可以看到轉(zhuǎn)換
;*結(jié)果,0位AD當(dāng)做8位來用了,利用 單片機 片內(nèi)硬件資源TMR0和預(yù)分頻器,
;*為ADC提供定時啟動信號,A/D轉(zhuǎn)換的時鐘源選用了系統(tǒng)周期的8倍,選
;*用了電源電壓VDD和VSS作為基準(zhǔn)電壓,軟件方式查詢其中斷標(biāo)志位ADIF.
;************************************************************
LISTP=16F877;列表偽指令
INCLUDE"P16F877.INC";把包含文件含入源程序
;**************************************************
__CONFIG3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;************************************************************
ORG0000H
NOP;放置一條ICD必段的空操作指令
START
BANKSELPORTC;選擇同PORTC寄存器相同的體
CLRFPORTC;清PORTC
MOV LWB’010000001’;選擇:時鐘時鐘源為FOSC/8,允許ADC工作
MOV WFADCON0;通道AN0,暫時不啟動轉(zhuǎn)換過程
BANKSELOPTION_REG;選擇寄存器OPTION_REG的體為當(dāng)前體
MOV LWB’10000111’;設(shè)定:RB口不用上拉,分頻器配給TMR0
MOV WFOPTION_REG;分頻比設(shè)為1:256
CLRFTRISC;PORTC所有管腳設(shè)為輸出(接LED)
MOV LWB’00001110’;轉(zhuǎn)換結(jié)果左對齊,只選1個A/D通道RA0/AN0
MOV WFADCON1;選擇VDD和VSS作參考源
BANKSELPORTC;選中同寄存器PORTC的體為當(dāng)前體
;---------------------------------
MAIN
BTFSSINTCON,T0IF;等待和循環(huán)檢測TMR0溢出中斷標(biāo)志位
GOTOMAIN;如果沒有發(fā)生TMR0溢出中斷則返回循環(huán)檢測
BCFINTCON,T0IF;如果發(fā)生了TMR0溢出中斷,則清除標(biāo)志位T0IF
BSFADCON0,GO;開啟A/D轉(zhuǎn)換過程
WAIT
BTFSSPIR1,ADIF;等待A/D轉(zhuǎn)換過程結(jié)束,檢測ADC中斷標(biāo)志位
GOTOWAIT;如果沒有轉(zhuǎn)換結(jié)束,則返回循環(huán)檢測
MOV FADRESH,W;如果轉(zhuǎn)換完畢,則把A/D結(jié)果讀到W
MOV WFPORTC;經(jīng)過W送C口LED顯示
GOTOMAIN;循環(huán)進行A/D轉(zhuǎn)換
;---------------------------------
END;源程序結(jié)束