单片机实验完整指导书 - 图文

2019-03-09 18:00

第一章 AVR单片机开发工具

1.1 概述

典型单片机应用系统框图

单片机应用系统开发包括硬件(电路)系统开发和软件系统开发,硬件系统的开发一般包括电路原理设计,PCB(印刷电路板)设计制作两个部分,使用Protel等软件实现。由于现在单片机系统的一个未来的发展趋势就是外围电路最简化,最终实现单片系统,某些高档单片机已经集成了很多的外部设备的功能,如AVR单片机集成了ROM、RAM、RC震荡电路、PWM波输出功能、AD转换器功能、模拟比较器功能等,如Atmega64单片机,所以单片机的外围电路变得非常的简单,简单的单片机系统只要一片单片机便足够了,所以对单片机的硬件系统开发,我们在此不在进行详细的讲解。

1.2 单片机软件系统开发流程

开发单片机软件系统,一般来说都要经历以下的过程:

编写代码—〉编译器编译—〉仿真器仿真—〉烧写器烧写/在线下载

对于AVR系列单片机,可以使用汇编编程,也可以使用C语言和BASIC语言开发,我们选择C语言编程开发,Atmel公司和它的合作伙伴提供了一整套开发工具:

C语言编写: ICCAVR (仿真软件: AVR Studio) 下载软件: Progisp

开发流程大致如下(括号中所注为所使用的软件名):

编写指令代码(ICCAVR)编译器编译(ICCAVR)仿真器仿真(AVRStudio)烧写器烧写器件/在线下载(Progisp)反复修改直至符合要求工作不正常上电单片机开始工作 单片机系统开发流程

1.3 编程:C语言编程环境

1.3.1 AVR单片机编译软件ICCAVR简介

(1) ImageCraft 的ICCAVR 介绍

ImageCraft 的ICCAVR 是一种使用符合ANSI 标准的C 语言来开发微控制器MCU 程序的一个工具。它有以下几个主要特点:

ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境IDE,其可在以下系统 WINDOWS9X/NT中应用,源文件全部被组织到工程之中。文件的编辑和工程的构筑也在这个环境中完成,编译错误显示在状态窗口中,并且当你用鼠标单击编译错误时,光标会自动跳转到编辑窗口中引起错误的那一行。

(2) ICCAVR 中的主要文件类型及其扩展名

文件类型是由它们的扩展名决定的。IDE 和编译器可以使用以下几种类型的文件:

.c 扩展名----表示是C 语言源文件

.h 扩展名----表示是C 语言的头文件

.prj 扩展名----工程文件,这个文件保存由IDE 所创建和修改的一个工程的有关信息;

.hex扩展名----INTEL HEX 格式文件,器件目标文件,这个文件可被大多数的编程器所支持,用于下载程序到芯片中去使得单片机上电开始执行。

.cof扩展名----AVRStudio仿真文件格式,在AVRStudio的仿真时使用;

1.3.2 ICCAVR使用方法

打开ICCAVR主界面,在主窗口中选择打开、编辑、查找、视图、工程、RCS、工具、终端、帮助等菜单,进入相应的子菜单:

其中保存、打开、关闭文件等的操作都在打开菜单中。 (1)打开工程或者新建工程。在工程中创建文件:

新建工程

(2)建立源文件:

建立源文件可以用两种方式,一种是自己编写全部代码,另外一种是使用应用程序向导建立初始化代码,而后添加自己的代码,这样可以省去查阅寄存器的麻烦,而且格式比较好。下面介绍第二种方式:点击

(应用程序向导)打开器件初始设置窗口,这里包括CPU设置,I/O端口初始设置,Timer0、Timer1、

Timer2、Timer3设置窗口,UART设置窗口以及同步串行口SPI和模拟比较器设置窗口。

在这里填写11.0592晶振频率 在这里选择M64 在这里修改IO口数据方向和数值

芯片功能初始化设置

(3)向工程中添加文件:

向工程中增添文件

添加完毕

(4)编译工程,生成目标文件:

工程编译设置:

在Project\\Options…中选择器件型号、输出文件类型、保存目录。在显示的主界面中完成程序 编制或者修改,保存所做的工作。

选择器件我们选择ATMega64 库目录 输出文件保存格式选择COF/HEX

ICCAVR软件输出设置

编译:

单击进行仿真。

或者按下图使用菜单执行编译操作。生成的*.hex这种文件可以被PonyProg下载软件识别并通过

少写器或者下载线,在线下载入单片机的程序FLASH ROM中;另外生成的.cof文件可以被AVR Studio打开

[注]:增量编译常常出现奇怪错误,建议每次使用全部重新编译

1.3.3 AVR单片机的C语言编程

AVR单片机的C语法和标准C语言的语法相兼容的。但是单片机的语法中还增加了一些专门针对单片机硬

件的一些关键字,有些还可能针对某些特定种类的单片机有专门的定义,这些定义一般已经在单片机的C编译器中做了相应的定义。像著名的Keil C就集成了几乎是所有的51系列单片机定义,而我们所使用的ICCAVR也是一样集成了AVR单片机的定义。在编译器中选择器件类型实际上就是在做这样的工作,包括定义头文件、库文件、寄存器等等。

下面是简单的ICCAVR C语法的举例:(注释方法和普通的C语言是一样的)

代码及注释 具体解释 #include /* 定义AT90S8515 */ ◎是头文件 void main(void) ◎主函数 {

char c; ◎定义变量

DDRB = 0xFF; /* PortB 输出*/ ◎DDR×表示×IO口的8位方向寄存器,0xFF表示FFH,即8位全

是1时表示8位输出,(反之表示输入)此句可以实现8位IO口PortB全部用于输出

for(;;) /* 死循环*/ ◎单片机特色,无限死循环 {

c = PIND; /* 读Port D */ ◎PIN×是×IO口的8位输入缓冲寄存器,此句可以实现将D口数据

读入存在变量c中

PORTB = c; /* 回写到Port B */ ◎将数据写到B口 } }

访问I/O寄存器:

? 读I/O: temp = PIND;

? 写I/O: PORTC = 0x4F; //转化为十进制数为79 ? I/O 的位设置与清除

?I/O置1,如B口第0位置1,其余不变:

PORTB |= 0x01;

? I/O清0,如D口第3位清零,其余不变:

PORTD &= ~(0x08);或者PORTD &=0xF7; ? I/O取反,如C口第6、7位取反,其余不变:

PORTC =PORTC^0xC0; //(^异或运算符)

计数或者循环:

int count= 5; do{

}while(--count);

延时:

void delay(int time) { }

unsigned int i,j; for(i=0;i

for(j=0;j<10000;j++);

带参数的函数调用

? 使用参数将数据传递到函数中去

char add(char number1, char number2) {

return number1+number2;}

循环

? 死循环

for(; ;){ } 或者 while(1){} ? 循环N次

char counter = N; do{

} while(--counter) ;

1.3.4 使用ICCAVR编程时常遇到的错误解析

1. 在编译器中输入代码时,注意输入法问题,不能使用中文输入法编写字母和符号,例如:


单片机实验完整指导书 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:追寻幸福与伦理视角网络课答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: