IAR中断定义 #pragma vector
来源:互联网 发布:java seversocket 编辑:程序博客网 时间:2024/05/29 19:00
IAR for AVR 学习笔记1--中断定义
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文件?
// Output File
-Ointel-extended,(XDATA)=.eep //产生eeprom文件
-Ointel-extended,(CODE)=.A90 //产生烧写文件
-Ointel-extended,(CODE)=.hex //产生烧写文件
- 中断向量的使用
/////////////////////////////////
#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 空间?
法二:__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的学习心得,希望大家多多支持!)
IAR #pragma vector
在IAR编译器里用关键字来__interrupt来定义一个中断函数。用#pragma vector来提供中断函数的入口地址。
#pragma vector = 0x12 //定时器0溢出中断入口地址
__interrupt void time0(void)
{
;
}
上面的入口地址写成#pragma vector=TIMER0_OVF_vect更直观,每种中断的入口地址在头文件里有描述。函数名称time0可以为任意名称。中断函数会自动保护局部变量,但不会保护全局变量。
1 .内在函数也可以称为本征函数
编译器自己编写的能够直接访问处理器底层特征的函数。在intrinsics.h中有描述完整类型在comp_a90.h里有进一步的简化书写方式
延时函数,以周期为标准
__delay_cycles(unsigned long );
如果处理器频率为1M,延时100us,如下:
__delay_cycles(100 );
当然你也可以对该函数进行修改:
#define CPU_F 1000000
#define delay_us (unsigned long) __delay_cycles((unsigned long )*CPU_F)
#define delay_ms (unsigned long) __delay_cycles((unsigned long )*CPU_F/1000)
2.中断指令
__disable_interrupt( );//插入CLI指令, 也可以用_CLI();也可以SREG_Bit7=0;
__enable_interrupt( );// 插入SEI指令,也可以用_SEI();也可以SREG_Bit7=1;
其实对于状态字的置位和清零只有BSET S 和BCLR S两条指令。像SEI不过是BSET 7;的另一个名字而已。AVR指令中还有很多类似的现象,如:ORI 和 SBR 指令完全一样,号称130多条指令的AVR其实没有那么多指令的。
3.从FLASH空间指定地址读取数据
__extended_load_program_memory(unsigned char __farflash *);
__load_program_memory(unsigned char __flash *);
4.乘法函数
__fracdtional_multiply_signed(signed char, signed char);
__fractional_multiply_signed_with_unsigned(signed char, unsigned char);
__fractional_multiply_unsigned(unsigned char, unsigned char);
//以上为定点小数乘法
__multiply_signed(signed char, signed char);//有符号数乘法
__multiply_signed_with_unsigned(signed char, unsigned char);
//有符号数和无符号数乘法
__multiply_unsigned(unsigned char, unsigned char);//无符号数乘法
5.半字节交换指令
__swap_nibbles(unsigned char);
6.MCU控制指令
__no_operation();//空操作指令
_NOP();
__sleep();//休眠指令
_SLEEP();
__watchdog_reset();//看门狗清零
_WDR();
- IAR中断定义 #pragma vector
- IAR for AVR 学习笔记1--中断定义
- IAR #pragma optimize 指令
- IAR #pragma optimize 指令
- #pragma vector
- #pragma vector
- IAR AVR 中断应用
- IAR的中断程序
- msp430中为什么每次开中断之前都需要写#pragma vector=TIMERA0_VECTOR?
- IAR环境下中断控制
- 中断定义
- Vector::Vector的定义
- IAR编译代码空间定义
- IAR FOR AVR 定时器中断的使用
- IAR For AVR 定时器中断初值计算方法
- IAR环境下中断函数无反应
- IAR环境下中断函数无反应
- IAR STM8工程中断的使用
- arm-linux的gdb移植
- Oracle函数大全——网摘
- Resin学习笔记
- wireshark
- Boost源码剖析开篇
- IAR中断定义 #pragma vector
- ie6里面collapse mode mini 不显示小箭头
- android 集成第三方静态库的编译方法
- SWFUpload详细参数使用说明
- 程序员必知8大排序3大查找
- 更新证书错误Code Sign error: Provisioning profile ‘XXXX'can't be found
- arm的七种运行模式
- iphone开发之SQLite使用详解
- Flex学习笔记(零)