160 likes | 303 Views
4.11 ADC. 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]. ADCR0 控制暫存器. Bit7: START A/D 轉換起始控制位元 0->1->0 A/D 轉換器開始轉換
E N D
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]
ADCR0控制暫存器 Bit7:START A/D轉換起始控制位元 0->1->0 A/D轉換器開始轉換 0->1 A/D轉換器回至重置狀態 Bit6:EOCB轉換完成狀態旗標 1 A/D轉換器正在進行轉換 0 A/D轉換器轉換完成
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位元
Bit3:未使用 • Bit[2:0] :通道選擇位元 ACS[2:0] 000 = AN0 通道 100 = AN4 通道 001 = AN1 通道 101 = AN5 通道 010 = AN2 通道 110 = AN6 通道 011 = AN3 通道 111 = AN7 通道
ACERL 控制暫存器 • Bit [7:0]= [ACE7 ACE6 .. ACE0] • A/D 類比通道設定位元 1=PAn接腳為類比輸入(n=0~7) 0=PAn接腳為數位I/O輸入或其它
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輸入或其它
Bit 1: ACE9 PE7類比通道設定位元 1=PE7 接腳為AN9類比輸入 0=PE7 接腳為數位I/O輸入或其它 • Bit 0: ACE8 PE6類比通道設定位元 1=PE6 接腳為AN8類比輸入 0=PE6 接腳為數位I/O輸入或其它
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:未使用
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=未使用
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
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 00H ;HT-66XX RESET VECTOR JMP INIT ORG 1CH ;HT-66RXX ADC INTERRUPT ;VECTOR JMP ISR_ADC
INIT: CLR LED_PORTC ;CONFIG PA AS OUTPUT CLR LED_PORT MOV A,08h ;CP1 DISABLE MOV CP1C,A ;規劃ADCR0, ADCR1 MOV A,00000000B ;SELECT AN0 FOR ADC, ADRFS=0 MOV ADCR0,A ;ACS[000]=000, 選AN0通道 MOV A,00000010B ;A/D CLOCK=fSYS/4, VREFS=0 MOV ADCR1,A ;ADCK[000]=010,AD轉換時脈選擇位元 MOV A,00000001B ;PA0AS A/D CHANNEL MOV ACERL,A SET ADE ;ENABLE ADC INTERRUPT SET EMI
MAIN: SET START ;RESET ADC CLR START ;START ADC CONVERSION MOV A,50 CALL DELAY JMP MAIN
;=========================================================== ; 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
;===================================================================;=================================================================== ; 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