1.实验目的
本实验在单片机实验母板(IOT-SCMMB)上使用定时器、LED和串口实现了一个简单的演示程序。该母板以无线传感器网络节点中常用的Atmel公司的ATmega128L芯片为处理器,扩充了多种传感器及外围模块。本实验通过定时器中断交替点亮开发板上黄蓝LED灯,并向串口输出已点亮LED灯的编号(黄色LED编号为0,蓝色LED编号为1)。通过该演示例子,使读者对单片机开发有初步了解,掌握在WinAVR集成开发环境下进行单片机程序的编写和编译的步骤,并能使用AVRStudio软件将程序下载到开发板上。
2.实验设备
(1)硬件
● 单片机实验母板(IOT-SCMMB)1套。
● 传感器及外围模块(IOT-MODULES)1套。
● JTAG编程器1个。
● PC(含串口)1台。
(2)软件
● 串口调试助手。
● WinAVR20050214。
● AVRStudio4.18。
3.实验原理
本实验的演示程序使用了单片机实验母板(IOT-SCMMB)上的基本部件,其主要围绕Atmel公司的ATmaga128芯片构建的开发板,主要功能组成包括了多种传感器、射频及外部接口,开发板的实物照片如图2-1所示。

图2-1 单片机开发板实物照片
本实验的程序使用了该开发板上ATmega128单片机U4的8位定时器0、蓝黄LED以及USB-B口J3。在程序的主函数文件mian.c中,首先设置单片机与LED的连接端口,然后设置串口的参数并对其进行初始化,接下来配置计数器0(采用64分频,将7.3728MHz的晶振频率降为115200Hz),最后打开全局中断,并使程序进入一个循环。相关代码如下:


8位计数器溢出时,会触发溢出中断。在中断处理函数中,对LED灯的状态进行设置,并输出到串口。分频后的115200Hz依然不便于观察,因此引入了一个8位的变量counter,每次计数器溢出时该变量加1。当该变量值为225时改变LED灯的状态。这样通过控制该变量的大小就可以调节LED灯闪烁的周期,即
28/115200Hz×225=0.5s
相关的代码如下:


serialputc()为向串口发送数据的函数,参数i为待发送的数据,其实现代码如下:

