历史上的今天
返回首页

历史上的今天

今天是: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();

推荐阅读

史海拾趣

Hantronix公司的发展小趣事

随着全球对环保问题的日益关注,HANBIT Electronics积极响应,将绿色生产纳入公司发展战略。2020年,公司投资建立了绿色生产线,采用环保材料和清洁能源进行生产,实现了生产过程中的节能减排。同时,公司还推出了多款环保型电子产品,满足消费者对绿色、低碳生活的需求。这一举措不仅提升了公司的品牌形象,也为其在可持续发展的道路上赢得了更多机遇。

Apx-Crystal公司的发展小趣事

面对日益激烈的市场竞争,Apx-Crystal公司意识到单凭自身的力量难以保持长期的竞争优势。于是,公司积极寻求与行业内外的合作伙伴进行技术交流和合作研发。通过与知名高校、科研机构以及同行的紧密合作,Apx-Crystal成功开发出了一系列具有创新性和领先性的电子产品,进一步巩固了其在行业内的领先地位。同时,公司还加大了对产业链的整合力度,推动了产业升级和可持续发展。

Alliance Memory公司的发展小趣事

面对日益激烈的市场竞争,Apx-Crystal公司意识到单凭自身的力量难以保持长期的竞争优势。于是,公司积极寻求与行业内外的合作伙伴进行技术交流和合作研发。通过与知名高校、科研机构以及同行的紧密合作,Apx-Crystal成功开发出了一系列具有创新性和领先性的电子产品,进一步巩固了其在行业内的领先地位。同时,公司还加大了对产业链的整合力度,推动了产业升级和可持续发展。

德崧电子(D-SWITCH)公司的发展小趣事

在激烈的市场竞争中,德崧电子始终坚持品质为先的经营理念。公司从原材料采购到生产加工,再到成品检验,每一个环节都严格把控,确保产品质量。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。正是凭借着过硬的产品质量和优质的服务,德崧电子在电子开关行业中树立了良好的品牌形象。

Asia Pacific Microsystems Inc公司的发展小趣事

APM公司由一群热衷于微电子技术的专家在亚太地区创立。初创时期,公司面临着资金紧张、市场竞争激烈以及技术瓶颈等多重挑战。然而,APM凭借其团队对技术的深刻理解和对市场的敏锐洞察,成功开发出一款具有竞争力的微控制器产品,迅速在市场中占据了一席之地。这款产品不仅性能稳定,而且价格适中,满足了当时市场对低成本、高性能微控制器的迫切需求。

Echelon公司的发展小趣事

随着公司业务的不断发展,Echelon开始积极拓展全球市场。公司通过在海外设立分支机构、与当地企业合作等方式,将LonWorks技术和能源管理服务方案推广至全球各地。同时,Echelon还积极参与国际能源管理标准的制定和推广工作,提升了公司在国际市场的知名度和影响力。

问答坊 | AI 解惑

机顶盒芯片解决方案群英荟萃

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 AVS标准于2006年3月正式被批准为国家标准。由于具有较高的编码效率和较低的专利费用,因而在国内市场受到部分运营商的青睐。目前,AVS正在被中国网通在其IPTV试验中使用,该公司计划今年在大连 ...…

查看全部问答>

紧急求助色环电感与绕线电感的区别

紧急求助色环电感与绕线电感的区别:同是150uH的色环电感与绕线电感能不能通用?…

查看全部问答>

鼠标上的旋转编码器的电路连接和编程应用

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 ...…

查看全部问答>

几款单片机小软件

开发单片机的得力助手…

查看全部问答>

单端反激变压器设计软件

单端反激变压器设计软件…

查看全部问答>

在龙芯推广会上作的都江堰操作系统主题演讲

感谢龙芯俱乐部的邀请,让我们能够在一起分享都江堰操作系统技术,附件是演讲材料,更多的信息请到www.djyos.com了解。 …

查看全部问答>

S3C2410 的帧缓冲起始地址寄存器如何设置?

小弟正在做LCD驱动,用的是2410的芯片,可就是搞不懂它内部的3个帧缓冲起始地址寄存器到底是怎么回事? 有哪位做过的朋友能不能简单的讲讲,非常感谢! 就是这三个东西搞不懂: LCDBANK LCDBASEU LCDBASEL…

查看全部问答>

WINCE中存的图,在win32的程序里调不出来??

各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。 到底问题出在哪呢???…

查看全部问答>

关于SDK平台的问题!

我使用EVC 4.0开发程序,默认的是STANDARDSDK. 而当我默认打开程序的时候也是STANDARDSDK, 可是我把D11541SJ的SDK安装好以后,也的确出现了D11541SJ 设备,可是当我切换成D11541SJ的时候,我的EVC就死掉了? 哪为高手遇见过此问题?感激不尽... 我的系统 ...…

查看全部问答>

CORDIC 算法理论与实践

   CORDIC 算法可以在圆周,双曲坐标和线性下的用二维向量旋转后逐渐逼近的方式来计算出某个超越函数的近似值,虽然是近似值,但是如果迭代次数足够,仍然可以得到非常逼近准确结果的值。 下面分开讨论CORDIC 在圆周,双曲坐标和线性下 ...…

查看全部问答>