动手学AVR单片机七、流水灯实验的电路和程序实现

上传人:飞*** 文档编号:43527205 上传时间:2018-06-06 格式:DOC 页数:10 大小:527.50KB
返回 下载 相关 举报
动手学AVR单片机七、流水灯实验的电路和程序实现_第1页
第1页 / 共10页
动手学AVR单片机七、流水灯实验的电路和程序实现_第2页
第2页 / 共10页
动手学AVR单片机七、流水灯实验的电路和程序实现_第3页
第3页 / 共10页
动手学AVR单片机七、流水灯实验的电路和程序实现_第4页
第4页 / 共10页
动手学AVR单片机七、流水灯实验的电路和程序实现_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《动手学AVR单片机七、流水灯实验的电路和程序实现》由会员分享,可在线阅读,更多相关《动手学AVR单片机七、流水灯实验的电路和程序实现(10页珍藏版)》请在金锄头文库上搜索。

1、动手学动手学 AVR 单片机六、基于单片机六、基于 ATMEGA64 的流水灯实验的流水灯实验动手学动手学 AVR 单片机六、基于单片机六、基于 ATMEGA64 的流水灯实验的流水灯实验作者:佚名 AVR 单片机来源:http:/ 点击数: 1156 更新时间:2009-5-23 动手学 AVR 单片机六、流水灯实验 -基于 ATmega64前面已经了解了 AVR 单片机的一些知识,另外我们也自制了 AVR 单片机的开发工具,现在开始进入实战演练阶段了。在正式开始之前,强烈建议手头准备一份 ATmega64 单片机的数据手册(中文和英文的最好都准备了),这个数据手册可以直接从网上下载。在接下

2、来的学习中,我们主要用到的开发工具是编程器,至于仿真器,可以少用或不用。因为我们开始学习的都是一些比较简单、程序量也不大。当程序中出现问题的时候,我们可以采用在程序可能出现问题的地方增加指示的方法来调试(比较常用的方法是在程序的特定地方点亮或者熄灭 LED 发光二极管,或者在程序中增加串口输出来提示程序的执行结果)。一、编译软件的使用编译软件我们采用 WINAVR,也就是俗称的 GCC。GCC 支持项目开发(就是把项目中所有用到的程序、文件放置在一个文件夹中)。在实际的开发过程中我们可以不必每次都创建新项目,可以直接编写源程序,然后保存为.c 格式的文件后直接编译运行就可以了。安装完 GCC

3、后,我们可以对编译器进行一些小小的设置,这样可以是我们编写出来的程序更加直观和便于查看。1、打开 WINAVR 中的 PN(Programmers NotePad),选择菜单“Tools”下面的“Options”选项,出现如下图所示的对话框2、选择“Style”选项中的“Schemes”,开始设置程序中不同代码的显示颜色,首先设置预编译指令的颜色,如下图(颜色可以根据个人喜好设置)3、然后设置操作符(包括运算符)的颜色,如下图,4、接下来设置数字的颜色,如下图5、这些代码中不同代码设置成不同颜色可以帮助我们更加直观的分析程序,同时也便于我们查找错误,6、设置打印代码时最多打印列数,如下图7、设

4、置新建文件的缺省类型(默认为.c 文件),如下图8、编译快捷键设置,如下图9、经过以上设置以后,GCC 编译环境已经基本符合我们的使用习惯了。二、下面开始我们的第一个实验:流水灯1、在 GCC 中新建文件并保存为 main.c。输入以下程序代码,然后保存为 main.c#include /io 端口寄存器配置文件,必须包含#include /GCC 中的延时函数头文件int main(void) /GCC 中 main 文件必须为返回整形值的函数,没有参数PORTB = 0Xff; /PORTB 输出低电平,使 LED 熄灭 DDRB = 0XFF; /配置端口 PB 全部为输出口while(

