历史上的今天
今天是:2025年02月22日(星期六)
2020年02月22日 | AVR单片机IAR开发环境搭建和注意事项
2020-02-22 来源:eefocus
简介:1、AVR单片机IAR开发环境搭建
2、IAR使用注意事项
1、AVR单片机IAR开发环境搭建
2、IAR使用注意事项
头文件含义
avr_macros.h里面包含了读写16位寄存器的简化书写,和几个位操作函数
comp_a90.h对大量的内在函数做了简要书写
ina90.h包含"inavr.h""comp_A90.h"文件
intrinsics.h内在函数提供最简单的操作处理器底层特征。休眠,看门狗,FLASH函数。
iomacro.HI/O寄存器定义文件样本。
iom8.h包含I/O等寄存器定义
位操作
在c语言里对位的操作如一般如下:
PORTB|=(1<<2); //置PORTB的第2位=1
PORTB&=~(1<<2); //置PORTB的第2位=0
PORTB^|=(1<<2); //取反PORTB的第2位
While(PORTB&(1<<2)); //判断1
While(!(PORTB&(1<<2))); //判断为0
IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:
PORTB_Bit2=1;//置PORTB的第2位=1
PORTB_Bit2=0;//置PORTB的第2位=0
PORTB_Bit2=~PORTB_Bit2;//取反PORTB的第2位
While(PORTB_Bit2);或者while(PORTB_Bit2==1);//判断1
while(PORTB_Bit2==0);//判断0
PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位传送到PORTC的第4位
位变量定义:
由于iar使用了扩展语言,它对位域的支持变为最小为char类型,我们可以很方便地用来定义位变量。
采用结构体来定义位变量:
struct
{
unsignedcharbit0:1;
unsignedcharbit1:1;
unsignedcharbit2:1;
unsignedcharbit3:1;
unsignedcharbit4:1;
unsignedcharbit5:1;
unsignedcharbit6:1;
unsignedcharbit7:1;
}t;
然后就可以用以下位变量
t.bit0=1;
t.bit0=~t.bit0;
但是采用以上结构体做出来的位变量只可以访问t的位,不能够直接访问变量t,和标准的IAR位操作也不一样,可以采用联合体来定义。
#include union { unsignedchart; struct {unsignedchart_bit0:1, t_bit1:1, t_bit2:1, t_bit3:1, t_bit4:1, t_bit5:1, t_bit6:1, t_bit7:1; }; }; voidmain(void) { t_bit0=1;//访问变量t的位 t_bit0=~t_bit0; PORTB=t;//直接访问变量t } 延时函数 __delay_cycles(unsignedlong); 如果处理器频率为1M,延时100us,如下: __delay_cycles(100); 延时任意时间 #define CPU_F 8000000 #define delay_us(x) __delay_cycles(CPU_F*x/1000000) #define delay_ms(x) __delay_cycles(CPU_F*x/1000) 中断函数: 在IAR编译器里用关键字来__interrupt来定义一个中断函数,用#pragmavector来提供中断函数的入口地址 #pragmavector=0x12 //定时器0溢出中断入口地址 __interruptvoidtime0(void) { ; } 上面的入口地址写成#pragmavector=TIMER0_OVF_vect更直观,每种中断的入口地址在头文件里有描述。 中断指令 __disable_interrupt(); //也可以用_CLI();也可以SREG_Bit7=0; __enable_interrupt(); //也可以用_SEI();也可以SREG_Bit7=1; MCU控制指令 __no_operation(); //空操作指令 _NOP(); __sleep(); //休眠指令 _SLEEP(); __watchdog_reset(); //看门狗清零 _WDR();
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 AVS标准于2006年3月正式被批准为国家标准。由于具有较高的编码效率和较低的专利费用,因而在国内市场受到部分运营商的青睐。目前,AVS正在被中国网通在其IPTV试验中使用,该公司计划今年在大连 ...… 查看全部问答> |
|
unsigned char PreA,PreB; sbit Key_UP=P0^0; sbit Key_DW=P0^1; void KeyWheel() { if(PreA!=Key_UP) { PreA=Key_UP; if((Key_UP==1&&Key_DW==0)||(Key_UP==0&&Key_DW==1)) &n ...… 查看全部问答> |
|
小弟正在做LCD驱动,用的是2410的芯片,可就是搞不懂它内部的3个帧缓冲起始地址寄存器到底是怎么回事? 有哪位做过的朋友能不能简单的讲讲,非常感谢! 就是这三个东西搞不懂: LCDBANK LCDBASEU LCDBASEL… 查看全部问答> |
|
各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。 到底问题出在哪呢???… 查看全部问答> |
|
我使用EVC 4.0开发程序,默认的是STANDARDSDK. 而当我默认打开程序的时候也是STANDARDSDK, 可是我把D11541SJ的SDK安装好以后,也的确出现了D11541SJ 设备,可是当我切换成D11541SJ的时候,我的EVC就死掉了? 哪为高手遇见过此问题?感激不尽... 我的系统 ...… 查看全部问答> |
|
CORDIC 算法可以在圆周,双曲坐标和线性下的用二维向量旋转后逐渐逼近的方式来计算出某个超越函数的近似值,虽然是近似值,但是如果迭代次数足够,仍然可以得到非常逼近准确结果的值。 下面分开讨论CORDIC 在圆周,双曲坐标和线性下 ...… 查看全部问答> |