4.实验内容
安装WinAVR20050214和AVRStudio4.18软件,学习如何使用这两个软件进行单片机程序的开发、编译和下载。
初步掌握基于开发板的单片机程序设计方法,能够设计简单的程序操作开发板上的各个模块。
5.实验步骤(https://www.xing528.com)
(1)安装WinAVR20050214和AVRStudio4.18
分别单击WinAVR-20050214-install.exe和AvrStudio4Setup.exe图标,按照默认的设置进行安装。
(2)编译演示程序
启动WinAVR20050214编辑环境Programmers Notepad。选择File→New→Project,新建一个工程,并保存在工程文件夹中,工程名称设置为demoexperiment。新建一个C语言源代码文件,即选择File→New→C/C++,然后选择菜单中的Saveas将其保存为一个新的文件demoexperiment.c。用鼠标右键单击左侧窗口中新建的工程demoexperiment,选择Add Files,在AddFiles对话框中选择demoexperiment.c,并单击打开,即可将该文件添加到工程文件中。此时,就可以在demoexperiment.c中编辑程序了。将本实验提供的源代码复制到编辑窗口,然后单击Tools→[WinAVR]MakeAll编译文件。此时会出现如图2-2所示的对话框。
“No rule to make target`all'.Stop.”表示未找到Makefile文件。下面将介绍如何使用WinAVR建立项目工程的Makefile文件。

图2-2 未找到Makefile文件对话框
通常由编译器(泛指高级语言编译器、汇编器、连接器等)、项目管理器和文本编辑器构成一个完整的编程环境。项目管理器负责为每一个源程序文件调用编译器生成目标文件,然后用连接器将它们组合在一起,生成可执行文件。WinAVR使用一个叫做Makefile的文件来管理程序的编译连接,Makefile是个通用脚本文件,可执行文件make.exe负责解析它并根据脚本内容来调用编译器、连接器或其他的工具,最终生成可执行代码文件。每次调用make时它会比较目标文件与源文件的更新时间,如果源文件比目标文件新,它会执行Makefile内的相关指令更新目标文件,如果目标文件与源文件同样新,它就跳开这个源文件的编译,避免重复工作,这对于较大的工程来说,是节省编译时间的有效方法。
WinAVR包中有一种简单的Makefile文件生成工具叫做MFile,利用它就可方便地生成合适的Makefile文件。选择程序→WinAVR→MFile,即可打开MFile。下面对MFile的Makefile菜单下的各个选项进行简单的介绍。
Main file name…菜单项指定主程序文件,它将决定主源程序文件名及输出文件名。选择该选项,在对话框中输入主程序的主文件名,这里使用demoexperiment。注意,文件名中不要包含扩展名,如.c等。
MCU type根据所选择的处理器进行设置,这里选择ATmega128。
Output format菜单项用于选择最终生成的可执行代码格式,根据编程器支持格式选择即可,这里选择ihex。
Optimization level指定C代码的优化级,s代表按最小代码量编译,选择s。
C/C++source file(s)和Assembler source files(s)用于在项目中添加其他C、C++和汇编程序源文件。本实验只有一个文件,因此可以不设置。
通常,设置以上几项就可以了。在编写程序的过程中往往需要在项目中添加源文件,这时只需在生成的Makefile中SRC变量后添加源文件名即可。
当上述选项设置好之后,选择File→SaveAs,将其保存到工程文件夹中。再单击Tools→[WinAVR]MakeAll编译文件,就可以在Output对话框中看到如图2-3所示的结果。
图中的“Process Exit Code:0”表示编译成功。此时在工程文件夹会生成demoexperiment.hex文件。
(3)将编译后得到的.hex文件下载到开发板上
硬件连接:首先,将编程器的JTAG插头插到开发板上的JTAG插口中,并将JTAG插口右侧的白色开关拨到左侧,表示将文件下载到单片机U4上;然后,将编程器通过串口连接到计算机;最后,分别连接编程器和开发板的电源,并打开电源开关。
软件操作:首先选择程序→AtmelAVRTools→AVR Studio4,打开AVR Studio。如果出现开始界面(显示最近使用过的文件或工程以供用户选择),选择Cancel,关闭此界面。之后会进入该软件的主界面,选择Tools→ProgrammeAVR→Connect…或者直接单击界面上的AVR按钮,会弹出一个工作界面,这个界面有8个选项页,分别是Main,Program,Fuses,LockBit,Advanced,HW Settings,HWInfo和Auto,需要用到的是Main和Program,后面的几项保持默认。
在Main选项下首先需要在Device and Signature Bytes的第一个框的下拉列表中选择单片机的型号,节点使用的是ATmega128,需要选中对应的设备。在Program选项下Device框中有两项是可选的,它们是Erase Device Before和Verify Device After Program。如果选中了第一个,在编写程序时会先将ATmega128的128KB的Flash全部擦除,然后再进行程序下载;第二个选项表示在编写程序完成以后进行一些校验和验证的工作,确保编程的数据是无误的。建议将这两个选项都选上。最后在Program选项下的Flash框中选择实验程序的.hex文件,单击Flash框中的Program按钮就可以将该.hex文件下载到ATmega128中。程序下载成功之后可以看到实验开发板上黄蓝灯轮流闪烁,在上位机上打开串口调试助手(波特率设为57600bit/s,以十六进制显示),会输出当前正点亮的LED的编号,如果黄色LED亮则输出0,蓝色LED亮则输出1。

图2-3 使用WinAVR编译实验代码通过结果
6.思考题
1)如何自己写一个Makefile文件?
2)如何将程序下载到EEPROM中?
7.补充阅读
[1]徐勇军,安竹林,等.无线传感器网络实验教程[M].北京:北京理工大学出版社,2007.
[2]ATmega128/LDatasheet.http://www.atmel.com/.Atmel,2010.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
