AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例

发布者:Whisper123最新更新时间:2020-06-20 来源: eefocus关键字:AVR单片机  ATMEGA16  编译软件  ICCAVR 手机看文章 扫描二维码
随时随地手机看文章

一、先来一段朴实的独白吧

写这篇文的时间是2018年3月21日。大学2013毕业,专业是机械,但喜欢电子。篇首声明:哪一行都有鄙视链,就连打个游戏都不例外。如果大神路过这里,请您show your mercy然后walk away就当nothing happened.  当然,大牛都是很低调的,因为他们身心都沉进编程的世界里不能自拨。好了本文就ICCAVR的使用说明作一个入门式的引导,方便新、老网友作一种可供使用的参考。


上大学并不是为了纯读书,而是自我发现、反馈、然后决定的心理成熟过程,好吧这就是我的层次。上学时为了搞懂一个东西,在网上查找所有的有用的信息资料,当然必须免费的,唉不谈。。现在如果需要一些资源直接买买买,省时省力省心。嗯回不去的过去。感谢在知识产权还不严谨的当时网络给了我很多。我想现在终于有些时间了,可以做一些反馈了。同时,希望一切都回归理性。


二、介绍ICCAVR


AVR单片机是ATMEL公司开发的高速8位处理。


低档Tiny系列AVR单片机: 主要有Tiny11/12/13/15/26/28等;


中档AT90S系列AVR 单片机: 主要有AT90S1200/2313/8515/8535等; (正在淘汰或转型到Mega中)


高档ATmega系列AVR单片机: 主要有ATmega8/16/32/64/128( 存储容量为8/16/32/64/128 KB)以及ATmega8515/8535等。


ICCAVR编译软件是ATMEL公司推荐的第三方编译器之一,目前ICCAVR7.22版本在网上可下载使用。

那么如何新建一个工程项目,做好准备工作,然后开始写程序代码呢,下面按步骤一步一步说明:


1 菜单》Project》New,先新建一个工程


2 在弹出的窗口中选择保存在哪个文件夹中,最好单独建个文件存放该工程。然后输入工程文件名,比如test,然后点保存。

3 菜单》File》New,来新建一个存放程序的文件

4 新建了一个窗口,窗口默认名为Untitled-1,点击一个该窗口空白处随便输入几个字符,可以看到保存按钮由灰色变成彩色,点击 菜单》File》Save,在弹出的窗口中选择保存在哪个文件夹中,最好与刚才新建的工程保存在同一个文件夹下。然后输入程序文件名,比如testpro0000.c 此处注意,要以.C结尾,表明是一个C程序文件声明,然后点保存。

5 可以看到默认的文件名Untitled-1被保存成我们输入的testpro0000.c,在界面右边目录树上鼠标右键 选择Add file(s),将此程序文件添加到第一步新建的项目test中去。

6 在弹出的窗口中 找到我们刚才建的程序文件testpro0000.c,点击打开

7 如下图,该.c文件已经在项目的目录下了,准备工作结束

8 接下来说一下重点有用的一个功能:应用生成器,就是下图中像扫把一个的小图标

9 不要犹豫,点它,弹出一个向导窗口,在CPU选项里选择我们用的型号,例如Target CPU,选M16,即ATMEGA16,Xtal speed 即晶振频率,选择你所用的晶振频率,最右边 External interrputs 即外部中断,我选中打开INT0,中断触发方式为Low level,即低电平触发。

10 在Timer0选项里选中Use Timer0 打开定时器T0,旁边Overflow interrupt意思是定时器中断溢出处理函数打开与否,选中(即一个小叉叉表示选中)打开它,因为到时我们要在这个函数里处理一些变量。Desired value 意思是你需要的数值,旁边的Units 是单位表示。比如我要定时4us,就可如下图这么选。下边Prescale select 是预分频,选择8或其它数值,可以看到右侧Actual value 表示能实现的实际精度。此项目中我们就打开INT0和T0,其它的功能先不做示例。点击OK.

11 弹出一个新的未命名Untitled窗口,里面就是我们刚才用生成器生成的程序构架,我在//后做了注释,因为并未保存该文件,所以里面的字体也没有被ICC编译器识别并以彩色颜色表示。那么,我们知道了这些函数是干什么用的,就可以开心的复制-粘贴到我们的程序文件testpro0000.c中去了,有用的信息COPY之后,下图中的Untitled-3窗口使命也就完成了,选择File》close,在弹出的窗口中选择 不保存 即可。然后就可以在testpro0000.c里写代码了、改程序 、新建变量、调试程序了,然后点击红色的编译程序按钮,显示0 errors,0 warnings 即大功告成!

