9-3、 與ADC相關的暫存器
? 中斷旗標暫存器(Interrupt Flag Register) – INTF (0x11)
7 6 5 4 3 2 1 0 ADIF
RBFIF PWM1IF PWM0IF EINT1F EINT0F TCCOF FRCOF ? Bit 7 (ADIF): ADC中斷旗標:
當ADC轉換完成一筆資料時,中斷條件成立,此位元設為1。以軟體指令清除。
? The Converting Value of ADC – ADDATAH (0x1F) & ADDATAL (0x20)
ADDATAH: MSB Converting Value of ADC. 7 6 5 4 3 2 1 0 ADD9 ADD8 ADD7 ADD6 ADD5 ADD4 ADD3 ADD2 ADDATAL: LSB Converting Value of ADC. 7 6 5 4 ADD1 ADD0 - - 3 - 2 - 1 - 0 - 此暫存器儲存ADC轉換完成的資料。其中ADDATAH是ADC轉換完成資料高位元組,ADDATAL是ADC轉換完成資料低位元組。
? 週邊功能致能控制暫存器(Peripherals Enable Control) – PRIE (0x80)
7 6 5 4 3 2 1 0 SPIE USBE WME ADE PWM1E PWM0E TCCE FRCE 此暫存器控制是否啟用週邊功能。當設為0時,表示不啟用該週邊功能,當設為1時,表示啟用該週邊功能。 ? Bit 4 (ADE):
類比對數位轉換(ADC) 功能致能位元。
~ 6 ~
? ADC類比輸入選擇控制暫存器(ADC analog Input Pin Select) – ADCAIS (0x96)
7 6 5 4 3 2 1 0 - - IMS2 IMS1 IMS0 CKR2 CKR1 CKR0
? Bit 0 ~ Bit 2 (CKR0 ~ CKR2):AD conversion Rate control bits 此位元是設定ADC轉換的速率。 A/D Conversion Rate Unit: KHz CKR2: CKR1: Divided Rate 6MHz 12MHz 24MHz 48MHz CKR0 Clock Source Clock Source Clock Source Clock Source 000 ÷ 2 250 500 1000 2000 001 ÷ 4 125 250 500 1000 010 ÷ 8 62.5 125 250 500 011 ÷ 16 31.3 62.5 125 250 100 ÷ 32 15.6 31.3 62.5 125 101 ÷ 64 7.8 15.6 31.3 62.5 110 ÷ 128 3.9 7.8 15.6 31.3 111 ÷ 256 2.0 3.9 7.8 15.6
? Bit 3 ~ Bit 5 (IMS0~IMS2):ADC configuration definition bit 此位元是設定ADC類比輸入通道的組態。 IMS PTEPTEPTEPTEPTEPTEPTEPTEPTDPTDPTDPTDPTDPTDPTDPTD7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 000 A A D D D D D D D D D D D D D D 001 A A A A D D D D D D D D D D D D 010 A A A A A A D D D D D D D D D D 011 A A A A A A A A D D D D D D D D 100 A A A A A A A A A A D D D D D D 101 A A A A A A A A A A A A D D D D 110 A A A A A A A A A A A A A A D D 111 A A A A A A A A A A A A A A A A Note:A→類比輸入信號。 D→數位輸入(出)信號。
? Bit 5 ~ Bit 7:保留
~ 7 ~
? ADC組態控制暫存器(ADC Configuration Register) – ADCCR (0x97)
7 6 5 4 3 2 1 0 ADRUN ADIE - - AIPS3 AIPS2 AIPS1 AIPS0
? Bit 0 ~ Bit3 (AIPS0~AIPS3):Analog Input Select 此位元是設定ADC類比輸入通道的選擇。 0000 = AN0; 0001 = AN1; 0010 = AN2; 0011 = AN3; 0100 = AN4; 0101 = AN5; 0110 = AN6; 0111 = AN7; 1000 = AN8; 1001 = AN9; 1010 = ANA; 1011 = ANB; 1100 = ANC; 1101 = AND; 1110 = ANE; 1111 = ANF;
? Bit 6 (ADIE):ADC interrupt enable
此位元是設定ADC中斷功能致能位元。當設為0時,表示不啟用ADC中斷功能,當設為1時,表示啟用ADC中斷功能。
? Bit 7 (ADRUN):ADC starts to RUN 此位元是設定ADC開始動作。
? Bit 4 and Bit 5 :保留
~ 8 ~
9-4、 程式範例
1. 實習1 - 類比數位轉換原理實習
? 動作說明
程式使用ADC的功能,由VR類比輸入訊號經由MCU轉換成數位訊號,秀在LED上。 ? 硬體連接
此範例使用ET44M210的實驗電路板。 ? 程式說明
此範例使用ADC的功能,並且採用Polling的方式而不使用中斷的方式。程式一開始先起始ET44M210的動作:除能所有的中斷功能,設定PORT A為輸出端,清除ADDATAH、ADDATAL 的值,設定ADC類比輸入及ADC轉換速率,設定ADC轉換的Channel。當起始ET44M210的動作完成後,ADC便開始轉換,並等待ADC轉換完成,當ADC轉換完成後,將ADC轉換完成後的資料傳給PORT A,程式跳至AD_START繼續執行。
? 流程圖
START起始ET44M210ADC轉換開始NO等待AD轉換完成YES將ADC轉換的值傳給PORT A
~ 9 ~
? 程式碼 ADC01.dt中副程式及程式區段說明 ADC01.dt 程式共包含了9個副程式及程式區段,依照程式的撰寫順序有: INITIAL: 、 AD_START: 、 WAIT_AD_TRANS: 、 AD_TRANS_OK: 、 DELAY: 、 DELAYDD: 、 DELAYCC: 、 DELAYAA: 、 DELAYA: 為了方便讀者閱讀瞭解,針對程式中所定義的LABEL,以字母排序,整理如下表: 程式中所定義的副程式或LABEL說明 編號 LABEL名稱 0 AD_START: 1 AD_TRANS_OK: 2 DELAY: 3 DELAYA: 4 DELAYAA: 5 DELAYCC: 6 DELAYDD: 7 INITIAL: 行號 39 ADC轉換開始 50 AD轉換完成 57 DELAY副程式 75 延遲副程式下的LABEL 71 延遲副程式下的LABEL 66 延遲副程式下的LABEL 61 延遲副程式下的LABEL 19 主程式起始化 說明 8 WAIT_AD_TRANS: 42 等待AD轉換完成 本表格是針對程式中所定義的LABEL所整理出來的,針對表格每一欄的屬性說明如下: 編號:為該表格中所要說明的LABEL順序編號。 LABEL名稱:為程式中實際的LABEL名稱。 行號:為該LABEL實際於程式中第幾行。 說明:該說明用以描述解釋該LABEL下面的副程式或程式區段所要執行的動作。 ADC01.dt完整的原始程式碼 000 /*********************************************** 001 程式說明 002 由VR類比輸入訊號經由MCU轉換成數位訊號,秀在LED上 003 004 ************************************************/ 005 INCLUDE \ 006 INCLUDE \ 007 CKR == 7 ;設定ADC轉換的速率
~ 10 ~