系统功能
大部分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转换 中断
推荐阅读最新更新时间: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的④
[单片机]
基于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为
[单片机]