AVR單片機入門(mén)系列(27)AVR AD轉換中斷
大部分AVR內部帶有AD,本節以使用ATMEGA16的內部AD為例,給出AD轉換中斷程序。
本文引用地址:http://dyxdggzs.com/article/201612/325271.htm硬件設計
AVR主控電路原理圖
軟件設計
//目標系統:基于AVR單片機
//應用軟件: ICC AVR
/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
實(shí)驗內容:
使用中斷檢測AD0口,使用PB/PD口的LED指示AD讀到的數據。
----------------------------------------------------------------------
硬件連接:
將“ADJ0.AD0”引針與“MCU.AD0”引針使用短路帽短接。
將PB/PD口的LED指示燈使能開(kāi)關(guān)切換到"ON"狀態(tài)。
----------------------------------------------------------------------
注意事項:
(1)若有加載庫程序,請將光盤(pán)根目錄下的“庫程序”下的“ICC_H”文件夾拷到D盤(pán)
(2)請詳細閱讀:光盤(pán)根目錄下的“產(chǎn)品資料開(kāi)發(fā)板實(shí)驗板SMK系列SMK1632說(shuō)明資料”
----------------------------------------------------------------------
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轉換值
/*--------------------------------------------------------------------
程序名稱(chēng):AD轉換初始化程序
程序功能:
注意事項:
提示說(shuō)明:
輸入:
返回:
--------------------------------------------------------------------*/
void adc_init()
{
/*設置對應的IO口為輸入高阻態(tài)*/
DDRA &= ADEnStatus[AdcMux];
PORTA &= ADEnStatus[AdcMux];
ADCSRA = 0x00;//disable adc
ADMUX = (1< ACSR = (1< ADCSRA=(1< } /*-------------------------------------------------------------------- 程序名稱(chēng):AD轉換中斷服務(wù)程序 程序功能: 注意事項: 提示說(shuō)明: 輸入: 返回: --------------------------------------------------------------------*/ #pragma interrupt_handler adc_isr:15 void adc_isr(void) { AdcVal = ADC&0x3FF; ADMUX = (1< ADCSRA |= (1< } /*-------------------------------------------------------------------- 程序名稱(chēng): 程序功能: 注意事項: 提示說(shuō)明: 輸入: 返回: --------------------------------------------------------------------*/ 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轉換值,觀(guān)察它的變化
評論