當前位置:編程學習大全網 - 編程語言 - STC單片機怎樣用程序啟動AD(C程序)輸入的引腳是哪個芯片是STC12C2052AD

STC單片機怎樣用程序啟動AD(C程序)輸入的引腳是哪個芯片是STC12C2052AD

;本程序用宏晶的STC-ISP Ver 3.2A.PCB的下載編程工具測試通過,相關的A/D轉換結果在P1口上顯示

;轉換結果也以 16進制形式輸出到串行口,可以用串行口調試程序觀察輸出結果。

;時鐘 18.432MHz,波特率 = 9600。

;轉換結果也在 P1口利用 LED顯示出來,方便觀察。

LED_MCU_START EQU P3.7

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

ADC_RES EQU位A/D0BDH轉換結果寄存器;8

P1ASF EQU口中的相應位作為模擬功能使用時的控制寄存器9DH ;P1 ,如做A/D用,相應位要置1

ADC_Power_On_Speed_Channel_0 EQU 11100000B作為A/D輸入 ;P1.0

ADC_Power_On_Speed_Channel_1 EQU 11100001B作為A/D輸入 ;P1.1

ADC_Power_On_Speed_Channel_2 EQU 11100010B作為A/D輸入 ;P1.2

ADC_Power_On_Speed_Channel_3 EQU 11100011B作為A/D輸入 ;P1.3

ADC_Power_On_Speed_Channel_4 EQU 11100100B作為A/D輸入 ;P1.4

ADC_Power_On_Speed_Channel_5 EQU 11100101B作為A/D輸入 ;P1.5

ADC_Power_On_Speed_Channel_6 EQU 11100110B作為A/D輸入 ;P1.6

ADC_Power_On_Speed_Channel_7 EQU 11100111B作為A/D輸入 ;P1.7

;-------------------------------------------------

;定義變量

ADC_Channel_0_Result通道A/D轉換結果EQU 30H ;0

ADC_Channel_1_Result通道A/D轉換結果EQU 31H ;1

ADC_Channel_2_Result通道A/D轉換結果EQU 32H ;2

ADC_Channel_3_Result通道A/D轉換結果EQU 33H ;3

ADC_Channel_4_Result通道A/D轉換結果EQU 34H ;4

ADC_Channel_5_Result通道A/D轉換結果EQU 35H ;5

ADC_Channel_6_Result通道A/D轉換結果EQU 36H ;6

ADC_Channel_7_Result通道A/D轉換結果EQU 37H ;7

ORG 0000H

LJMP MAIN

ORG 0050H

MAIN:

CLR LED_MCU_START工作指示燈 LED_MCU_START;MCU EQU P3.7

MOV SP, #7FH 設置堆棧 ;

ACALL Initiate_RS232初始化串口 ;

ACALL ADC_Power_On;開ADC電源,第壹次使用時要打開內部模擬電源

開ADC電源,可適當加延時,1mS以內就足夠了;

ACALL Set_P12_ASF設置 P1.2為模擬功能口 ;

ACALL Set_ADC_Channel_2設置 P1.2作為A/D轉換通道 ;

ACALL Get_AD_Result測量電壓並且取A/D轉換結果 ;

ACALL Send_AD_Result發送轉換結果到 PC機 ;

ACALL Set_P12_Normal_IO設置 P1.2為普通IO ;

MOV A, ADC_Channel_2_Result用 P1口顯示A/D轉換結果 ;

CPL A

MOV P1, A

Wait_Loop:

SJMP Wait_Loop停機 ;

;-------------------------------------------------------------

Initiate_RS232: 串口初始化 ;

CLR ES 禁止串口中斷 ;

MOV TMOD, #20H設置 T1為波特率發生器 ;

MOV SCON, #50H 位數據位,無奇偶校驗 ;0101,0000 8

MOV TH1, #0FBH 晶振,波特率 = 9600;18.432MHz

MOV TL1, #0FBH