12 程序编译通过以后,在我们第一步建的项目文件夹下,会产生以.hex结尾的文件,这个文件就是编译器生成的机器代码,我们可以用工具将此HEX文件烧录下载到我们的AVR单片机中去,单片机就可以执行代码了。这个软件就是 PROGISP 目前版本1.72在网上可供下载。


当然,我们要先需要一根下载线,连接电脑和AVR单片机。这根线的关键词是 USBASP ,请自行搜索,网上很多卖的,买个带保护的等等。买个次品把主板烧了就不划算了。下载很简单,选择目标CPU为ATMEGA16后,第1步【调入flash】,找到目标hex打开,第2步点【自动】即可。

13 AVR单片机熔丝位设置,在PROGISP软件中点击三个小点的一个按钮,请参见上面PROGISP主界面图中的标注,会弹出一个小窗口,有位配置方式,向导方式,选择向导方式,即可在不了解各种参数的意义下,实现编程熔丝位。请提前做些小功课,不要手抖锁死芯片哦!

14 一个小例子,仅作看看。


//ICC-AVR application builder : 2016/5/24 16:38:13

// Target : M16

// Crystal: 11.059Mhz

 

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar flag0=0,flag1=0,flag2=0;

uchar i,j,k;

void port_init(void)

{

 DDRA  = 0xFF;

 PORTA = 0xF8;

 

}

 

#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)

{

 i=PIND;

 i=i&0X04;

 if(i==0X00)

 {flag0=1;//external interupt on INT0

 PORTA|=0X01;}//&=0XFE

}

 

#pragma interrupt_handler int1_isr:iv_INT1

void int1_isr(void)

{

 j=PIND;

 j=j&0X08;

 if(j==0x00)

 {flag1=1;//external interupt on INT1

 PORTA|=0X02;}//&=0XFD

}

 

#pragma interrupt_handler int2_isr:iv_INT2

void int2_isr(void)

{

 k=PINB;

 k=k&0X04;

 if(k==0X00)

 {flag2=1;//external interupt on INT2

 PORTA|=0X04;}//&0XFB

}

 

