欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    嵌入式系统课程设计报告.doc

    • 资源ID:2393786       资源大小:152.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统课程设计报告.doc

    嵌入式系统实验设计报告 指导老师 设计者 专业班级 测控0801班 学 号 时 间 2011年6月 实验一 LED灯显示实验一 实验目的1. 熟悉arm开发板基本组成电路,并通过配套教材熟悉arm芯片特性。了解ADS1.2软件使用,并会用该软件编译调试开发板。2. 了解HJTAG软件原理,利用教材中提供的LED测试程序,完成实验。二 实验器材PC机一台,周立功开发板一块。注意:对LPC2103管脚的寄存器进行配置时,应该对照芯片说明手册,按照索引,找到相关寄存器,对其进行配置。三实验原理 EasyARM2103开发板提供了4个绿色发光二极管用作显示,电路如图1.1所示。显示电路采用了灌电流的方式来驱动发光二极管,由于微控制器LPC2103 I/O口提供的灌电流大于其拉电流,采用此驱动方式可以保证二极管发光的亮度。 图1.1 LED电路原理四 实验内容及步骤1. 下面以GPIO的测试程序为例,熟悉EasyJTAG-H软件的使用方法,程序功能设计为控制单路LED闪烁,硬件电路如图1.1所示。 2. 打开示例工程。示例工程路径:配套光盘内容->光盘内容v1.00->3.EasyARM2103安装手册->GPIO Test,将此文件夹复制到其它目录下打开,要求存放目录必须无中文路径。打开文件夹后,建议用户先删掉“GPIO_Test_Data”文件夹,然后双击打开“GPIO Test.mcp”文件,即打开示例工程。3. 点击“user”文件夹,打开main.c文件,见到示例代码。4. 选择低速GPIO,控制LED灯闪烁,示例程序如程序清单所示。此示例操作需要短接JP4的P0.17,输出控制LED1。5. 编译连接工程。项目目标栏处选择DebugInFlash模式,然后编译连接工程。6. 仿真调试 。将计算机并口与Easy JTAG-H仿真器相连,然后再将Easy JTAG-H仿真器的JTAG接口连接到Easy ARM2103目标板上,打开H-JTAG,检测到芯片内核信息后,选择Auto Download选项,此时会自动启动H-Flasher软件,选择目标芯片的型号,将当前的配置信息保存起来,建议将配置信息保存到安装路径下的Hconfig文件夹内。7. 设置完成后,关闭H-JTAG Server和H-Flasher(注意:不能使用Exit项关闭)。启动AXD,打开【Options】->【Configure Target.】,弹出Choose Target窗口,点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如D:Program FilesH-JTAG 目录下的H-JTAG .dll,点击“打开”即可。8. 在AXD环境点击运行,即可看到led亮。附加:编写程序实现四个LED灯循环闪烁的功能。五 实验程序及结果1 一个led灯亮的源代码如下:#include "config.h"# define LED1 1 << 17 /* P0.17控制LED1 */* Function name:DelayNS* Descriptions:延时函数* input parameters: uiDly 值越大,延时时间越长* output parameters: 无* Returned value: 无*/void DelayNS (uint32 uiDly) uint32 i; for (; uiDly > 0; uiDly-) for(i = 0; i < 50000; i+); /* Function name:main* Descriptions:跳线JP4短接,LED1闪烁* input parameters: 无* output parameters: 无* Returned value: 无*/int main (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); /* 延时 */ return 0;/* End Of File */运行程序后,可以看到第一个LED灯亮。2 四个LED灯循环闪烁的源代码如下:#include "config.h"# define LED1 1 << 17 /* P0.17控制LED1 */# define LED2 1 << 18 /* P0.18控制LED2 */# define LED3 1 << 19 /* P0.19控制LED3 */# define LED4 1 << 20 /* P0.20控制LED4 */void DelayNS (uint32 uiDly) uint32 i; for (; uiDly > 0; uiDly-) for(i = 0; i < 50000; i+); int main (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); return 0;/* End Of File */运行程序后,可看到四个LED一个接一个的亮,实现了跑马灯的功能。实验二 中断实验一 实验目的1. 熟悉arm开发板中断原理。并产生中断。2. 了解快速中断和普通中断。编写嵌套中断实验。二 实验器材PC机一台,周立功开发板一块三实验原理同实验一四 实验内容及步骤参照实验一中步骤1-8。 附加:1. 编写程序实现三个按钮分别控制三个LED灯亮灭的功能。2. 自行编写一段实现中断嵌套的程序,阐明嵌套过程。五 实验程序及结果1一个按钮控制一个LED灯亮灭的源代码#include "config.h"#define LED 1 << 17/* Function name: Eint0IRQ* Descriptions: 外部中断0服务程序* input parameters: 无* ouput parameters: 无* Returned value: 无*/void _irq Eint0IRQ(void) /* 进入中断取反LED */ if (IO0PIN & (1 << 17) = 0) IO0SET = 1 << 17; /* 熄灭发光二极管 */ else IO0CLR = 1 << 17; /* 点亮发光二极管 */ while(IO0PIN & (1 << 16) = 0); /* 等待按键松开 */ EXTINT = 0x01; /* 清中断标志 */ VICVectAddr = 0x00; /* 通知VIC中断处理结束*/* Function name: main* Descriptions: P0.16低电平触发外部中断主函数* input parameters: 无* ouput parameters: 无* Returned value: 无*/int main (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中断 */ VICVectCntl0 = 0x20 | 14; /* 将外部中断0分配给向量中断0 */ VICVectAddr0 = (uint32)Eint0IRQ; /* 设置中断服务程序地址 */ VICIntEnable = 1 << 14; /* 使能EINT0中断 */ EXTINT = 0x01; /* 清除EINT0中断标志 */ while(1); return 0;运行程序后,按下按钮,LED灯亮;再按一次,灯灭;再按一次,灯亮;再按一次,灯灭;如此循环。2 三个按钮分别控制三个LED灯亮灭的源代码#include "config.h"#define LED1 1 << 17#define LED2 1 << 18#define LED3 1 << 19void _irq Eint0IRQ(void) /*进入中断取反LED */ if (IO0PIN & (1 << 17) = 0) IO0SET = 1 << 17; /* 熄灭发光二极管*/ else IO0CLR = 1 << 17; /* 点亮发光二极管 */ while(EXTINT & 0x01)!= 0) EXTINT = 0x01; /* 按键松开清中断标志*/ VICVectAddr = 0x00; /*通知VIC中断处理结束*/void _irq Eint1IRQ(void) /*进入中断取反LED */ if (IO0PIN & (1 << 18) = 0) IO0SET = 1 << 18; /* 熄灭发光二极管 */ else IO0CLR = 1 << 18; /* 点亮发光二极管 */ while(EXTINT & 0x02)!= 0) EXTINT = 0x02; /* 按键松开清中断标志*/ VICVectAddr = 0x00; /*通知VIC中断处理结束*/void _irq Eint2IRQ(void) /*进入中断取反LED */ if (IO0PIN & (1 << 19) = 0) IO0SET = 1 << 19; /*熄灭发光二极管 */ else IO0CLR = 1 << 19; /* 点亮发光二极管 */ while(EXTINT & 0x04)!= 0) EXTINT = 0x04; /*按键松开清中断标志*/ VICVectAddr = 0x00; /*通知VIC中断处理结束*/int main (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中断 */ VICVectCntl0 = 0x20 | 14; /* 将外部中断0分配给向量中断0 */ VICVectCntl1 = 0x20 | 15 /* 将外部中断1分配给向量中断1 */ VICVectCntl2 = 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); return 0;/* END FILE */运行程序,可以实现三个按钮分别控制三个LED灯亮灭的功能。实验三 UART接口实验一 实验目的掌握UARTO各控制器的设置,并能使用URTO接收PC机发过来的数据,并将数据送回PC进行显示。二 实验器材PC机一台,周立功开发板一块三 实验内容1.采用中断方式,通过UART0接收上位机发送的字符串,如“Hello EasyARM2103!”,然后送回上位机终端EasyARM-C.exe的数据接收窗口进行显示。2.UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。3.UART0的通信实验需要短接JP6的P0.0和P0.1引脚四 实验步骤软件设置与调试同实验一和二基本一致,但硬件连线方面需注意:1.将EasyARM2103教学实验开发平台上的JP6跳线短接2. 使用串口延长线把EasyARM2103教学实验开发平台的UART0接口与PC机的COM1连接。PC机运行EasyARM软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。五 实验源程序及运行结果/*#include "config.h"# define UART_BPS 115200 /* 串口通信波特率 */volatile uint8 uiGRcvNew; /* 串口接收新数据的标志 */uint8 uiGRcvBuf30 = 0; /* 串口接收数据缓冲区 */uint32 uiGNum; /* 串口接收数据的个数 */* 函数名称:DelayNS* 函数功能:延时函数* 入口参数: uiDly 值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void DelayNS (uint32 uiDly) uint32 i; for (; uiDly > 0; uiDly-) for(i = 0; i < 50000; i+); /* 函数名称: UART0_IRQ* 函数功能: 串口中断服务函数* 入口参数: 无* 出口参数: 无* 返回值: 无*/void _irq UART0_IRQ (void) uiGNum = 0; while (U0IIR & 0x01) = 0) /* 判断是否有中断挂起 */ switch (U0IIR & 0x0E) /* 判断中断标志 */ case 0x04: /* 接收数据中断 */ uiGRcvNew = 1; /* 置接收新数据标志 */ for (uiGNum = 0; uiGNum < 8; uiGNum+) /* 连续接收8个字节 */ uiGRcvBufuiGNum = U0RBR; break; case 0x0C: /* 字符超时中断 */ uiGRcvNew = 1; while (U0LSR & 0x01) = 0x01) /* 判断数据是否接收完毕 */ uiGRcvBufuiGNum = U0RBR; uiGNum+; break; default: break; VICVectAddr = 0x00; /* 函数名称:UARTInit* 函数功能:串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200* 入口参数: uiDly 值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void UARTInit (void) uint16 uiFdiv; U0LCR = 0x83; /* 允许设置波特率 */ uiFdiv = (Fpclk / 16) / UART_BPS; /* 设置波特率 */ U0DLM = uiFdiv / 256; U0DLL = uiFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */* 函数名称: UART0SendByte* 函数功能:向串口发送子节数据,并等待数据发送完成,使用查询方式* 入口参数: uiDat 要发送的数据* 出口参数: 无* 返回值: 无*/void UART0SendByte (uint8 uiDat) U0THR = uiDat; /* 写入数据 */ while (U0LSR & 0x20) = 0); /* 等待数据发送完毕 */* 函数名称: UART0SendStr* 函数功能: 向串口发送字符串* 入口参数: uiStr 要发送的字符串指针* uiNum 要发送的数据个数* 出口参数: 无* 返回值: 无*/void UART0SendStr(uint8 const *uiStr, uint32 uiNum) uint32 i; for (i = 0; i < uiNum; i+) /* 发送指定个字节数据 */ UART0SendByte (*uiStr+); /* 函数名称: main* 函数功能:跳线JP6短接,打开串口调试软件,串口0中断方式通信* 入口参数: 无* 出口参数: 无* 返回值: 无*/int main (void) PINSEL0 = PINSEL0 & (0x0F); PINSEL0 = PINSEL0 | 0x05; /* 设置I/O连接到UART */ uiGRcvNew = 0; UARTInit (); /* 串口初始化 */ U0FCR = 0x81; /* 使能FIFO,设置8个字节触发点 */ U0IER = 0x01; /* 使能接收中断 */ IRQEnable (); VICIntSelect = 0x00000000; /* 设置所有中断为向量中断 */ VICVectCntl0 = 0x20 | 0x06; /* 设置串口中断为最高优先级 */ VICVectAddr0 = (uint32)UART0_IRQ; /* 设置向量地址 */ VICIntEnable = 1 << 0x06; /* 使能串口中断 */ while (1) if (uiGRcvNew = 1) /* 判断是否有新数据 */ uiGRcvNew = 0; /* 清除标志 */ UART0SendStr (uiGRcvBuf, uiGNum); /* 向串口发送数据 */ return 0;/*运行

    注意事项

    本文(嵌入式系统课程设计报告.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开