Download presentation
Presentation is loading. Please wait.
1
4.11 ADC
2
Ht66f50 (表2-9-1) ADC數位類比轉換器 8通道類比轉換功能 12 bit解析度 類比輸入腳位PA
轉換結果D11-D0存放在ADRH,ADRL 中由ADRFS 決定 ADRFS=0 , ADRH= [D11:D4] , ADRL= [D3:D0],0000 ADRFS=1 , ADRH= 0000,[D11:D8] , ADRL= [D7:D0]
4
ADCR0控制暫存器 Bit7:START A/D轉換起始控制位元 0->1->0 A/D轉換器開始轉換
Bit6:EOCB轉換完成狀態旗標 1 A/D轉換器正在進行轉換 0 A/D轉換器轉換完成
5
Bit5:ADOFF 1 關閉A/D轉換模組 0 開啟A/D轉換模組 Bit4:ADRFS 轉換完成狀態旗標
ADRFS=1,ADRH= [3:0]存放轉換結果高4位元,ADRL= [7:0]存放轉換結果低8位元 ADRFS=0,ADRH= [7:0]存放轉換結果高8位元,ADRL= [7:4]存放轉換結果低4位元
6
Bit3:未使用 Bit[2:0] :通道選擇位元 ACS[2:0] 000 = AN0 通道 100 = AN4 通道 001 = AN1 通道 101 = AN5 通道 010 = AN2 通道 110 = AN6 通道 011 = AN3 通道 111 = AN7 通道
7
ACERL 控制暫存器 Bit [7:0]= [ACE7 ACE6 .. ACE0] A/D 類比通道設定位元
1=PAn 接腳為類比輸入(n=0~7) 0=PAn 接腳為數位I/O輸入或其它
8
ACERH 控制暫存器 Bit [7:4]= 未定義 Bit 3: ACE11 PF1類比通道設定位元 1=PF1 接腳為AN11類比輸入
0=PF1 接腳為數位I/O輸入或其它 Bit 2: ACE10 PF0類比通道設定位元 1=PF0 接腳為AN10類比輸入 0=PF0 接腳為數位I/O輸入或其它
9
Bit 1: ACE9 PE7類比通道設定位元 1=PE7 接腳為AN9類比輸入 0=PE7 接腳為數位I/O輸入或其它 Bit 0: ACE8 PE6類比通道設定位元 1=PE6 接腳為AN8類比輸入 0=PE6 接腳為數位I/O輸入或其它
10
ADCR1 控制暫存器 Bit 7 ACS4 內部1.25v通道輸入致能位元 ACS4=1 :類比通道輸入來至AN0:AN7
Bit 6: V125EN V125EN=1致能1.25v參考電壓輸出 V125EN=0禁能1.25v參考電壓輸出 Bit 5:未使用
11
Bit[2:0]:為ADCK[2:0] AD轉換時脈選擇位元
Bit 4 VREFS AD參考電壓選擇位元 VREFS =1 :VREF使用外部電壓 VREFS =0 :使用AVdd Bit 3:未使用 Bit[2:0]:為ADCK[2:0] AD轉換時脈選擇位元 000=fsys 001=fsys/2 010=fsys/4 011=fsys/8 100=fsys/16 101=fsys/32 110=fsys/64 111=未使用
12
4.11 ;PROGRAM : 4-11.ASM ;FUNCTION: ADC DEMO PROGRAM
;可變電阻控制AN0 (PA0) 類比輸入電壓,轉換後高8勿位元輸出於LED #INCLUDE HT66F50.INC ; MY_DATA .SECTION 'DATA' ;== DATA SECTION == DEL1 DB ? ;DELAY LOOP COUNT 1 DEL2 DB ? ;DELAY LOOP COUNT 2 DEL3 DB ? ;DELAY LOOP COUNT 3 COUNT DB ? ;PITCH COUNT STACK_A DB ? ;STACK BUFFER FOR A STACK_PSW DB ? ;STACK BUFFER FOR PSW
13
LED_PORT EQU PD ;DEFINE LED_PORT
LED_PORTC EQU PDC ;DEFINE LED_PORT CONTROL REG. MY_CODE .SECTION AT 0 'CODE' ;== PROGRAM ; SECTION == ORG H ;HT-66XX RESET VECTOR JMP INIT ORG 1CH ;HT-66RXX ADC INTERRUPT ;VECTOR JMP ISR_ADC
14
INIT: CLR LED_PORTC ;CONFIG PA AS OUTPUT
MOV A,08h ;CP1 DISABLE MOV CP1C,A ;規劃ADCR0, ADCR1 MOV A, B ;SELECT AN0 FOR ADC, ADRFS=0 MOV ADCR0,A ;ACS[000]=000, 選AN0通道 MOV A, B ;A/D CLOCK=fSYS/4, VREFS=0 MOV ADCR1,A ;ADCK[000]=010, AD轉換時脈選擇位元 MOV A, B ;PA0 AS A/D CHANNEL MOV ACERL,A SET ADE ;ENABLE ADC INTERRUPT SET EMI
15
MAIN: SET START ;RESET ADC
CLR START ;START ADC CONVERSION MOV A,50 CALL DELAY JMP MAIN
16
;===========================================================
; ADC INTERRUPT SERVICE ROUTINE ISR_ADC: MOV STACK_A,A ;PUSH A MOV A,STATUS MOV STACK_PSW,A ;PUSH STATUS MOV A,ADRH ;GET HIGH BYTE A/D RESULT MOV LED_PORT,A ;SEND TO PA MOV A,STACK_PSW MOV STATUS,A ;POP STATUS MOV A,STACK_A ;POP A RETI
17
;===================================================================
; PROC : DELAY ; FUNC : DEALY ABOUT ; PARA : ACC : DELAY FACTOR ; REG : DEL1,DEL2,DEL3 DELAY PROC MOV DEL1,A ;SET DEL1 COUNTER DEL_1: MOV A,3 MOV DEL2,A ;SET DEL2 COUNTER DEL_2: MOV A,110 MOV DEL3,A ;SET DEL3 COUNTER DEL_3: SDZ DEL ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL ;DEL2 DOWN COUNT JMP DEL_2 SDZ DEL1 ;DEL1 DOWN COUNT JMP DEL_1 RET DELAY ENDP END
Similar presentations