Transcript 4-11 ADC
4.11 ADC 1 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] 2 3 ADCR0控制暫存器 Bit7:START A/D轉換起始控制位元 0->1->0 A/D轉換器開始轉換 0->1 A/D轉換器回至重置狀態 Bit6:EOCB轉換完成狀態旗標 1 A/D轉換器正在進行轉換 0 A/D轉換器轉換完成 4 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位元 5 •Bit3:未使用 •Bit[2:0] :通道選擇位元 000 = AN0 通道 100 = 001 = AN1 通道 101 = 010 = AN2 通道 110 = 011 = AN3 通道 111 = ACS[2:0] AN4 通道 AN5 通道 AN6 通道 AN7 通道 6 ACERL 控制暫存器 •Bit •A/D 1=PAn 0=PAn [7:0]= [ACE7 ACE6 .. ACE0] 類比通道設定位元 接腳為類比輸入(n=0~7) 接腳為數位I/O輸入或其它 7 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輸入或其它 8 •Bit 1: 1=PE7 0=PE7 •Bit 0: 1=PE6 0=PE6 ACE9 PE7類比通道設定位元 接腳為AN9類比輸入 接腳為數位I/O輸入或其它 ACE8 PE6類比通道設定位元 接腳為AN8類比輸入 接腳為數位I/O輸入或其它 9 ADCR1 控制暫存器 •Bit 7 ACS4 內部1.25v通道輸入致能位元 ACS4=1 :類比通道輸入來至AN0:AN7 ACS4=0 :類比通道輸入連接至內部1.25v •Bit 6: V125EN V125EN=1致能1.25v參考電壓輸出 V125EN=0禁能1.25v參考電壓輸出 •Bit 5:未使用 10 •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=未使用 11 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 12 LED_PORT LED_PORTC EQU EQU PD PDC ;DEFINE LED_PORT ;DEFINE LED_PORT CONTROL REG. MY_CODE .SECTION AT 0 'CODE' ;== PROGRAM ; SECTION == ORG 00H ;HT-66XX RESET VECTOR JMP INIT ORG 1CH ;HT-66RXX ADC INTERRUPT ;VECTOR JMP ISR_ADC 13 INIT: CLR CLR MOV MOV LED_PORTC LED_PORT A,08h CP1C,A ;CONFIG PA AS OUTPUT ;CP1 DISABLE MOV A,00000000B ;規劃ADCR0, ADCR1 ;SELECT AN0 FOR ADC, ADRFS=0 MOV ADCR0,A ;ACS[000]=000, 選AN0通道 MOV MOV A,00000010B ADCR1,A ;A/D CLOCK=fSYS/4, VREFS=0 ;ADCK[000]=010, AD轉換時脈選擇位元 MOV MOV SET SET A,00000001B ACERL,A ADE EMI ;PA0 AS A/D CHANNEL ;ENABLE ADC INTERRUPT 14 MAIN: SET CLR MOV CALL JMP START START A,50 ;RESET ADC ;START ADC CONVERSION DELAY MAIN 15 ;=========================================================== ; 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 16 ;=================================================================== ; PROC : DELAY ; FUNC : DEALY ABOUT ACC*1mS @fSYS=4MHz ; 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 DEL3 ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL2 ;DEL2 DOWN COUNT JMP DEL_2 SDZ DEL1 ;DEL1 DOWN COUNT JMP DEL_1 RET DELAY ENDP END 17