一、先来一段朴实的独白吧
写这篇文的时间是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 ; } //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< //i=PIND; //i=i&0X04; //if(i==0X00) //{ PORTA&=0XFE; delayms(1); GICR|=(1< //} } if (flag0!=1) { i=PIND; i=i&0X04; if(i!=0X00) { PORTA|=0X01; } } if (flag1==1) { GICR&=~(1< j=PIND; j=j&0X08; if(j==0x00) { PORTA&=0XFD; delayms(1); GICR|=(1< } } if (flag1!=1) { j=PIND; j=j&0X08; if(j!=0X00) { PORTA|=0X02; } } if (flag2==1) { GICR&=~(1< k=PINB; k=k&0X04; if(k==0X00) { PORTA&=0XFB; delayms(1); GICR|=(1< } } if (flag2!=1) { k=PINB; k=k&0X04; if(k!=0X00) { PORTA|=0X04; } } } } 三、本文供基础参考,想深入还需要花些时间在上面。在东西比较杂的情况下,发散思维帮助融汇贯通。
上一篇:通过采用单片机和指纹识别模块实现电子机械锁的设计
下一篇:ATmega328芯片-“变身”-温度计-,附示例教程
推荐阅读最新更新时间:2024-10-25 10:29
设计资源 培训 开发板 精华推荐
- 使用 PIC16LF171x MCU 系列和 RN4020 蓝牙低功耗模块的计步器演示/可穿戴活动跟踪器开发板
- CAT4237BGEVB:高压 CMOS 恒流 DC-DC 转换器评估板
- LT6656BCS6-1.25、1.25V 2 端子电压基准电流源的典型应用
- 使用 SiGe BFP640 的低成本两级 LNA,适用于 5GHz 至 6GHz、802.11a 应用
- TDA7577LVPD、2 x 75 W 双桥功率放大器的典型应用电路,具有 I2C 完整诊断和“启动-停止”配置文件(6 V 操作)
- 使用 Infineon Technologies AG 的 OM7641SM 的参考设计
- stm32f411
- P3A9606JK-EVB: 2 通道转换器评估板
- OP413ESZ-REEL精密K型热电偶放大器典型应用
- 在电池供电的患者监护应用中为 ECG 前端供电