AVR单片机系列之-Atmega8A编程入门
扫描二维码
随时随地手机看文章
前言:
最近由于开始设计无刷直流电机电子调速器,参考网上的一些资料,选用了Atmega8A-AU单片机作为主控芯片。
该芯片采用8位结构,最高主频16MHz(内部振荡器则8MHz),可实现2.7V-5.5V供电,单个IO口最大可支持40mA的拉/灌电流,更难能可贵的是,价格十分便宜,我在淘宝上面购买才3块多一片。
之前从未使用过AVR系列的单片机,于是一开始编程也遇到了一些障碍,直至最终编写好第一个程序,整个过程在此记录下来,供以后参考。
一、下载器
首先我在百度上和阿莫论坛里面查询了一下AVR单片机的下载器,然后又在淘宝上面搜索对应的型号,发现目前国内主流的是ISP串口下载器,也就是和51单片机的下载器原理一样。于是乎在淘宝上面花了不到10块钱购买了一个,链接如下:
http://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-5310596272.60.cLIhnZ&id=9726069282
准确的说这只是一个烧录器,不具备在线调试功能,只能把写好的程序烧录进单片机。
二、代码开发环境
一开始我在网上搜索的时候,发现AVR单片机的开发环境琳琅满目,比如ICC-AVR,AVR GCC,IAR For AVR,AVR Studio,Atmel Studio......
按照以往的经验,IAR支持的型号比较多,用的也比较多,于是我先在网上下载了一个IAR For AVR,后来在网上查询相关源代码,发现很少有基于IAR的,另外IAR还需要激活,搞了半天也没搞好,于是乎又卸载了。
后来再查询的时候,发现Atmel公司官方的开发环境Atmel Studio是免费的,而且同时用的人也不少,于是乎我又下载了一个Atmel Studio。安装好后,发现界面非常友好现代,不像IAR那样古老,后来又了解到这个开发环境是基于VisualStudio开发的,因此界面与VisualStudio非常相似,于是好感度一下就上升了。
Atmel Studio开发界面?
进入软件界面后的第一个问题是,如何创建第一个工程:
这个难不倒我,一般就是File->New->New Project,但是问题来了,一开始我建立工程,选择工程类型的时候,发现可供选择的对象和网上的不一样,少了好多,于是乎我又重新在官网上面下载了最新的版本,终于出现了网上所述的选项:
如上图所示,选择GCC C Executable Project即可,然后是选择器件,选择我们的Atmega8A即可。
点击OK后,熟悉的main函数骤然出现在屏幕上,AtmelStudio已经帮你把前期的繁琐工作都做好了,包括头文件的引用,头文件只有一个#include ,所有AVR单片机都引用同一个头文件,其余开发环境会自动处理。
下一步是如何编写中断程序,这个是参考百度文库的《AtmelStudio-6.0简易入门教程(精炼实用)》:
在AS6中,需加载头文件#include ,并且函数名为ISR,不可自定义函数名,格式如下:
ISR( TIMER0_OVF_vect ) {?} TIMER0_OVF_vect 含义同iv_TIMER0_OVF,是T0溢出中断号。不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。
有几个事情需要备注一下:1、中断函数不需要清除中断标志位,这个过程是由硬件实现的。2、中断使能有两个,一个是全局的asm("sei");//开启全局中断,一个是每个中断各自的寄存器使能位。
三、程序的下载
程序下载不是在AtmelStudio里面实现的,因为我们使用的不是Atmel官方的调试器,因此AtmelStudio在开发过程中起到的作用是将C语言或汇编源代码编译链接成bin二进制文件,然后使用第三方下载软件通过网上购买的ISP下载器将二进制文件下载进去。在这里,我使用淘宝上购买的下载器店家推荐的下载软件-progisp1.72 ,这是由智峰工作室开发的。使用了一段时间,发现挺好用的,没发现什么BUG。
这里有一个东西需要备注一下,就是熔丝位的问题,之前用的单片机从未有过熔丝位的概念,在网上搜索了一番,发现所谓熔丝位其实就相当于系统寄存器的功能,熔丝位中存储着系统最关键的设置,比如时钟来源选择,时钟频率选择等等,只不过熔丝位是与程序分开的,不受程序影响,只能由下载器直接对单片机进行读写,还好,progisp1.72可以完美的实现这一功能,并且还有向导模式,免去了查询寄存器手册的麻烦。
好像差不多了吧,就这些,有什么想到再补充。