首先看下在iar 里面 iom16.h里面的中断向量表
/* NB! vectors are specified as byte addresses */
#define RESET_vect (0x00)
#define INT0_vect (0x04)
#define INT1_vect (0x08)
#define TIMER2_COMP_vect (0x0C)
#define TIMER2_OVF_vect (0x10)
#define TIMER1_CAPT_vect (0x14)
#define TIMER1_COMPA_vect (0x18)
#define TIMER1_COMPB_vect (0x1C)
#define TIMER1_OVF_vect (0x20)
#define TIMER0_OVF_vect (0x24)
#define SPI_STC_vect (0x28)
#define USART_RXC_vect (0x2C)
#define USART_UDRE_vect (0x30)
#define USART_TXC_vect (0x34)
#define ADC_vect (0x38)
#define EE_RDY_vect (0x3C)
#define ANA_COMP_vect (0x40)
#define TWI_vect (0x44)
#define INT2_vect (0x48)
#define TIMER0_COMP_vect (0x4C)
#define SPM_RDY_vect (0x50)
然后我是用的atmega16 4mhz晶振
源程序:
#include
char flag=0;
void timer_init() // 中断初始化
{
TCCR1B = 0x04;
TCNT1H = 0xc2;
TCNT1L = 0xf6;
TIMSK_Bit2 = 1; // 定时器中断屏蔽寄存器
SREG_Bit7 = 1; // 总中断
}
# pragma vector = TIMER1_OVF_vect
__interrupt void timer1(void)
{
TCNT1H = 0xc2;
TCNT1L = 0xf6;
flag=1;
}
void main(void)
{
timer_init();
DDRB_Bit1 = 1;
while(1)
{
if(flag==1)
{
PORTB_Bit1 = ~PORTB_Bit1;
flag = 0;
}
}
}
关键字:IAR AVR 定时器中断
引用地址:
IAR FOR AVR 定时器中断的使用
推荐阅读最新更新时间:2024-03-16 15:13
AVR 字库如何存储在程序存储区?
编译器对于flash的常量定义采用关键词const就可以。比如keil,ICC等定义常量采用 const unsigned char data=0;则data的类型为常量存储在flash中。 如下定义: typedef struct typFNT_ASC16 { char Index ; char Msk ; }; const struct typFNT_ASC16 ASC_16 = { 1 ,0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00, 2 ,0x00,0x00,0x08,0x04,
[单片机]
如何使用AVR-GCC API
API 嵌入式编程的代码可以简单地分为两部分,一是与硬件无关的算法部分,对其编程与普通C编程没有区别;二是与硬件相关的寄存器/端口操作部 分。不同的MCU实现方法各有不同。在AVR-GCC里则通过一系列的API来解决。当然,用户也可以定义自己的API。在此简单地介绍目前AVR- GCC里定义的API,以及AVR-GCC的工作过程。 一.存储器API AVR具有三种存储器:FLASH,SRAM和EEPROM。 AVR-GCC将程序代码放在FLASH,数据放在SRAM。 I.程序存储器 如果要将数据(如常量,字符串,等等)放在FLASH里,用 户需要指明数据类型__attribute__((progmem))。为了方便使用,AVR-GC
[单片机]
cc2530裸机编程系列笔记2--定时器Timer1模模式程序 中断方式
上篇专题中描述的是采用查询的方式完成定时器Timer1模模式程序的设计,本篇则介绍采用中断的方式完成定时器Timer1模模式程序的设计。查询的方式,上篇已经介绍过就是在主程序中不断的查询中断标志是否被置位,置位后则进行相应处理。中断的方式则为,当中断产生时,CC2530在硬件的作用下将程序跳转到中断中断服务程序去执行。先贴出中断方式的程序: #include ioCC2530.h #define uint8 unsigned char #define uint16 unsigned int #define BIT(x) (1 x) #define LED1 P1_0 /**********************
[单片机]
AVR单片机的电源设计
AVR单片机最常用的是5V与3.3V两种电压。本线路以开关切换两种电压,并且以双色二极管指示(5V时为绿灯,3.3V时为红灯)。 二极管D1防止用户插错电源极性。D2可以允许用户将电压倒灌入此电路内,不会损坏1117-ADJ。 1117-ADJ的特性为1脚会有50uA的电流输出,1-2脚会有1.25V电压。利用这个特点,可以计算出输出电压: 当SW开关打向左边时,R6上的电流为 1.25/0.33 = 3.78ma 。R8上的电流为1117-ADJ 1脚电流加上R6上的电流,即0.05+3.78=3.83ma. 可以计算得R8上的电压为3.84V。 于是得出VCC=1.25+3.83=5.08V。误差在2
[单片机]
B001-Atmega16-中断(GCC-AVR)-(ques=3)
编译器 :AVR Studio 4.19 + avr-toolchain-installer-3.4.1.1195-win32.win32.x86 芯片型号:ATmega16 芯片主频:8MHz ------------------------------------------------------------------------------------------------------------------------------------- 待解决问题数量 = 3 --------------------------------------------------------------------
[单片机]
基于ATT7022A和AVR单片机的无功补偿控制器设计
以三相电能专用计量芯片ATT7022A和一种高性能低功耗的AVR单片机atmega128为核心,设计一种无功补偿控制器。该控制器能实时测量电网的电流电压值、有功功率、无功功率、功率因数等参数,根据实际情况,准确的控制电容器的投切,能有效的提高线路功率因数、较少损耗,改善电网质量。 在工业和生活用电负载中,阻感负载占有很大的比例。异步电动机、变压器、荧光灯等都是典型的阻感负载。异步电动机和变压器所消耗的无功功率在电力系统所提供的无功功率中占有很高的比例。电力系统中的电抗器和架空线等也消耗一些无功功率。阻感负载必须吸收无功功率才能正常工作,这是由其本身的工作性质决定的。最合理的方法就是在这些感性设备附近及线路适当位置并联电容器
[单片机]
集AVR与ARM于一身 鱼与熊掌之兼得
半导体产业在全球经济危机的推波助澜下已坠入低谷,全球的MCU市场也呈现萎缩的态势。作为引领全球MCU市场发展的中国MCU市场,也进入了缓慢增长的“一位数”阶段。但另一方面,随着市场对绿色、智能消费产品的呼声愈发强烈,以及国家对基建的大力投资,低端MCU已经很难满足需求,向16位/32位升级是这一领域的重要趋势,而32位MCU产品在过去的一年中仍然表现出了的良好增长态势,并有望引领产业反弹。 在中国这个最大的MCU市场中,8位MCU产品充斥市场是不争的事实,那么32位MCU在中国的生存状况又是怎样的? 针对这个话题,EEWORLD采访了爱特梅尔(Atmel)公司企业市场推广副总裁Alf Bogen,让我们听听他
[EEWORLD独家]
IAR+STM8——TIM1定时溢出中断
STM8的TIM1是16位高级控制定时器,作为新手不要急着玩高级功能,先从简单的定时溢出中断开始。那么这个简单的目标就定为LED1亮500ms,灭500ms,循环往复,如此而已。 #i nclude iostm8s207sb.h #define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上 void CLK_init(void) { CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M } void GPIO_init(void) { PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出 PD_CR1 = 0x
[单片机]