学习一款单片机都从"都从点亮第一个LED"开始。点亮第一个LED其实就是对一个单片机的IO进行操作。
进行AVR单片机学习时所使用的PROTEUS仿真软件也进行了升级,之前51单片机实验时使用的是PROTEUS7.7,本次进行AVR单片机学习时改用PROTEUS8.6进行仿真实验。PROTEUS8.6相对于PROTEUS7.7对部分芯片进行了扩充,其内部添加了STM32系列单片机,后续会针对STM32制作入门实验。
虽然软件版本更新了,但是软件的使用方法还是一样的。PROTEUS8.6界面打开如图所示,
选择“File”新建工程,然后设置工程文件的位置及文档的参数等,设置好以后就可以绘制原理图。
原理图主要包括复位电路和时钟电路及LED。
通过察看芯片手册,可以知道,ATmega16单片机的时钟源可以有以下几种选择,外部晶体/陶瓷振荡器、外部低频晶振、外部RC振荡器、标定的内部RC振荡器、外部时钟,通过对其熔丝位的设置可以对单片机的时钟源进行选择,在进行仿真的时候可以双击单片机,就会出现如下对话框,
在对话框中可以对单片机的时钟源,时钟频率,启动方式等功能进行设置。在仿真实验中我们选择内部RC 8Mhz即选择单片机内部的RC时钟振荡器,时钟频率为8Mhz。
通过察看芯片手册,可以了解到ATmega16内部具有5个复位源,分别为上电复位、外部复位、看门狗复位、掉电监测复位、Jtag复位。从中可以看到ATmega16的外部复位是低电平复位,所以其复位电路如图所示。当按下按键以后会产生一个低电平复位信号。
接下来介绍一下ATmega16单片机的IO,ATmega16的IO在使用的时候需要设置IO的工作方式,这与之前学习51的单片机不同,51单片机的IO即可以作为输出,同时也可以作为输入,即作输出和输入时无需进行任何操作,但是ATmega16的IO需要对IO的工作方式进行指定,即使用IO之前需要设置相应的寄存器,将IO设置为输入模式或者输出模式。每个端口都有三个 I/O 存储器地址 : 数据寄存器 – PORTx、 数据方向寄存器 – DDRx 和端口输入引脚 – PINx。数据寄存器和数据方向寄存器为读 / 写寄存器,而端口输入引脚为只读寄存器。
在ICCAVR中新建工程,然后新建程序文件,点亮LED程序如下,本次实验使用的是PA0,所以如下两行程序就可以将PA0设置为输出模式同时输出低电平,然后点亮LED.
然后对程序进行编译,运行仿真。
这样第一个LED就被点亮了。点亮LED实验主要就是对单片机的IO进行操作,IO也是单片机最重要的一种外设,所以放在第一位。