5、1)unsigned char Flow_LED,Delay500ms; /定义流水灯循环次数以及延时时间变量for(Flow_LED = 0;Flow_LED /io 端口寄存器配置文件,必须包含 1#include /GCC 中的延时函数头文件 2 int main(void) /GCC 中 main 文件必须为返回整形值的函数,没有参数 3PORTB = 0Xff; /PORTB 输出高电平,使 LED 熄灭 4DDRB = 0XFF; /配置端口 PB 全部为输出口 5while(1) 6unsigned char Flow_LED,Delay500ms; /定义流水灯循环次数以及延时

6、时间变量 7 for(Flow_LED = 0;Flow_LED = 7;Flow_LED+) /流水灯从 0-7 总共循环 8 次 8 PORTB = 0xff /每次循环中点亮一个 LED 9for(Delay500ms = 0;Delay500ms 20;Delay500ms+) /延时 500ms 10_delay_ms(100); /delay.h 中的延时 1ms 函数 11程序讲解:按每行序号进行讲解1、调用 GCC 编译器中的寄存器配置头文件 io.h,这个头文件根据我们在 makefile 文件中设置的单片机型号自动调用相应芯片的 I/O 配置文件,这个文件主要包含了单片机中

7、端口寄存器以及其他所有模块寄存器的地址配置。这样我们就可以在程序中直接使用 PORTB 这样的标识符了;2、调用 GCC 编译器中的延时函数相关头文件,我们在程序中调用的延时函数就包括在这个头文件中;3、主函数,每个 AVR 单片机系统程序都要有一个主函数 main。并且 GCC 中规定主函数必须定义为如下形式:int main(void) ;4、端口输入输出控制,AVR 单片机的 I/O 口可以作为普通的 I/O 口使用,同时他们还有第二甚至第三功能,在今天的实例中,我们只是把他们当做普通的 I/O 口使用,只是控制它来输出高低电平。事实上单片机的 I/O 口无论被当做什么功能,它的本质还是

8、输出高低电平,或者接受并判断输入电平的高低。5、AVR 单片机的 I/O 口是标准的 I/O 口,I/O 接口的功能是负责实现 CPU 通过系统总线把 I/O 电路和 外围设备联系在一起,标准的 I/O 口具有输入、输出、高阻三种状态,AVR 单片机通过 3 个寄存器来控制 I/O 口的状态:输入输出方向寄存器 DDRx(x 表示端口号,例如 DDRA 表示端口 A 的方向寄存器)、输出寄存器 PORTx、输入寄存器 PINx。PORTB = 0Xff; 的含义就是将端口 B 的输出寄存器设置为 0xff,即让端口 B 的 8 个 I/O 口全部输出高电平; DDRB = 0XFF;的含义就是

9、设置端口 B 为输出口。6、 while(1)/程序代码 在单片机程序中,首先在 main 主函数里讲系统中用到的端口,变量等进行初始化,然后让程序进入一个 while(1)死循环中,这样保证程序一直运行,我们知道,程序都是一步一步向下执行的,执行到程序的结尾就会停止,这时即使外界再有什么动作,单片机也不再响应了,加上死循环,那么程序就会一直在这个循环体中运行,如果我们在这个循环体中进行相应操作,程序就会很快检测到并给出响应。7、C 语言程序的局部变量定义8、for 循环,使程序重复执行一段代码9、改变端口 B 的输出状态,达到让 8 个 LED 轮流点亮的目的10、延时循环11、延时一段时间

10、,语句 7-11 涉及到用 C 语言编写 AVR 单片机程序的知识,我们将在下一节详细讲解,三、使用编程器将程序烧录到单片机中AVR 单片机的程序烧录需要经过两个步骤:熔丝位的配置、程序文件的烧写,这方面的内容我们前面已经做过描述,并且在“AVR 单片机开发工具自制”这些讲座里面已经实际演练过了,在此就不再过多描述。需要特别提醒的一点是:烧写熔丝位的时候一定要注意,有些烧写错误会锁死单片机,一个小小的建议是在不熟悉 AVR 单片机熔丝位配置的情况下尽量采用能够单独进行位配置的烧录软件(比如 SLISP,PROGISP),这样能够避免一些错误,还有一点就是,在我们日常的单片机开发中,我们一般都用单片机的内部时钟或者外部晶振,很少使用外部时钟,所以配置熔丝位的时候一般不要选择外部时钟,如果不下心配置了外部时钟,则需要给单片机的晶振接口 1 加上一个外部时钟才能将单片机解锁。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号