logo

AVR AD转换 中断

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

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


AVR主控电路原理图(点击图片放大,不需要放大镜!

AD转换值低位,LED控制电路原理图(点击图片放大,不需要放大镜!

AD转换值高位,LED控制电路原理图(点击图片放大,不需要放大镜!

软件设计

下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

//目标系统: 基于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 <iom16v.h>
#include "D:\ICC_H\CmmICC.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<<REFS1)|(1<<REFS0)|(AdcMux&0x0F); //select adc input channel
 ACSR = (1<<ACD);   //close analog comparator
 ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
}
/*--------------------------------------------------------------------
程序名称:AD转换中断服务程序
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
 AdcVal = ADC&0x3FF;
 ADMUX = (1<<REFS0)|(AdcMux&0x0F); //使用 AVcc 作为ADC参考电源
 ADCSRA |= (1<<ADSC);    //ADSC: AD start conversion
}
/*--------------------------------------------------------------------
程序名称:
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
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转换值,观察它的变化。


 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

AVR AD转换 中断

——