北科大单片机实验报告.docx

上传人:b****7 文档编号:23579803 上传时间:2023-05-18 格式:DOCX 页数:81 大小:3.04MB
下载 相关 举报
北科大单片机实验报告.docx_第1页
第1页 / 共81页
北科大单片机实验报告.docx_第2页
第2页 / 共81页
北科大单片机实验报告.docx_第3页
第3页 / 共81页
北科大单片机实验报告.docx_第4页
第4页 / 共81页
北科大单片机实验报告.docx_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

北科大单片机实验报告.docx

《北科大单片机实验报告.docx》由会员分享,可在线阅读,更多相关《北科大单片机实验报告.docx(81页珍藏版)》请在冰豆网上搜索。

北科大单片机实验报告.docx

北科大单片机实验报告

 

北京科技大学

《微机原理及应用》实验报告

实验内容:

单片机及应用

班级:

智能12

姓名:

2015年1月5日

 

实验一AVR单片机硬件开发平台

一、实验目的

1.了解ATmega16单片机的组成。

2.认识AVR_StudyV1.1实验板的功能模块。

二、实验内容

1.了解AVR系列单片机。

2.认识AVR_StudyV1.1实验板的组成模块。

三、实验所用仪表及设备

硬件:

PC机一台、AVR_StudyV1.1实验板

四、实验步骤

了解AVR系列单片机

AVR单片机是Atmel公司1997年推出的RISC单片机。

RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。

RISC优先选取使用频率最高的简单指令,避免复杂指令;并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。

由于AVR采用了RISC指令,使AVR系列单片机具备1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。

AVR单片机吸收了DSP双总线的特点,采用Harvard总线结构,因此单片机的程序存储器和数据存储器是分离的,并且可对具有相同地址的程序存储器和数据存储器进行独立的寻址。

AVR单片机具有良好的集成性能。

AVR系列的单片机都具备在线编程接口,其中的Mega系列还具备JTAG仿真和下载功能;都含有片内看门狗电路、片内程序Flash、同步串行接口SPI;多数AVR单片机还内嵌了AD转换器、EEPROM、摸拟比较器、定时计数器等多种功能;AVR片机的I/O接口具有很强的驱动能力,灌电流可直接驱动继电器、LED等器件,从而省去驱动电路,节约系统成本。

AVR单片机还支持Basic、C等高级语言编程。

采用高级语言是单片机开发的发展趋势。

对单片机用高级语言编程可很容易地实现系统移植,更加灵活并加快软件的开发进程。

AVR单片机具有多个系列,包括ATtiny、AT90、ATmega。

每个系列又包括多个产品,它们在功能和存储器容量等方面有很大的不同,但基本结构和原理都类似,而且编程方也相同。

认识AVR_StudyV1.1实验板的组成模块

A区——电源

A区采用AMS1117-5.0低压降三端线性稳压器,输入电压范围为6.5~12V,输出为5V,为整个实验板的其它模块供电。

为方便做实验,将+5V和GND用排针分别引出。

B区——LCD1602

B区为字符型液晶1602接口模块,只需要将1602液晶插到J12孔内,使用杜邦线从J10处将相关接口与单片机端口相连即可。

注意,使用液晶时应将J11短路,为液晶供电。

C区——八段数码管

C区为八段共阴型数码管模块,J1为数码管的八段,高电平点亮。

J2和J3为八个数码管的位选,低电平使能。

D区——LED发光二极管

D区为8个LED发光二极管,采用共阳接法,即低电平点亮。

其中电阻为保护LED的限流电阻。

使用时只需从J7处使用杜邦线引出即可。

E区——按键

按键采用外部上拉电阻,平时J4为高电平,当按键按下时,输出低电平。

其中,电容为滤波电容,滤除按键按下时产生的尖峰毛刺。

F区——DS18B20

DS18B20是DALLAS公司生产的单总线数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

以上特点使DS18B20非常适用于远距离多点温度检测系统。

G区——ADC区

G区通过一个滑动变阻器改变J14输出电压,可通过单片机片内AD进行采集。

H区——E2PROM

AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,采用I2C总线通信,内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。

