久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > AVR單片機入門系列(27)AVR AD轉換中斷

AVR單片機入門系列(27)AVR AD轉換中斷

作者: 時間:2016-12-03 來源:網絡 收藏
系統功能

大部分AVR內部帶有AD,本節以使用ATMEGA16的內部AD為例,給出AD轉換中斷程序。

本文引用地址:http://cqxgywz.com/article/201612/325271.htm

硬件設計

AVR主控電路原理

軟件設計

//目標系統:基于AVR單片機

//應用軟件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101

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

實驗內容:

使用中斷檢測AD0口,使用PB/PD口的LED指示AD讀到的數據。

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

硬件連接:

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

將PB/PD口的LED指示燈使能開關切換到"ON"狀態。

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

注意事項:

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

(2)請詳細閱讀:光盤根目錄下的“產品資料開發板實驗板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轉換值

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

程序名稱:AD轉換初始化程序

程序功能:

注意事項:

提示說明:

輸入:

返回:

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

void adc_init()

{

/*設置對應的IO口為輸入高阻態*/

DDRA &= ADEnStatus[AdcMux];

PORTA &= ADEnStatus[AdcMux];

ADCSRA = 0x00;//disable adc

ADMUX = (1<

ACSR = (1<

ADCSRA=(1<

}

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

程序名稱:AD轉換中斷服務程序

程序功能:

注意事項:

提示說明:

輸入:

返回:

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

#pragma interrupt_handler adc_isr:15

void adc_isr(void)

{

AdcVal = ADC&0x3FF;

ADMUX = (1<電源

ADCSRA |= (1<

}

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

程序名稱:

程序功能:

注意事項:

提示說明:

輸入:

返回:

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

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

}

}

系統調試

用LED顯示AD轉換值,調“ADJ0.AD0”的可調電阻可改變AD轉換值,觀察它的變化



評論


技術專區

關閉