C8051F32X單片機AD數(shù)據(jù)采集程序
(1)AD數(shù)據(jù)采集程序說明
1)過程簡單說明
使用C8051F32X片內(nèi)10位AD進行256個數(shù)據(jù)(每個數(shù)據(jù)為10位,占2個字節(jié))512字節(jié)的數(shù)據(jù)采集。
采用TIME2定時溢出觸發(fā)啟動AD轉(zhuǎn)換方式。
在AD數(shù)據(jù)轉(zhuǎn)換完成,AD結(jié)束標志位為1時,自動產(chǎn)生AD轉(zhuǎn)換完成中斷(C8051F32X中斷10)。在中斷服務(wù)程序中,將AD轉(zhuǎn)換結(jié)果讀到片內(nèi)RAM中。在程序中表現(xiàn)為:將ADCOH、ADCOL存放到full函數(shù)中,設(shè)該函數(shù)上限為512,當fu11=512時,變量bLOCk_finish=l(初始狀態(tài)和表1ADC控制寄存器ADCOCN功能說明fu11<512時,block_finish=0)。此時,主程序中的while(block_finish)結(jié)束等待,進入下一部分程序。
AD數(shù)據(jù)采集結(jié)束后,再把采集的512個數(shù)據(jù)字節(jié)用IAP方式寫入單片機flash的2000H~2200H中。
2)定時器2的工作設(shè)置和工作過程
使用TIME2定時溢出觸發(fā)啟動ADC進行數(shù)據(jù)采集轉(zhuǎn)換時,設(shè)定時器2為16位自動加載方式;定時器控制寄存器TMR2CN(地址:C8H)在初始,化時設(shè)置為(C8H)=#OOH,其第3位=0時,設(shè)置定時器2工作在16位自動重裝方式。
時鐘為系統(tǒng)時鐘的1/12=1MHz,時鐘控制寄存器CKCON(8EH)設(shè)置為:(8EH)=#02H:。
TMR2RL是定時器2重載寄存器的低8位,設(shè)置為TMR2RL=65535-(SYSCLK/10000)=65535-100,即定時器2的溢出間隔時間為100/s。設(shè)TMR2=Oxffff,是立即重新加載值;TR2=1:置TMR2RN寄存器的位2(TR2)為1時,允許定時器2工作在定時器溢出啟動AD方式。此時,定時器2開始工作。
說明:當TR2置1后,定時器2就循環(huán)工作在定時溢出啟動AD方式狀態(tài)。如要停止其工作,必須在程序中設(shè)置TMR2RN=#FBH。
3)AD工作方式設(shè)置和工作過程
設(shè)置ADCOCN(ADC控制寄存器)=#02H其2~0位設(shè)為02,置為定時器2溢出啟動ADC轉(zhuǎn)換方式。
設(shè)置電壓基準寄存器REFOCN=#OBH,選Vdd為電壓基準。
設(shè)置AMXOP=#OOH,選AD輸入接口為Pl.0。
設(shè)AMXON=#1FH,選ADC負輸入寄存器=接地,P1.0工作在單端模式。
要置P1.0口工作在模擬方式:PIMDIN=#XOH,P1.0要設(shè)置PISKIP=#XIH。
設(shè):ADCOCF,ADC配置寄存器(BCH)=#OOH,選數(shù)據(jù)右對齊,SAR時鐘=3MHz。
當設(shè)置ADCOCN寄存器的第7位ADOEN=1時;使能ADC開始轉(zhuǎn)換工作。
ADC工作后,就不斷的自動循環(huán)工作,除非ADOEN位被清零,才能令其停止工作。
設(shè)置EIE1(擴展中斷允許1寄存器)=0X08,其位3置1時,允許ADOINT標志的中斷請求。即使用ADOINT作為中斷的握手標志。
此時,當AD轉(zhuǎn)換完成,ADOINT自動置1后,產(chǎn)生ADC中斷(C8051F32X單片機中斷10)。
程序在進入中斷服務(wù)程序中;將AD轉(zhuǎn)換結(jié)果的10位數(shù)字分別放到:
tempstoragel
此時,采集的AD數(shù)據(jù)是放在單片機的片內(nèi)RAM中的。為了掉電后這些數(shù)據(jù)能夠不丟失,還要將其用在系統(tǒng)編程的方式寫到flash中去。
(2)AD數(shù)據(jù)采集流程
AD數(shù)據(jù)采集流程流程圖如下圖所示。
(3)C8051F32X單片機AD數(shù)據(jù)采集源程序