I区——蜂鸣器

I区为一个无源蜂鸣器。

无源蜂鸣器与有源蜂鸣器相比,没有内部驱动电路,如果直接加直流电压,蜂鸣器不会发声。

它的理想工作信号为方波信号,且随着频率不同发出不同的声调。

大约1K~2K,蜂鸣器最响。

J区——串口

J区位串口通信模块,采用Maxim公司的MAX232实现电平转换,以满足RS232标准电平与PC机标准串口连接。

其中,两个LED为状态指示灯。

ATmega16最小系统

主要包括复位电路、外部晶振、ISP下载接口、ADC外部参考电压。

五、思考题

1.总结ATMega16的特点和性能。

AVR单片机吸收了DSP双总线的特点,采用Harvard总线结构,因此单片机的程序存储器和数据存储器是分离的,并且可对具有相同地址的程序存储器和数据存储器进行独立的寻址。

1)先进的RISC结构,131条指令,大多数指令执行时间为单个时钟周期,32个8位通用工作寄存器;采用CMOS技术,实现高速(50ns)、低功耗(μA)、具有SLEEP(休眠)功能;

2)非易失性程序和数据存储器,16K字节的系统内可编程Flash,擦写寿命:

10,000次真正的同时读写操作,512字节的EEPROM,擦写寿命:

100,000次,1K字节的片内SRAM,可以对锁定位进行编程以实现用户程序的加密,高度保密。

3)工业级产品。

具有大电流10~20mA(输出电流)或40mA(吸电流)的特点,可直接驱动LED、SSR或继电器。

有看门狗定时器(WDT)安全保护,可防止程序走飞,提高产品的抗干扰能力;

4)超功能精简指令,具有32个通用工作寄存器,克服了单一累加器数据处理造成的瓶颈现象;

5)程序写入器件时,可以使用并行方式写入,也可使用串行在线下载(ISP)、在应用下载(IAP)方法下载写入;

6)通用数字I/O口的输入输出特性与PIC的HI/LOW输出及三态高阻抗HI-Z输入类同,同时可设定类同与8051结构内部有上拉电阻的输入端功能,便于作为各种应用特性所需(多功能I/O口),AVR的I/O口是真正的I/O口,能正确反映I/O口的输入/输出的真实情况;

7)许多AVR单片机具有内部的RC振荡器,提供1/2/4/8MHz的工作时钟,使该类单片机无需外加时钟电路元器件即可工作,非常简单和方便;

8)有多个带预分频器的8位和16位功能强大的计数器/定时器(C/T),除了实现普通的定时和计数功能外,还具有输入捕获、产生PWM输出等更多的功能;

2.AVR单片机存储器有哪几种类型?

有何作用?

Flash可编程存储,主要用来存放程序。

SRAM,即随机存储器RAM,SRAM数据存储器是以8位(字节)为一个存储单元,编址方式采用与工作寄存器组、I/O寄存器和SRAM统一寻址的方式。

EEPROM即电可擦除可编程存储器,EEPROM的寿命大于10万次,具有掉电后不丢失数据的特点,并且通过系统程序可以随时修改。

EEPROM数据存储器也是以8位(字节)为一个存储单元,对其的读写操作都以字节为单位。

SRAM存储单片机运行过程中产生的了临时数据;EEPROM视用户的需要而定,EEPROM存储器一般用于存放一些永久或比较固定的系统参数。

3.AVR单片机是如何实现高达1MIPS/MHz的处理能力的?

先进的RISC结构131条指令大多数指令执行时间为单个时钟周期,AVR采用了Harvard结构,具有独立的数据和程序总线。

程序存储器里的指令通过一级流水线运行。

CPU在执行一条指令的同时读取下一条指令。

4.分析A区电容种类和作用。

A区电容分为有极性和无极性电容,分别对电源起稳压和滤波的作用。

六、心得体会

通过本次实验我了解了AVR的单片机的基本情况,学习了AVR的基本特性。

对实验中使用的开发板有了基本的认识,了解了使用的电路板中有哪些外围设备,可以实现什么功能。

为今后的单片机学习打下了基础。

 

实验二AVR单片机软件开发环境

