新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)入門系列(27)AVR AD轉(zhuǎn)換中斷

AVR單片機(jī)入門系列(27)AVR AD轉(zhuǎn)換中斷

作者: 時(shí)間:2016-12-03 來源:網(wǎng)絡(luò) 收藏
系統(tǒng)功能

大部分AVR內(nèi)部帶有AD,本節(jié)以使用ATMEGA16的內(nèi)部AD為例,給出AD轉(zhuǎn)換中斷程序。

本文引用地址:http://m.butianyuan.cn/article/201612/325271.htm

硬件設(shè)計(jì)

AVR主控電路原理

軟件設(shè)計(jì)

//目標(biāo)系統(tǒng):基于AVR單片機(jī)

//應(yīng)用軟件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101

----------------------------------------------------------------------

實(shí)驗(yàn)內(nèi)容:

使用中斷檢測(cè)AD0口,使用PB/PD口的LED指示AD讀到的數(shù)據(jù)。

----------------------------------------------------------------------

硬件連接:

將“ADJ0.AD0”引針與“MCU.AD0”引針使用短路帽短接。

將PB/PD口的LED指示燈使能開關(guān)切換到"ON"狀態(tài)。

----------------------------------------------------------------------

注意事項(xiàng):

(1)若有加載庫程序,請(qǐng)將光盤根目錄下的“庫程序”下的“ICC_H”文件夾拷到D盤

(2)請(qǐng)?jiān)敿?xì)閱讀:光盤根目錄下的“產(chǎn)品資料開發(fā)板實(shí)驗(yàn)板SMK系列SMK1632說明資料”

----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/

#include

#include "D:ICC_HCmmICC.H"

#define H_VAL_DISP_DDR DDRD

#define L_VAL_DISP_DDR DDRB

#define H_VAL_DISP_PORT PORTD

#define L_VAL_DISP_PORT PORTB

const uint8 ADEnStatus[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

uint8 AdcMux; //ADC通道

uint16 AdcVal; //ADC轉(zhuǎn)換值

/*--------------------------------------------------------------------

程序名稱:AD轉(zhuǎn)換初始化程序

程序功能:

注意事項(xiàng):

提示說明:

輸入:

返回:

--------------------------------------------------------------------*/

void adc_init()

{

/*設(shè)置對(duì)應(yīng)的IO口為輸入高阻態(tài)*/

DDRA &= ADEnStatus[AdcMux];

PORTA &= ADEnStatus[AdcMux];

ADCSRA = 0x00;//disable adc

ADMUX = (1<

ACSR = (1<

ADCSRA=(1<

}

/*--------------------------------------------------------------------

程序名稱:AD轉(zhuǎn)換中斷服務(wù)程序

程序功能:

注意事項(xiàng):

提示說明:

輸入:

返回:

--------------------------------------------------------------------*/

#pragma interrupt_handler adc_isr:15

void adc_isr(void)

{

AdcVal = ADC&0x3FF;

ADMUX = (1<電源

ADCSRA |= (1<

}

/*--------------------------------------------------------------------

程序名稱:

程序功能:

注意事項(xiàng):

提示說明:

輸入:

返回:

--------------------------------------------------------------------*/

void main(void)

{

H_VAL_DISP_DDR = 0xFF;

L_VAL_DISP_DDR = 0xFF;

AdcMux = 0; //使用ADC通道0

adc_init();

SEI();

while(1)

{

H_VAL_DISP_PORT = (AdcVal&0x300)>>8;//ADC的高2位Val

L_VAL_DISP_PORT = AdcVal&0xFF;//ADC的低8位Val

}

}

系統(tǒng)調(diào)試

用LED顯示AD轉(zhuǎn)換值,調(diào)“ADJ0.AD0”的可調(diào)電阻可改變AD轉(zhuǎn)換值,觀察它的變化



評(píng)論


技術(shù)專區(qū)

關(guān)閉