5. adc
總結詳細的ht-ide3000使用手冊可以在ht-ide3000中直接開啟:幫助->holtek ht-ide3000使用手冊。
工程建立好之後,通過:工具->配置選項,可對系統的工作電壓、時鐘源、頻率等進行修改。
本例程的配置:
smod暫存器在上電復位後的初始值為0000 0011,本程式不再對其修改,故最終的時鐘是使用內部高速時鐘:8mhz。該暫存器的詳細資訊在datasheet中工作模式和系統時鐘一節。
埠配置不外乎輸入/輸出模式的選擇,以及上拉電阻的配置。合泰的標頭檔案ht66f018.h中,所有暫存器都是以「_」開頭,使用小寫字母。
_acerl =0;
//disable all ad
//pa口配置
_pac =
0x68
;//0110 1000
_papu =
0x08
;//0000 1000
_pa =
0x04
;//0000 0100
_pawu =
0x0;
//禁止pa喚醒功能
//pb口配置
_pbc =
0x07
;//0000 0111
_pbpu =
0x00
; _pb =
0x00
;//pa0口拉高
_pa0 =1;
//判斷pa3口的埠電平狀態if(
0== _pa3)
a/d 轉換控制暫存器的上電初始狀態預設pa4-pa7, pb0-pb3 為模擬訊號輸入引腳,但a/d 轉換功能並沒自動開啟。因些需注意若要將pa4-pa7, pb0-pb3用作數碼訊號輸入引腳,或其它功能,需在程式中修改a/d 轉換控制暫存器值以關閉a/d 功能。另外需注意a/d 通道使能,內部上拉電阻將自動斷開。ht66f018包含3 個tm, 分別命名為tm0,tm1 和tm2。每個tm 可被劃分為乙個特定的型別,即簡易型tm(ctm),標準型tm(stm) 或週期型tm(ptm)。
下面提供使用tm0定時1ms,tm1定時200us的配置**:
_cpc =
0x08
;//關比較器
_tmpc =0;
//禁止tmn輸入/輸出引腳
_tm0c0 =
0x00
;//tm0時鐘為系統時鐘4分頻(fsys=8m),則tm0時鐘為2m,並關閉定時器
_tm0c1 =
0xc1
;//定時/計數器模式模式,比較器a匹配(即16位比較)
_tm0al =
0xd0
;//定時器t0賦初值,定時1ms
_tm0ah =
0x07
; _tm1c0 =
0x00
;//tm1時鐘為系統時鐘4分頻(fsys=8m),則tm1時鐘為2m,並關閉定時器
_tm1c1 =
0xc1
;//1100 0001 定時器模式,比較器a匹配
_tm1al =
0x90
; _tm1ah =
0x01
;//定時器t1賦初值,定時200us
簡易型tm 核心是乙個由使用者選擇的內部或外部時鐘源驅動的16 位向上計數器,它還包括兩個內部比較器即比較器a 和比較器p。這兩個比較器將計數器的值與ccrp 和ccra 暫存器中的值進行比較。ccrp 是8 位的,與計數器的高8 位比較;而ccra 是16 位的,與計數器的所有位比較。定時器的功能比較複雜,其他模式的配置請自行參見datasheet中的介紹。
ht66f018提供多個外部中斷和內部中斷功能,外部中斷由int0~int1 引腳動作產生,而內部中斷由各種內部功能,如定時器模組、比較器、時基、lvd、eeprom 和a/d 轉換器等產生。
下面提供的**接上一節定期器的內容,使能定時器t0和t1的中斷,同時開啟外部中斷0:
_integ =
0x03
;//外部int0中斷雙沿控制
_intc0 =
0x08
;//使能外部中斷0,使能多功能中斷0(其中包括tm0定時)
_intc1 =
0x01
;//使能多功能中斷1(即使能tm1中斷)
_intc2 =
0x00
;//禁止其它中斷
_mfi0 =
0x02
;//tm0比較匹配a中斷使能
_mfi1 =
0x02
;//tm1比較匹配a中斷使能
_mfi2 =
0x00
;//禁止其它中斷
_emi =1;
//開總中斷
_t0on =1;
//啟動定時器0
_t1on =1;
//啟動定時器1
_int0e =1;
//使能外部中斷0
通過禁止相關中斷使能位,可以遮蔽中斷請求,然而,一旦中斷請求標誌位被設定,它們會被保留在中斷控制暫存器內,直到相應的中斷服務子程式執行或請求標誌位被軟體指令清除。如下圖展示的是ht66f018的中斷結構圖,可以在datasheet的page117中找到,在編寫中斷函式時,主要需要用到下圖中的*vector(中斷向量)*一列。各個中斷使能位以及相應的請求標誌位,以優先順序的次序顯示在下圖。一些中斷源有自己的向量,但是有些中斷卻共用多功能中斷向量。多功能中斷中所含中斷相應程式執行時,多功能中斷請求標誌mf0f-mf2f 可以自動清零,但各自的請求標誌需在應用程式中手動清除。
一旦中斷子程式被響應,系統將自動清除emi位,所有其它的中斷將被遮蔽,這個方式可以防止任何進一步的中斷巢狀。其它中斷請求可能發生在此期間,雖然中斷不會立即響應,但是中斷請求標誌位會被記錄。ht66f018包含乙個多通道的a/d轉換器,它們可以直接接入外部模擬訊號(來自感測器或其它控制訊號)並直接將這些訊號轉換成12位的數字量。
轉換流程如下:adcr0 暫存器中的start 位,用於開啟和復位a/d 轉換器。當微控制器設定此位從邏輯低到邏輯高,然後再到邏輯低,就會開始乙個模數轉換週期。當start 位從邏輯低到邏輯高,但不再回到邏輯低時,adcr0 暫存器中的eocb 位置「1」,復位模數轉換器。start 位用於控制內部模數換轉器的開啟動作。adcr0 暫存器中的eocb 位用於表明模數轉換過程的完成。在轉換週期結束後,eocb 位會被微控制器自動地置為「0」。
**描述:
void
adc_init()
/* 根據通道值獲取adc取樣值 */
uint16_t getadresult
(uint8_t adc_chan)
ht66f018的編碼總體來說還是比較簡單的,只是存在不少的坑,比如中斷服務中微控制器會自動清除emi,這種情況我還是第一回碰到。最後要說的是,多讀幾遍datasheet是關鍵,很多程式設計的關鍵點在datasheet中都有說明;中文的datasheet,理解起來也比較快。 合泰HT66F04 AD 初始化
以下是ad檢測初始化以下是ad檢測初始化 define ad start start 0 start 1 start 0 開始ad轉換 define ad waitint 1 eocb 等待ad轉換完成 define ad pwoer open 0 5 ad電源模組開啟 define ad pwoe...
合泰 HT66F04 定時器初始化
以下是對ht66f04 定時器tm0定時器的初始化,定時100us中斷一次 define tm0 run 0 7 tm0執行 define tm0 paust 1 7 tm0暫停 define tm0 div4 0 4 fsys 4 define tm0 div1 1 4 fsys define t...
合泰32位微控制器入門 以HT32F52352為例
step1 新建工程 建議直接使用例程修改 step2 標頭檔案 ifndef x h define x h include ht32f5 x 01.h 呼叫此標頭檔案可以使用一些已經封裝好的埠 define yyy 表示重新定義的埠或者變數 常量 yyy表示 具體所指的埠 變數或者常量等,可以是已...