一、实验目的

1.熟悉CodeVisionAVR集成开发环境

2.掌握单片机C语言开发

二、实验内容

1.在CodeVisionAVR软件开发平台下创建一个工程并编译下载。

三、实验所用仪表及设备

硬件:

PC机一台、AVR_StudyV1.1实验板

软件:

CodeVisionAVR集成开发软件、SLISP下载软件

四、实验步骤

使用CodeVisionAVR软件的CodeWizardAVR功能,创建一个简单的工程,编译并下载。

新建项目

(1)打开CodeVisionAVR(版本V2.03.4),打开File->New,选择Project->OK,弹出一个Confirm对话框,选择Yes。

如图2.1所示。

图2.1

(2)在弹出的CodeWizardAVR窗口中进行选择。

在Chip选项卡中:

Chip->ATmega16,Clock->4MHz。

在Port选项卡中:

选择PortA,修改Bit0为Out,OutputValue改为1。

如图2.2所示。

图2.2

(3)在CodeWizardAVR窗口中,File->Generate,SaveandExit,创建新工程。

如图2.3所示。

图2.3

将新生成的源程序(.c),工程文件(.prj),CodeWizardAVR文件(.cwp),保存在一个新建文件夹下。

如图2.4所示新生成的源程序。

图2.4

(4)修改源程序

在源程序在开始处添加#include

在while

(1)处添加四句语句。

如图2.5所示。

图2.5

(5)保存。

编译项目

选择Project->BuildAll(Ctrl+F9),弹出Information窗口,其中Noerrors,Nowarnings表示编译成功。

如果出现错误,根据错误提示修改源程序。

下载程序

由于CodeVisionAVR自带的下载软件CodeProgrammer修改熔丝位不够灵活,我们选用双龙公司的SLISP进行程序下载。

(1)打开SLISP,在通信参数设置及器件选择项目中,按照图2.7进行设置。

图2.7

(2)点击Flash选项,在工程文件夹下找到Exe文件夹,选择xx.hex文件。

在弹出的空闲存贮器填充对话框,点击确定。

(3)编程选项修改。

图2.9

(4)配置熔丝位:

点击编程选项中配置熔丝。

切换到设置设置导航模式,如图2.10所示。

图2.10

选择Int.RCOsc.4MHz;Start-uptime:

6CK+64ms这一项;其余项不要修改。

此时右上角配置位数值变为:

E399FF。

点击确定。

(5)检查实验板J5、J6短路帽是否插上,没有要插上。

将下载器与PC机并口相连,另一端连接实验板ISP接口。

使用杜邦线将D区任意一个LED灯与PA0相连。

检查无误后上电。

(6)点击编程,如图2.11所示为编程成功。

观察LED,发现它在一闪一闪。

图2.11

 

五、思考题

1用CodeWizardAVR创建工程的有什么优点?

CodeWIzardAVR有特定功能的头文件,可以直接调用,不用再去编写一些程序,比如delay.h等。

CodeWizardAVR中的工程向导可以省去很多的初始化的代码,以及程序的框架。

CodeWizardAVR中的中断函数可以提供自动的现场保护和断点回复功能,可以方便的使用中断。

2创建工程的过程中应注意哪些问题?

应注意正确配置各参数,以及目标芯片,防止配置错误,导致程序无法正常工作,甚至损坏电路板。

3AVR熔丝位有哪些作用?

编程时应注意哪些问题?

(特别注意时钟及加密)

熔丝是一个保护知识产权的设计。

烧断熔丝后,片内的程序就不可以被读出来也不能被改写,只能用来运行。

AVR芯片使用熔丝来设定时钟、启动时间、一些功能的使能、BOOT区设定、当然还有最让初学者头疼的保密位,烧录程序时需要设定好熔丝位,不然设不好会锁芯片。

六、实验现象

LED灯一闪一灭,间隔时间为半秒钟

 

七、遇到的问题及解决方法

1、我的电脑是64位,安装codeversion总是失败,于是我安装的AtmelStudio,编程的时候需要设置CPU频率,头文件也与Codeversion不同,比如

具体如下:

