电子系统设计专题实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子系统设计专题实验报告
——AVR单片机基础实验
学院:电信学院
班级:计算机14
学号:**********
*名:**
一、实验目的和要求
本实验课程的主要目的是通过一个新型嵌入式单片机为核心的应用系统设计,掌握微型计算机硬件系统结构基本原理,软件开发编程方法,外围接口电路的组成和应用编程技术,以及电子系统设计的相关技术。通过课程实践训练,能够独立实现一个完整的计算机应用系统设计。
要求基本实验部分学习单片机系统的基本硬件组成原理和软件程序设计方法;综合设计实验要求根据题目需求自行设计系统硬件组成电路,并设计实现完成相应功能的应用程序调试任务。
二、实验设备及开发环境
以AVR ATmega128单片机为核心的实验开发系统。实验开发板采用技术性能优良的AVR ATmega128单片机作为核心器件,还特别设计了USB接口模块、Ethernet网络接口模块,还有MCU对外扩插槽,可为电路扩展模块提供必要的准备。
AVR单片机实验开发系统实验测试环境:
1.软件开发平台: PC机WindowsXP操作系统;
AVR Studio 4.16 集成开发软件;
WinAVR 20080610 C语言编译器;
2.下载编程工具: JTAG ICE mkII在线仿真器;
3.测试目标板: ATmega128实验开发板;
4.测试程序:用C语言编写电路功能测试程序,在WinAVR(GCC)+
AVR Studio编译下通过。
三、实验设计题目及实现的功能
实验一:单片机实验系统开发环境学习
1. 熟悉实验电路的结构原理、元器件名称、作用及相应的接口连接;
2. 学会使用C编译器编辑、编译、调试简单C源程序;
3. 学会使用AVR Studio集成开发软件下载调试并得到正确结果;
4. 熟悉蜂鸣器电路的编程原理
实验程序源代码:
#include
#include
int main(void) // GCC中main文件必须为返回整形值的函数,没有
// 参数
{
PORTE = 0X80; // PORTE输出高电平,使蜂鸣器不响
DDRE = 0X08; // 配置端口PE3为输出口
while(1)
{
PORTE &= ~(1 << PE3); //PE3置“0”,但是这种设置方法不改变PE口其余位
//的状态,平时程序中推荐这种使用方法 _delay_ms(100); // 延时100毫秒
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
PORTE |= (1 << PE3); //使PE3输出高电平,蜂鸣器不响
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
PORTE &= ~(1 << PE3);
_delay_ms(100);
_delay_ms(100);
_delay_ms(50);
PORTE |= (1 << PE3);
_delay_ms(100);
_delay_ms(100);
_delay_ms(50);
PORTE &= ~(1 << PE3);
_delay_ms(100);
_delay_ms(100);
_delay_ms(50);
PORTE |= (1 << PE3);
_delay_ms(100);
_delay_ms(100);
_delay_ms(50);
}
}
实验二:LED指示灯循环显示程序设计实验
1. 熟悉LED指示灯电路原理图;
2. 学会单片机C语言I/O端口编程控制方法;
3. 学会外部显示部件LED灯的软件编程使用方法;
4. 进一步熟悉单片机实验开发系统的使用。
实验程序源代码:
#include
#include
#include "led.h"
void LED_Init()
{
PORTB = PB_MASK;
DDRB = PB_MASK;
PORTC |= _BV(LED_CS);
DDRC |= _BV(LED_CS);
}
int main()
{
int i;
int m;
uint8_t led_sel;
LED_Init();
while(1) {
i = 0;
led_sel = 0x01;
while(i < 3) {
PORTB = ~led_sel;
_delay_ms(800);
if(led_sel == 0x80) {
led_sel = 0x01;
++i;
}
else
led_sel *= 2;
}
i = 0;
led_sel = 0x80;
while(i < 3) {
PORTB = ~led_sel;
_delay_ms(800);
if(led_sel == 0x01) {
led_sel = 0x80;
++i;
}
else
led_sel /= 2;
}
i = 0;
m = 0;
led_sel = 0xaa;
while(i < 3) {
PORTB = ~led_sel;
_delay_ms(800);
if(m==8){
m=0;
++i;
}
if(led_sel==0x00){
led_sel=0xaa;
}
led_sel /= 2;