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