2、下载器和烧录软件也与实验室不同:

下载器:

USBASP

烧录器:

八、心得体会

本次实验,我学习了单片机的软件环境。

使用CodeVisionAVR软件的工程创建向导功能,创建了一个简单的工程,编译并下载。

在此过程中的设置是:

Chip->ATmega16,

Clock->4MHz。

按照需要配置各IO端以及定时器等。

编译后,要注意观察Information窗口,观察是否有错误或警告以及它们所在的位置。

下载过程中,一定要保证单片机与PC机连接正确,即串口连接好且单片机上电。

 

实验三I/O口操作实验

一、实验目的

1.掌握ATmega16I/O口操作相关寄存器

2.掌握CodeVisionAVR软件的使用

3.复习C语言,总结单片机C语言的特点

二、实验内容

1.设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。

2.设计一个4种闪烁方式交替循环的彩灯,闪烁方式如图3.1所示:

图3.14种不同控制方式的转换图

三、实验所用仪表及设备

硬件:

PC机一台、AVR_StudyV1.1实验板

软件:

CodeVisionAVR集成开发软件、SLISP下载软件

四、实验步骤

硬件接线图:

根据图3.2所示,使用杜邦线将AVR_StudyV1.1实验板PA口与LED相连。

图3.2

新建工程,实现实验内容1。

根据电路图,LED属于共阳接法,所以PORTA输出低电平时灯点亮。

PORTA初始化:

DDRA=0xFF;//PA口工作为输出方式

PORTA=0xFF;//PA口输出全1,LED全灭

“流水灯”程序控制:

1、PA0=0点亮LED0PORTA=0b11111110=~(1<<0)

2、PA1=0点亮LED1PORTA=0b11111101=~(1<<1)

3、PA2=0点亮LED2PORTA=0b11111011=~(1<<2)

……

7、PA6=0点亮LED6PORTA=0b10111111=~(1<<6)

8、PA7=0点亮LED7PORTA=0b01111111=~(1<<7)

9、PA0=0点亮LED0PORTA=0b11111110=~(1<<0)

……

根据控制流程,总结出:

可以利用移位运算实现“流水灯”的设计。

主函数:

voidmain(void)

{

unsignedcharposition=0;//position为控制位的位置

PORTA=0xFF;//PA口输出全1,LED全灭

DDRA=0xFF;//PA口工作为输出方式

while

(1)

{

PORTA=~(1<

if(++position>=8)position=0;

delay_ms(500);

};

}

新建工程,实现实验内容2。

提示:

在CVAVR中,提供intrand(void)和voidsrand(intseed)函数,产生随机数。

函数包含在头文件stdlib.h中,具体内容查阅CVAVR帮助文档。

其中task1(),task2(),task3(),task4()分别完成框图中要求的功能。

voidtask1(void)

{

unsignedcharposition,i;

position=0;

i=16;

while(i--)

{

PORTA=~(0x80>>position);

if(++position>=8)

position=0;

delay_ms(500);

}

PORTA=0xFF;

}

voidtask2(void)

{

unsignedcharposition,i;

position=0;

i=16;

while(i--)

{

PORTA=~(1<

if(++position>=8)

position=0;

delay_ms(500);

}

PORTA=0xFF;

}

voidtask3(void)

{

bitposition;

unsignedchari;

position=1;

i=16;

while(i--)

{

if(position)

{

PORTA=0b10101010;

}

else

{

PORTA=0b01010101;

}

position=!

position;

delay_ms(500);

}

PORTA=0xFF;

}

voidtask4(void)

{

unsignedchari;

i=16;

while(i--)

{

PORTA=(unsignedchar)rand();

delay_ms(500);

}

PORTA=0xFF;

}

voidmain(void)

{

PORTA=0xFF;

DDRA=0xFF;

while

(1)

{

task1();delay_ms(500);

task2();delay_ms(500);

task3();delay_ms(500);

task4();delay_ms(500);

};

}

下载程序,观察实验现象。

注意熔丝位的配置,选择内部4MHz时钟。

 

五、实验现象

实验内容1

流水灯从左往右依次亮和熄灭

实验内容2

四种状态交替

六、思考题

1、总结AVRI/O口的特点及编程流程。

作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。

这意味着用SBI或CBI指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。

输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。

所有的端口引脚都具有与电压无关的上拉电阻。

用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入)。

数据寄存器PORTx:

当DDRx为1,作为输出引脚时,写入引脚要输出的电平状态,作为输出引脚可输出高低电平。

当DDRx为0作为输入引脚时,可配置上拉电阻.

端口输入引脚PINx:

只读寄存器。

可以用来读取外部电平的变化。

2)当DDRx=1时,I/O口处于输出工作方式,PORTx=1,输出高电平;PORTx=1,输出低电平;

3)当DDRx=0时,I/O口处于输入工作方式,PORTx=1,输入,使能内部上拉电阻,PORTx=0,高阻态。

PINx的值代表端口输入值。

2、复习C语言位运算相关内容。

3、查阅相关资料,总结随机数、伪随机数,并举例说明在实际中的应用。

真随机数是使用物理现象产生的,伪随机数通过一个固定的、可以重复的计算方法产生。

如使用随机数表等方式产生,其中在C语言中,使用的是伪随机数,产生时如果没有进行随机数种子的设置,将会在不同次的运行中产生相同的随机序列。

随机数在一些概率模拟,随机算法,如遗传算法,随机重新开始的爬山法等算法中有很多应用。

4、修改实验内容一,实现从左到右依次先点亮一个发光二极管,再点亮两个,……,八个全部点亮,然后一个一个依次熄灭。

while

(1)

{

//Placeyourcodehere

PORTA=0b11111110;

while(PORTA)

{

delay_ms(500);

PORTA=PORTA<<1;

}

PORTA=0b11111110;

while(PORTA!

=0xFF)

{

PORTA=~(PORTA<<1);

}

};

}

七、遇到的问题及解决方法

在寝室自己电脑上做实验时,LED灯亮和灭切换非常慢,我始终没搞清是怎么回事,于是将源程序中的delay_ms=500,改得很小,这样就切换得快了。

后来发现是因为在使用自己电脑的烧录软件时没有配置熔丝位,

八、心得体会

通过实验实现8个LED逐一循环发光的“流水灯”,以及设计出了一个4种闪烁方式交替循环的彩灯。

在完成了硬件部分的连接工作后,在软件环境下,进行程序的改写。

由于LED属于共阳极接法,所以PORTA输出低电平时灯点亮,“流水”效果由移位运算实现。

实验二,对四种显示方法分别编写相应的子函数代码,并在主函数中一次调用。

下载程序过程中,选择内部4MHz时钟。

本次实验,着重对各端口使用部分的操作练习。

通过实验指导书的讲解,我了解到使用端口使LED灯闪亮的操作原理,并在实验操作中,对实验内容二增加了新的闪烁方式。

空白页

 

实验四数码管显示实验

一、实验目的

(1)掌握ATMega16的I/O输出特性和使用。

(2)了解数码管的内部结构,掌握数码管动态扫描的原理和设计方法。

二、实验内容

(1)单个数码管字符显示,控制一个数码管循环显示显示“0”-“F”16个字符。

(2)综合实验:

设计一个秒表系统。

三、实验所用仪表及设备

硬件:

PC机一台、AVR_StudyV1.1实验板

软件:

CodeVisionAVR集成开发软件、SLISP下载软件

四、实验步骤

新建项目,实现实验内容1。

建立数码管字型字段编码表(共阴数码管):

flashunsignedchar

led_7[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

关键字flash表示将数据存放到Flash中,LED_7数组中的量都是固定值,将它们存放到Flash中不会占用有限的Ram资源。

数码管要显示0,使用下面语句:

PORTA=LED_7[0];

建立新项目,实现实验内容2。

硬件连接图如图4.3所示。

图4.3

数码管的动态显示函数:

voiddisplay(void)//扫描显示函数,执行时间12ms

{

chari;

for(i=0;i<=5;i++)

{

PORTA=led_7[dis_buff[i]];

if(point_on&&(i==2||i==4))PORTA|=0x80;

PORTC=position[i];

delay_ms

(2);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1