合泰HT66F018程式設計介紹

2021-09-05 11:29:18 字數 4154 閱讀 9126

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

通過禁止相關中斷使能位,可以遮蔽中斷請求,然而,一旦中斷請求標誌位被設定,它們會被保留在中斷控制暫存器內,直到相應的中斷服務子程式執行或請求標誌位被軟體指令清除。

多功能中斷中所含中斷相應程式執行時,多功能中斷請求標誌mf0f-mf2f 可以自動清零,但各自的請求標誌需在應用程式中手動清除。

如下圖展示的是ht66f018的中斷結構圖,可以在datasheet的page117中找到,在編寫中斷函式時,主要需要用到下圖中的*vector(中斷向量)*一列。各個中斷使能位以及相應的請求標誌位,以優先順序的次序顯示在下圖。一些中斷源有自己的向量,但是有些中斷卻共用多功能中斷向量。

一旦中斷子程式被響應,系統將自動清除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表示 具體所指的埠 變數或者常量等,可以是已...