void delayms(unsigned int ms) //16MHZ

 {

 unsigned int x,y;

  for(x=0;x    for(y=0;y<2282;y++)

;

 }

 

//call this routine to initialize all peripherals

void init_devices(void)

{

 //stop errant interrupts until set up

 CLI(); //disable all interrupts

 port_init();

 delayms(360);//等待传感器进入稳定状态

 MCUCR = 0x0A;

 GICR  = 0xE0;

 TIMSK = 0x00; //timer interrupt sources

 SEI(); //re-enable interrupts

 //all peripherals are now initialized

}

 

void main( void )

{

 init_devices(); 

 while(1)

 {

   if (flag0==1)

   {

    GICR&=~(1<    delayms(5000);

//i=PIND;

    //i=i&0X04;

     //if(i==0X00)

//{

     PORTA&=0XFE;

delayms(1);

GICR|=(1< flag0=0;

//}

    }

       if (flag0!=1)

       {

       i=PIND;

   i=i&0X04;

   if(i!=0X00)

     {

  PORTA|=0X01;

}

        }

   if (flag1==1)

   {

    GICR&=~(1<    delayms(5000);

j=PIND;

    j=j&0X08;

     if(j==0x00)

{

PORTA&=0XFD;

delayms(1);

GICR|=(1< flag1=0;

}

    }

      if (flag1!=1)

      {

      j=PIND;

  j=j&0X08;

  if(j!=0X00)

    {

  PORTA|=0X02;

  }

      }

   if (flag2==1)

   {

    GICR&=~(1<    delayms(5000);

k=PINB;

    k=k&0X04;

if(k==0X00)

{

PORTA&=0XFB;

delayms(1);

GICR|=(1< flag2=0;

}

    }

       if (flag2!=1)

       {

       k=PINB;

   k=k&0X04;

   if(k!=0X00)

     {

  PORTA|=0X04;

}

        }     

 }

}


三、本文供基础参考,想深入还需要花些时间在上面。在东西比较杂的情况下,发散思维帮助融汇贯通。

关键字:AVR单片机  ATMEGA16  编译软件  ICCAVR 引用地址:AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例

上一篇:通过采用单片机和指纹识别模块实现电子机械锁的设计
下一篇:ATmega328芯片-“变身”-温度计-,附示例教程

推荐阅读最新更新时间:2024-10-25 10:29

AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
一、先来一段朴实的独白吧 写这篇文的时间是2018年3月21日。大学2013毕业,专业是机械,但喜欢电子。篇首声明:哪一行都有鄙视链,就连打个游戏都不例外。如果大神路过这里,请您show your mercy然后walk away就当nothing happened. 当然,大牛都是很低调的,因为他们身心都沉进编程的世界里不能自拨。好了本文就ICCAVR的使用说明作一个入门式的引导,方便新、老网友作一种可供使用的参考。 上大学并不是为了纯读书,而是自我发现、反馈、然后决定的心理成熟过程,好吧这就是我的层次。上学时为了搞懂一个东西,在网上查找所有的有用的信息资料,当然必须免费的,唉不谈。。现在如果需要一些资源直接买买买,省时省力
[单片机]
<font color='red'>AVR单片机</font><font color='red'>ATMEGA16</font><font color='red'>编译</font><font color='red'>软件</font><font color='red'>ICCAVR</font>的使用技巧与应用示例
AVR单片机ICCAVR应用的一些小技巧
1.在汇编里面位造作用SEIPORTA3,把PORTA的第三位置1, 在C里面,可以用&与|表达: PORTA=PORTA|0x08,简写为PORTA|=(0x08); PORTA=PORTB&(0xF7)简写为PORTA&=0xF7 以上是对寄存器的某一位操作,当然也可以同时操作几个位,|0x0F,则低四位置1; 在很多地方,如ATMEL的文档里我们会看到像TCCR1A|=(1 COM1A0);//A比较匹配, 这样的操作,这是怎么回事呢? 首先要知道 , 的意思,这是左移,右移操作,(A 3)是把A的二进制数向左移3位,即乘以2的三次方. COM1A0是TCCR1A的第6位,这是ATMEL给TCCR1A寄存器第6位取的名字,在
[单片机]
AVR单片机定时器T0的基本中断使用ICCAVR
#include iom128v.h void main(void) { TCNT0=0x83; TCCR0=0x07; TIMSK=0x01; SEI(); DDRC=0xff; PORTC=0; OCR0=0X00; while(1); } #pragma interrupt_handler Timer0:iv_TIMER0_OVF void Timer0() { TCNT0=0x83; PORTC=~PORTC; } 得出一个结论:别指望巧合。
[单片机]
嵌入式学习笔记19——AVR单片机之C51向ICCAVR的移植
1.头文件,把reg51.h,reg52.h替换成相应的AVR头文件,如iom16v.h等。 2.对C51中的bit,sbit的数据类型进行处理,因为ICCAVR不支持bit和sbit数据类型,可以用位运算和BIT来处理。分别定义置1和清零的宏,使用BIT需加 #include macros.h 。 3.IO的操作。 4.中断系统,定时器等与单片机结构密切相关的代码,需要重新修改。 5.和延时、定时相关的函数需要进行一些改变,因为AVR的运算速度比51单片机要快得多。 6.其余与CPU体系结构无关的代码,可以直接使用。
[单片机]
ICCAVR编译报错 !E (197): area 'bss' not large enough
!E library (197): area 'bss' not large enough want size 384 lo 910 hi 1119 size 210 错误分析:bss段是编译器存放全局数组和局部静态数组的地方。如果我们在编写程序时声明了过大的数组、或局部静态数组,就有可能看到这个提示。 解决方法:如果某些数组是常量,我们就可以增加const关键字,将其放到空间相对宽裕的FLASH中(例如段码表、字模等)。对于其他情况,就只有简化程序或者外扩SRAM存储器了。
[单片机]
ICCAVR编译出现Cannot find source file X:\XXXX
首先,这是路径的问题。之前你编译的路径被更改,就会出现这种现象。 解决这种情况有一下几种方法,可以借鉴一下。 第一种:(很笨的方法,但是也很有效) 新建一个文件夹,把原来工程里的.C 文件, .h文件等必要的文件复制到新建的文件夹里面。然后重新编译即可。 第二种:(检查编译环境) 重新选择目标芯片,工程- 选项- 目标芯片。 改下牌子型号,编译通过,然后再把牌子型号改过来,问题解决!!! 第三种:(重新编译) rebuild all 即可 不要直接点build按扭
[单片机]
ICCAVR 编译器错误:illegal character `\0243'
!E XXXXX.X(XXXXX): illegal character `\0243' !E XXXXX.X(XXXXX): illegal character `\0273' 错误分析:代码中指定位置出现了中文分号 解决方法:将中文分号换为西文分号
[单片机]
ICCAVR编译器的介绍
ICCAVR是一种符合ANSI标准的C语言来开发MCU程序的一个工具,它具有作用合适、使用方便、技术支持强大等优点。ICCAVR就是ATMEL公司为AT90系列单片机开发我编译工具。 ICCAVR 介  1 ImageCraft 的ICCAVR 介绍   ImageCraft 的ICCAVR 是一种使用符合 ANSI 标准的 C 语言来开发微控制器 MCU程序的一个工具 它有以下几个主要特点:   ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境 IDE 其可在WINDOWS9X/NT 下工作。   源文件全部被组织到工程之中 文件的编辑和工程的构筑也在这个环境中完成 编译错误显示在状态窗口中 并且当你用鼠标单击编译
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved