ADC_DATA EQU 0C6H ;A/D轉換結果寄存器,為10位A/D轉化結果的高8位
ADC_LOW2 EQU 0BEH ;A/D轉換結果寄存器,低2位有效,為10位A/D轉換結果的低2位
;如果不用ADC_LOW2的低2位,只有ADC_DATA的8位,則為8位A/D轉化
P1M0 EQU 91H ;P1口模式選擇寄存器0
P1M1 EQU 92H ;P1口模式選擇寄存器1
ADC_POWER_ON_SPEED_CHANNEL_0 EQU 11100000B ;P1.0作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_1 EQU 11100001B ;P1.1作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_2 EQU 11100010B ;P1.2作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_3 EQU 11100011B ;P1.3作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_4 EQU 11100100B ;P1.4作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_5 EQU 11100101B ;P1.5作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_6 EQU 11100110B ;P1.6作為A/D輸入
ADC_POWER_ON_SPEED_CHANNEL_7 EQU 11100110B ;P1.7作為A/D輸入
;定義變量
ADC_CHANNEL_0RESULT EQU 30H ;0通道A/D轉換結果
ADC_CHANNEL_1RESULT EQU 31H ;1通道A/D轉換結果
ADC_CHANNEL_2RESULT EQU 32H ;2通道A/D轉換結果
ADC_CHANNEL_3RESULT EQU 33H ;3通道A/D轉換結果
ADC_CHANNEL_4RESULT EQU 34H ;4通道A/D轉換結果
ADC_CHANNEL_5RESULT EQU 35H ;5通道A/D轉換結果
ADC_CHANNEL_6RESULT EQU 36H ;6通道A/D轉換結果
ADC_CHANNEL_7RESULT EQU 37H ;7通道A/D轉換結果
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
MOV SP,#40H
ACALL ADC_POWER_ON //;開ADC電源,第壹次使用時要打開內部模擬電源
;開ADC電源,可適當加延時,1MS以內就足夠了
ACALL SET_P12_OPEN_DRAIN //;設置P1.2位開漏
ACALL SET_ADC_CHANNEL_2 //;設置P1.2作為A/D轉換通道
ACALL GET_ADC_RESULT //;測量電壓並且取A/D轉化結果
ADC_POWER_ON:
PUSH ACC
ORL ADC_CONTR,#80H //;開A/D轉換電源
MOV A,#20H
ACALL DELAY ;開A/D轉換電源後要加延時,1MS以內就足夠了
POP ACC
RET
;設置P1.2,設置A/D通道所在的I/O為開漏模式
SET_P12_OPEN_DRAIN:
PUSH ACC
MOV A,#00000100B
ORL P1M0,A
ORL P1M1,A
POP ACC
RET
SET_ADC_CHANNEL_2:
MOV ADC_CONTR,#ADC_POWER_ON_SPEED_CHANNEL_2 //;選擇P1.2作為A/D轉換通道
MOV A,#01H //;更換A/D轉換通道後要適當延時,使輸入電壓穩定
;以後如果不更換A/D轉換通道的話,不需要加延時
ACALL DELAY //;切換A/D轉換通道,加延時時20US~200US就可以了,與輸入電壓源的內阻有關
RET
GET_ADC_RESULT:
PUSH ACC
MOV ADC_DATA,#0
ORL ADC_CONTR,#00001000B ;啟動AD轉換
WAIT_AD_FINISH:
MOV A,#00010000B //;判斷AD轉換是否完成
ANL A,ADC_CONTR
JZ WAIT_AD_FINISH //;AD轉換尚未完成,繼續等待
ANL ADC_CONTR,#11100111B
MOV A,ADC_DATA //取10位AD轉換數據寄存器的高八位顯示到P2口
CLR C
MOV P2,A
LJMP GET_ADC_RESULT //不停的進行重復的AD采集
DELAY:
PUSH 02
PUSH 03
PUSH 04
MOV R4,A
DELAY_LOOP0:
MOV R3,#50
DELAY_LOOP:
DJNZ R3,DELAY_LOOP
DJNZ R4,DELAY_LOOP0
POP 04
POP 03
POP 02
RET
END