在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 10613|回复: 15

IAR for AVR 学习笔记1--中断定义

[复制链接]
发表于 2007-12-20 13:25:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在AVR编程一直是C,从ICC->GCC->IAR IAR是一个唯一自己选择的.ICC由于入门容易所以选择了开始,GCC因为不要钱,所以后来就用了它.随着对GCC的不断认识,缺点不断显露,开始对IAR产生了兴趣.
    IAR在51,AVR,ARM的C上都是非常优秀的,它针对不同的单片机都有不同的C版本.唯一一点遗憾的是IAR的价格是个人和小公司难以承受的.当然网上有很多破解,现在的最新版4.20A也有了破解.
    IAR FOR AVR相关信息:
  • 网站:www.iar.com
  • 4.20A下载地址:http://www.mcu123.com/down/view.asp?id=57
  • 破解方法:ID号注意一定要大写,不然注册将会失败 ,另外并不是每个号都是能用的了,要多试几次.如果注册成功后,编译就会通过.不然就报"没有可的证书"错误.
注意点:
  • 如何输出HEX文件?
在配置文件后面加入以下代码,便可输出HEX文件,A90文件与HEX文件一样,SLISP都能识别.
// Output File  
-Ointel-extended,(XDATA)=.eep  //产生eeprom文件  
-Ointel-extended,(CODE)=.A90   //产生烧写文件  
-Ointel-extended,(CODE)=.hex   //产生烧写文件
  • 中断向量的使用
IAR中定义中断函数的格式是
/////////////////////////////////
#pragma vector=中断[url=]向量[/url]
__interrupt void 中断服务程序(void)
{
//中断处理程序
}
/////////////////////////////////////
中断的初始化要另外加入代码,可在[url=]主程序[/url]内加入。如下是各个中断函数的定义。
//中断定义  
#include <iom16.h>
  • #pragma vector=INT0_vect
    __interrupt void INT0_Server(void)
    {
    }
    #pragma vector=INT1_vect
    __interrupt void INT1_Server(void)
    {
    }
    #pragma vector=TIMER2_COMP_vect
    __interrupt void TIMER2_COMP_Server(void)
    {
    }
    #pragma vector=TIMER2_OVF_vect
    __interrupt void TIMER2_OVF_Server(void)
    {
    }
    #pragma vector=TIMER1_CAPT_vect  
    __interrupt void TIMER1_CAPT_Server(void)
    {
    }
    #pragma vector=TIMER1_COMPA_vect
    __interrupt void TIMER1_COMPA_Server(void)
    {
    }
    #pragma vector=TIMER1_COMPB_vect
    __interrupt void TIMER1_COMPB_Server(void)
    {
    }
    #pragma vector=TIMER1_OVF_vect
    __interrupt   void TIMER1_OVF_Server(void)
    {
    }
    #pragma vector=TIMER0_OVF_vect
    __interrupt   void TIMER0_OVF_Server(void)
    {
    }
    #pragma vector=SPI_STC_vect
    __interrupt   void SPI_STC_Server(void)
    {
    }
    #pragma vector=USART_RXC_vect
    __interrupt   void USART_RXC_Server(void)
    {
    }
    #pragma vector=USART_UDRE_vect
    __interrupt   void USART_UDRE_Server(void)
    {
    }
    #pragma vector=USART_TXC_vect
    __interrupt   void USART_TXC_Server(void)
    {
    }
    #pragma vector=ADC_vect
    __interrupt void ADC_Server(void)
    {
    }
    #pragma vector=EE_RDY_vect
    __interrupt void EE_RDY_Server(void)
    {
    }
    #pragma vector=ANA_COMP_vect
    __interrupt void ANA_COMP_Server(void)
    {
    }
    #pragma vector=TWI_vect
    __interrupt void TWI_Server(void)
    {
    }
    #pragma vector=INT2_vect
    __interrupt void INT2_Server(void)
    {
    }
    #pragma vector=TIMER0_COMP_vect
    __interrupt void TIMER0_COMP_Server(void)
    {
    }
    #pragma vector=SPM_RDY_vect
    __interrupt void SPM_RDY_Server(void)
    {
    }
  • 如何把常数字符串定义在flash 空间?
法一:unsigned char __flash temptab[] = {1,2,3,4,5};  
法二:__flash unsigned char temptab[] = {1,2,3,4,5};
法三:#pragma type_attribute=__flash  
      unsigned char temptab[]={1,2,3,4,5};
法四:const unsigned char temptab[]={1,2,3,4,5};  
注:第三种方式用#pragma说明后,下面的定义的变量将都在FLASH空间了,用于定义一批FLASH变量,但实际上一般只能作为[url=]常量[/url]使用了.
(本人将陆续推出关于IAR for AVR的学习心得,希望大家多多支持!)
发表于 2008-3-2 19:30:45 | 显示全部楼层
第一下棋
发表于 2009-3-11 21:10:38 | 显示全部楼层

希望楼主继续推出学习心得

希望楼主继续推出学习心得
发表于 2009-3-12 12:17:14 | 显示全部楼层
thanks, it is verry detail teach,continue.........
发表于 2009-3-12 14:45:17 | 显示全部楼层
谢谢楼主!谢谢啊!
发表于 2009-5-5 12:13:32 | 显示全部楼层
Thank you very much!!!!
发表于 2010-3-7 11:17:15 | 显示全部楼层
希望楼主继续
发表于 2010-3-7 17:35:35 | 显示全部楼层
有没有这个软件呀
发表于 2010-3-7 23:11:01 | 显示全部楼层
非常谢谢
发表于 2010-4-9 10:52:57 | 显示全部楼层
xiexie
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-28 09:10 , Processed in 0.021714 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表