AVR AD转换 中断

发布者:JoyfulSpirit最新更新时间:2020-06-30 来源: eefocus关键字: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

#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<ADSC)|(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转换值,观察它的变化。

关键字:AVR  AD转换  中断 引用地址:AVR AD转换 中断

上一篇:AVR 硬件操作库函数
下一篇:AVR USART(UART)接收中断程序

推荐阅读最新更新时间:2024-11-06 11:55

C51单片机的中断体系结构
80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。MCS-51系列单片机中断系统的机构如下: 与中断系统相关的特殊寄存器: 1)中断允许控制寄存器(IE)------ 控制各中断的开放和屏蔽 2)中断优先级控制寄存器(IP)------设置各中断的优先级 3)定时器/计数器控制寄存器(TCON)----定时器和外部中断的控制 4)串行口控制寄存器(SCON)------串行中断的控制 中断类型分为三类: 1)T0、T1是2个定时器/计数器中断,由片内定时器提供; 2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供; 3)RX、TX为串行口中断所用,由片内串口提供。
[单片机]
S3C内部中断和外部中断
1.中断分两大类:内部中断和外部中断。 2.外部中断。24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体参考datesheet数据手册。 寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。 EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。 EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。为什么没有EINT0-EINT3,呵呵,看
[单片机]
自制AVR单片机ISP下载线
单片机编程器的作用是将调试好的程序烧写到单片机的存储器中。本文介绍的AVR单片机ISP下载线的成本只有10元左右,非常适合初学者自制。 AVR单片机的程序可以使用串行在线编程(ISP)方式下载写入,即可直接在电路板上进行程序的烧写和修改,所需的装置就是一根ISP下载线。 本文介绍的ISP下载线使用计算机的并口对单片机编程.不仅支持AVR单片机,也支持对51单片机中AT89S系列单片机的编程。 一、下载线电路 下载线的电路见图1。该下载线是STK200/300型的下载线。74HC244是8缓冲器电路,用来作计算机并口和单片机的缓冲隔离。图1中的LPT连接到计算机的并口,作计算机上的下载软件和单片机进行通信的接口。LPT的④
[单片机]
自制<font color='red'>AVR</font>单片机ISP下载线
基于AVR的8色带位图采集串口(实验)
#include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=(1 b) #define get_bit(a,b) a&(1 b) uchar TXEND; uchar send_tab0_pc=0;//发送TAB0数据标志位 uchar send_tab1_pc=0;//发送tab1数据标志位 uchar i,j; uchar TAB0 ; uchar TAB1 ; unsigned long v;//一帧的数据量 #pragma i
[单片机]
利用中断结构,编制一个脉冲计数8051单片机程序
在8051单片机的INTO引脚外接脉冲信号,要求每送来一个脉冲,把30H单元值加1,若30H单元记满则进位31H单元。试利用 中断 结构,编制一个脉冲计数程序。 解: ORG 0000H AJMP MAIN ORG 0003H AJMP SUBG MAIN:MOV A,#OOH MOV 30H,A MOV 31H,A MOV SP,#70H SETB INT0 SETB EA SETB EX0 AJMP $ ORG 0200H SUBG:PUSH ACC INC 30H MOV A,30H JNZ BACK INC
[单片机]
编程点滴:AVR UART I/O 功能模块
本程序实现AVR设备UART端口 输入/回显/格式化输出 功能,由此可以通过PC机终端软件与设备直接交互。 程序有参考Samsung S3C2440库文件。 程序组成:测试程序 main.c ,功能模块 uart.c 及其头文件 uart.h 。 main.c /* ****************************************************** * File Name: main.c * Function: AVR UART I/O 功能模块 * Description: 实现UART输入/回显/格式化输出功能, 方便程序调试 * Authon & Date: Joshua Chan, 2
[单片机]
通过IO端口读取外部数据,带中断
基于FL2440开发板,内核版本2.6.28 主机平台:Ubuntu 11.04 内核版本2.6.39 驱动代码 #include linux/kernel.h #include linux/init.h #include linux/module.h #include linux/fs.h #include linux/types.h #include linux/interrupt.h /*设置中断方式*/ #include linux/wait.h #include linux/irq.h #include asm/uaccess.h #include mach/r
[单片机]
外部中断0/1
外部中断0或1,实质是一样的,仅改变EX、IT为0或为1。 Q;那么问题来了:为什么要有两个极相似的外部中断0或1呢? A:当外部有两个中断时,如果只有一个外部中断, 那么一个中断处理外面的两个中断时,其CPU处理就不够精确了, 所以得开通多一个处理外部中断的通道。 Q:当有三个外部中断的时候呢? A;这就是单片机的局限。哈哈~~不过飞控有很多中断 #include reg52.h /* *外部中断0 */ sbit LED = P2^0;//位声明 //寄存器初始化函数 void kinson() { EX0 = 1;//外部中断0开关 EA = 1;//中断总开关 IT0 = 1;//外部中断0出发方式:0为
[单片机]
外部<font color='red'>中断</font>0/1
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved