嵌入式系统课程设计报告 精品.docx

上传人:b****3 文档编号:5056718 上传时间:2022-12-12 格式:DOCX 页数:20 大小:101.31KB
下载 相关 举报
嵌入式系统课程设计报告 精品.docx_第1页
第1页 / 共20页
嵌入式系统课程设计报告 精品.docx_第2页
第2页 / 共20页
嵌入式系统课程设计报告 精品.docx_第3页
第3页 / 共20页
嵌入式系统课程设计报告 精品.docx_第4页
第4页 / 共20页
嵌入式系统课程设计报告 精品.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

嵌入式系统课程设计报告 精品.docx

《嵌入式系统课程设计报告 精品.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计报告 精品.docx(20页珍藏版)》请在冰豆网上搜索。

嵌入式系统课程设计报告 精品.docx

嵌入式系统课程设计报告精品

嵌入式系统

实验设计报告

实验一LED灯显示实验

一.实验目的

1.熟悉arm开发板基本组成电路,并通过配套教材熟悉arm芯片特性。

了解ADS1.2软件使用,并会用该软件编译调试开发板。

2.了解H—JTAG软件原理,利用教材中提供的LED测试程序,完成实验。

二.实验器材

PC机一台,周立功开发板一块。

注意:

对LPC2103管脚的寄存器进行配置时,应该对照芯片说明手册,按照索引,找到相关寄存器,对其进行配置。

三.实验原理

EasyARM2103开发板提供了4个绿色发光二极管用作显示,电路如图1.1所示。

显示电路采用了灌电流的方式来驱动发光二极管,由于微控制器LPC2103I/O口提供的灌电流大于其拉电流,采用此驱动方式可以保证二极管发光的亮度。

图1.1LED电路原理

四.实验内容及步骤

1.下面以GPIO的测试程序为例,熟悉EasyJTAG-H软件的使用方法,程序功能设计为控制单路LED闪烁,硬件电路如图1.1所示。

2.打开示例工程。

示例工程路径:

配套光盘内容->光盘内容v1.00->3.EasyARM2103安装手册->GPIOTest,将此文件夹复制到其它目录下打开,要求存放目录必须无中文路径。

打开文件夹后,建议用户先删掉“GPIO_Test_Data”文件夹,然后双击打开“GPIOTest.mcp”文件,即打开示例工程。

3.点击“user”文件夹,打开main.c文件,见到示例代码。

4.选择低速GPIO,控制LED灯闪烁,示例程序如程序清单所示。

此示例操作需要短接JP4的P0.17,输出控制LED1。

5.编译连接工程。

项目目标栏处选择DebugInFlash模式,然后编译连接工程。

6.仿真调试。

将计算机并口与EasyJTAG-H仿真器相连,然后再将EasyJTAG-H仿真器的JTAG接口连接到EasyARM2103目标板上,打开H-JTAG,检测到芯片内核信息后,选择AutoDownload选项,此时会自动启动H-Flasher软件,选择目标芯片的型号,将当前的配置信息保存起来,建议将配置信息保存到安装路径下的Hconfig文件夹内。

7.设置完成后,关闭H-JTAGServer和H-Flasher(注意:

不能使用Exit项关闭)。

启动AXD,打开【Options】->【ConfigureTarget...】,弹出ChooseTarget窗口,点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如D:

\ProgramFiles\H-JTAG目录下的H-JTAG.dll,点击“打开”即可。

8.在AXD环境点击运行,即可看到led亮。

附加:

编写程序实现四个LED灯循环闪烁的功能。

五.实验程序及结果

1.一个led灯亮的源代码如下:

#include"config.h"

#defineLED11<<17/*P0.17控制LED1*/

/************************************************************

**Functionname:

DelayNS

**Descriptions:

延时函数

**inputparameters:

uiDly值越大,延时时间越长

**outputparameters:

**Returnedvalue:

************************************************************/

voidDelayNS(uint32uiDly)

{uint32i;

for(;uiDly>0;uiDly--){

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

}

}

/************************************************************

**Functionname:

main

**Descriptions:

跳线JP4短接,LED1闪烁

**inputparameters:

**outputparameters:

**Returnedvalue:

************************************************************/

intmain(void)

{PINSEL1=PINSEL1&(~(0x03<<2));/*将P0.17设置为GPIO*/

IO0DIR=LED1;/*设置LED控制口为输出*/

IO0SET=LED1;/*LED1熄灭*/

while

(1){

IO0SET=LED1;/*LED1熄灭*/

DelayNS(50);/*延时*/

IO0CLR=LED1;/*LED1点亮*/

DelayNS(50);/*延时*/

}

return0;

}

/********************EndOfFile*********************/

运行程序后,可以看到第一个LED灯亮。

2.四个LED灯循环闪烁的源代码如下:

#include"config.h"

#defineLED11<<17/*P0.17控制LED1*/

#defineLED21<<18/*P0.18控制LED2*/

#defineLED31<<19/*P0.19控制LED3*/

#defineLED41<<20/*P0.20控制LED4*/

voidDelayNS(uint32uiDly)

{uint32i;

for(;uiDly>0;uiDly--){for(i=0;i<50000;i++);}

}

intmain(void)

{PINSEL1=PINSEL1&(~(0x03<<2));/*将P0.17设置为GPIO*/

PINSEL1=PINSEL1&0x0FFFFFFE7;/*将P0.18设置为GPIO*/

PINSEL1=PINSEL1&0x0FFFFFF9F;/*将P0.19设置为GPIO*/

PINSEL1=PINSEL1&0x0FFFFFE7F;/*将P0.20设置为GPIO*/

while

(1){

IO0DIR=LED1;

IO0SET=LED1;/*LED1熄灭*/

DelayNS(50);/*延时*/

IO0CLR=LED1;/*LED1点亮*/

DelayNS(50);

IO0DIR=LED2;/*LED2熄灭、延时、点亮、延时*/

IO0SET=LED2;

DelayNS(50);

IO0CLR=LED2;

DelayNS(50);

IO0DIR=LED3;/*LED3熄灭、延时、点亮、延时*/

IO0SET=LED3;

DelayNS(50);

IO0CLR=LED3;

DelayNS(50);

IO0DIR=LED4;/*LED4熄灭、延时、点亮、延时*/

IO0SET=LED4;

DelayNS(50);

IO0CLR=LED4;

DelayNS(50);

}

return0;

}

/**************EndOfFile***************/

运行程序后,可看到四个LED一个接一个的亮,实现了跑马灯的功能。

 

实验二中断实验

一.实验目的

1.熟悉arm开发板中断原理。

并产生中断。

2.了解快速中断和普通中断。

编写嵌套中断实验。

二.实验器材

PC机一台,周立功开发板一块

三.实验原理

同实验一

四.实验内容及步骤

参照实验一中步骤1-8。

附加:

1.编写程序实现三个按钮分别控制三个LED灯亮灭的功能。

2.自行编写一段实现中断嵌套的程序,阐明嵌套过程。

五.实验程序及结果

1.一个按钮控制一个LED灯亮灭的源代码

#include"config.h"

#defineLED1<<17

/***************************************************************

**Functionname:

Eint0IRQ

**Descriptions:

外部中断0服务程序

**inputparameters:

**ouputparameters:

**Returnedvalue:

***************************************************************/

void__irqEint0IRQ(void)/*进入中断取反LED*/

{if((IO0PIN&(1<<17))==0){

IO0SET=1<<17;/*熄灭发光二极管*/

}

else{

IO0CLR=1<<17;/*点亮发光二极管*/

}

while((IO0PIN&(1<<16))==0);/*等待按键松开*/

EXTINT=0x01;/*清中断标志*/

VICVectAddr=0x00;/*通知VIC中断处理结束*/

}

/***************************************************************

**Functionname:

main

**Descriptions:

P0.16低电平触发外部中断主函数

**inputparameters:

**ouputparameters:

**Returnedvalue:

**************************************************************/

intmain(void)

{

PINSEL1=PINSEL1&(~0x03);

PINSEL1=PINSEL1|0x01;/*设置P0.16为外部中断0管脚*/

INSEL1=PINSEL1&(~(0x03<<2));/*设置P0.17为GPIO功能*/

IO0DIR=LED;/*设置P0.17为输出*/

IO0SET=LED;/*设置输出为高电平*/

IRQEnable();/*IRQ中断使能*/

EXTMODE=0x00;/*设置外部中断为低电平触发*/

EXTPOLAR=0x00;

VICIntSelect=0<<14;/*选择EINT0为IRQ中断*/

VICVecttl0=0x20|14;/*将外部中断0分配给向量中断0*/

VICVectAddr0=(uint32)Eint0IRQ;/*设置中断服务程序地址*/

VICIntEnable=1<<14;/*使能EINT0中断*/

EXTINT=0x01;/*清除EINT0中断标志*/

while

(1);

return0;

}

运行程序后,按下按钮,LED灯亮;再按一次,灯灭;再按一次,灯亮;再按一次,灯灭;如此循环。

2.三个按钮分别控制三个LED灯亮灭的源代码

#include"config.h"

#defineLED11<<17

#defineLED21<<18

#defineLED31<<19

void__irqEint0IRQ(void)/*进入中断取反LED*/

{if((IO0PIN&(1<<17))==0){IO0SET=1<<17;}/*熄灭发光二极管*/

else{IO0CLR=1<<17;}/*点亮发光二极管*/

while((EXTINT&0x01)!

=0){EXTINT=0x01;}/*按键松开清中断标志*/

VICVectAddr=0x00;/*通知VIC中断处理结束*/

}

void__irqEint1IRQ(void)/*进入中断取反LED*/

{if((IO0PIN&(1<<18))==0){IO0SET=1<<18;}/*熄灭发光二极管*/

else{IO0CLR=1<<18;}/*点亮发光二极管*/

while((EXTINT&0x02)!

=0){EXTINT=0x02;}/*按键松开清中断标志*/

VICVectAddr=0x00;/*通知VIC中断处理结束*/

}

void__irqEint2IRQ(void)/*进入中断取反LED*/

{if((IO0PIN&(1<<19))==0){IO0SET=1<<19;}/*熄灭发光二极管*/

else{IO0CLR=1<<19;}/*点亮发光二极管*/

while((EXTINT&0x04)!

=0){EXTINT=0x04;}/*按键松开清中断标志*/

VICVectAddr=0x00;/*通知VIC中断处理结束*/

}

intmain(void)

{PINSEL1=PINSEL1&(~0x03);

PINSEL1=PINSEL1|0x01;/*设置P0.16为外部中断0管脚*/

PINSEL0=PINSEL0&(~(0x03<<30));

PINSEL0=PINSEL0|(0x01<<30);/*设置P0.15为外部中断2管脚*/

PINSEL0=PINSEL0&(~(0x03<<28));

PINSEL0=PINSEL0|(0x01<<28);/*设置P0.14为外部中断1管脚*/

PINSEL1=PINSEL1&(~(0x03<<2));/*设置P0.17为GPIO功能*/

PINSEL1=PINSEL1&(~(0x03<<4));/*设置P0.18为GPIO功能*/

PINSEL1=PINSEL1&(~(0x03<<6));/*设置P0.19为GPIO功能*/

IO0DIR=LED1|LED2|LED3;

IO0SET=LED1|LED2|LED3;

IRQEnable();/*IRQ中断使能*/

EXTMODE=0x00;/*设置外部中断为低电平触发*/

EXTPOLAR=0x00;

VICIntSelect=0x00;/*选择EINT0,EINT1,EINT2为IRQ中断*/

VICVecttl0=0x20|14;/*将外部中断0分配给向量中断0*/

VICVecttl1=0x20|15/*将外部中断1分配给向量中断1*/

VICVecttl2=0x20|16;/*将外部中断2分配给向量中断2*/

VICVectAddr0=(uint32)Eint0IRQ;/*设置中断服务程序地址*/

VICVectAddr0=(uint32)Eint1IRQ;

VICVectAddr2=(uint32)Eint2IRQ;

VICIntEnable=(1<<14)|(1<<15)|(1<<16);/*使能EINT0,EINT1,EINT2中断*/

EXTINT=0x07;/*清除EINT0中断标志*/

while

(1);

return0;

}

/**********************ENDFILE***********************/

运行程序,可以实现三个按钮分别控制三个LED灯亮灭的功能。

 

实验三UART接口实验

一.实验目的

掌握UARTO各控制器的设置,并能使用URTO接收PC机发过来的数据,并将数据送回PC进行显示。

二.实验器材

PC机一台,周立功开发板一块

三.实验内容

1.采用中断方式,通过UART0接收上位机发送的字符串,如“HelloEasyARM2103!

”,然后送回上位机终端EasyARM-C.exe的数据接收窗口进行显示。

2.UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。

3.UART0的通信实验需要短接JP6的P0.0和P0.1引脚

四.实验步骤

软件设置与调试同实验一和二基本一致,但硬件连线方面需注意:

1.将EasyARM2103教学实验开发平台上的JP6跳线短接

2.使用串口延长线把EasyARM2103教学实验开发平台的UART0接口与PC机的1连接。

PC机运行EasyARM软件,设置串口为1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。

 

五.实验源程序及运行结果

/******************************************************************************

#include"config.h"

#defineUART_BPS115200/*串口通信波特率*/

volatileuint8uiGRcvNew;/*串口接收新数据的标志*/

uint8uiGRcvBuf[30]={0};/*串口接收数据缓冲区*/

uint32uiGNum;/*串口接收数据的个数*/

/******************************************************************************

**函数名称:

DelayNS

**函数功能:

延时函数

**入口参数:

uiDly值越大,延时时间越长

**出口参数:

**返回值:

*****************************************************************************************/

voidDelayNS(uint32uiDly)

{

uint32i;

for(;uiDly>0;uiDly--){

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

}

}

/*****************************************************************************************

**函数名称:

UART0_IRQ

**函数功能:

串口中断服务函数

**入口参数:

**出口参数:

**返回值:

*****************************************************************************************/

void__irqUART0_IRQ(void)

{

uiGNum=0;

while((U0IIR&0x01)==0){/*判断是否有中断挂起*/

switch(U0IIR&0x0E){/*判断中断标志*/

case0x04:

/*接收数据中断*/

uiGRcvNew=1;/*置接收新数据标志*/

for(uiGNum=0;uiGNum<8;uiGNum++){/*连续接收8个字节*/

uiGRcvBuf[uiGNum]=U0RBR;

}

break;

case0x0C:

/*字符超时中断*/

uiGRcvNew=1;

while((U0LSR&0x01)==0x01){/*判断数据是否接收完毕*/

uiGRcvBuf[uiGNum]=U0RBR;

uiGNum++;

}

break;

default:

break;

}

}

VICVectAddr=0x00;

}

/*****************************************************************************************

**函数名称:

UARTInit

**函数功能:

串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200

**入口参数:

uiDly值越大,延时时间越长

**出口参数:

**返回值:

*****************************************************************************************/

voidUARTInit(void)

{

uint16uiFdiv;

U0LCR=0x83;/*允许设置波特率*/

uiFdiv=(Fpclk/16)/UART_BPS;/*设置波特率*/

U0DLM=uiFdiv/256;

U0DLL=uiFdiv%256;

U0LCR=0x03;/*锁定波特率*/

}

/*****************************************************************************************

**函数名称:

UART0SendByte

**函数功能:

向串口发送子节数据,并等待数据发送完成,使用查询方式

**入口参数:

uiDat要发送的数据

**出口参数:

**返回值:

*****************************************************************************************/

voidUART0SendByte(uint8uiDat)

{

U0THR=uiDat;/*写入数据*/

while((U0LSR&0x20)==0);/*等待数据发送完毕*/

}

/*************************

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

当前位置:首页 > 法律文书 > 调解书

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

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