SETB TR1 啟動 T1 ;

RET

;--------------------------------------------------------------

Send_Byte:

CLR TI

MOV SBUF, A

Send_Byte_Wait_Finish:

JNB TI, Send_Byte_Wait_Finish

CLR TI

RET

ADC_Power_On:

PUSH ACC

ORL ADC_CONTR, #80H開A/D轉換電源 ;

MOV A, #20H

ACALL Delay 開A/D轉換電源後要加延時,1mS以內就足夠了;

POP ACC

RET

;-------------------------------------------------------------

;設置P1.2為模擬功能

Set_P12_ASF:

PUSH ACC

MOV A, #00000100B

ORL P1ASF, A

POP ACC

RET

;-------------------------------------------------------------

;設置 P1.2為普通IO

Set_P12_Normal_IO:

PUSH ACC

MOV A, #11111011B

ANL P1ASF, A

POP ACC

RET

;-------------------------------------------------------------

Set_ADC_Channel_2:

MOV ADC_CONTR, #ADC_Power_On_Speed_Channel_2

選擇P1.2作為A/D轉換通道;

MOV A, #05H更換 A/D轉換通道後要適當延時; ,使輸入電壓穩定

以後如果不更換 A/D;轉換通道的話,不需要加延時

ACALL Delay切換 A/D轉換通道,加延時; 20uS~200uS就可以了,與輸入電壓源的內阻有關

如果輸入電壓信號源的內阻在; 10K以下,可不加延時

RET

;-------------------------------------------------------------

Send_AD_Result:

PUSH ACC

MOV A, ADC_Channel_2_Result取 AD轉換結果 ;

ACALL Send_Byte發送轉換結果到 PC機 ;

POP ACC

RET

Get_AD_Result:

PUSH ACC 入棧保護 ;

MOV ADC_RES, #0

ORL ADC_CONTR, #00001000B啟動 AD轉換 ;

NOP;在對ADC_CONTR寄存器進行寫操作後,要加4個空操作延時,才能夠正確讀到ADC_CONTR的值

NOP;在對ADC_CONTR寄存器進行寫操作後,要加4個空操作延時,才能夠正確讀到ADC_CONTR的值

NOP;在對ADC_CONTR寄存器進行寫操作後,要加4個空操作延時,才能夠正確讀到ADC_CONTR的值

NOP;在對ADC_CONTR寄存器進行寫操作後,要加4個空操作延時,才能夠正確讀到ADC_CONTR的值

Wait_AD_Finishe:

MOV A, #00010000B判斷 AD轉換是否完成 ;

ANL A, ADC_CONTR

JZ Wait_AD_Finishe轉換尚未完成,繼續等待 ;AD

ANL ADC_CONTR, #11100111B清0 ADC_FLAG, ADC_START位,停止A/D;轉換

MOV A, ADC_RES

MOV ADC_Channel_2_Result, A保存 AD轉換結果 ;

POP ACC

RET

;---------------------------------------------------------------

Delay:

PUSH 02 將寄存器組0的 R2入棧 ;

PUSH 03 將寄存器組0的 R3入棧 ;

PUSH 04 將寄存器組0的 R4入棧 ;

MOV R4, A

Delay_Loop0:

MOV R3, #200 ;2 CLOCK --------------

Delay_Loop1: ; |

MOV R2, #249 ;2 CLOCK ------ |

Delay_Loop: ; | 1002 CLOCK |200406 CLOCK

DJNZ R2, Delay_Loop ;4CLOCK

DJNZ R3,Delay_Loop1 ;4CLOCK |

DJNZ R4, Delay_Loop0 ;4 CLOCK

POP 04

POP 03

POP 02

RET

;----------------------------------------------------------------

END

  • 上一篇:自曝被逼虛報46億產值!雷丁汽車創始人實名舉報當地縣領導!山東濰坊深夜回應:已成立調查組核實
  • 下一篇:延吉網紅墻在哪
  • copyright 2024編程學習大全網