當前位置:編程學習大全網 - 編程語言 - 需要STC12C5A60S2的AD轉換,匯編的

需要STC12C5A60S2的AD轉換,匯編的

ADC_CONTR EQU 0C5H ;A/D轉換寄存器

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

  • 上一篇:長沙市第六中學好嗎?校園環境怎麽樣?
  • 下一篇:fm調頻雷達提高測距精度方法
  • copyright 2024編程學習大全網