微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机入门系列(27)AVR AD转换中断

AVR单片机入门系列(27)AVR AD转换中断

时间:12-03 来源:互联网 点击:
系统功能

大部分AVR内部带有AD,本节以使用ATMEGA16的内部AD为例,给出AD转换中断程序。

硬件设计

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转换值,观察它的变化

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top