嵌入式系统设计课程设计.docx

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

嵌入式系统设计课程设计.docx

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

嵌入式系统设计课程设计.docx

嵌入式系统设计课程设计

 

 

电气与电子信息工程学院

嵌入式系统设计课程设计

 

设计题目:

 嵌入式系统设计课程设计

  专业班级:

电子信息工程2007级

(1)班

学  号:

   200740210140    

姓名:

毛勇

指导教师:

邓彬伟李玉平

设计时间:

2010/11/22~2010/12/10

设计地点:

K2—高频实验室

嵌入式系统设计课程设计成绩评定表

姓名

毛勇

学号

200740210140

专业班级

电子信息工程2007级

(1)班

课程设计题目:

嵌入式系统设计

课程设计答辩或质疑记录:

1、评价一个实时操作系统一般可以从哪些方面衡量?

答:

一般有以下几个方面可以衡量:

①多任务;②标度方式;③时间偏转;④时间管理⑤中断响应时间。

2.所做的电路中有哪几个任务?

答:

①液晶显示;②LED灯闪烁;③电子琴。

3.蜂鸣器接在哪个口上面?

答:

P3.3口

 

成绩评定依据:

实物制作(40%):

课程设计考勤情况(20%):

课程设计答辩情况(20%):

完成设计任务及报告规范性(20%):

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

2010年12月20日

一、课程设计题目

嵌入式系统设计课程设计

二、课程设计目的

为了提高嵌入式系统设计与实际的应用能力,开始为期三周的嵌入式系统设计课程设计。

通过实训使学生在巩固所学单片机知识的基础之进一步把其与μC/OS-II操作系统的移植结合起来,增强学生对所学知识的实际应用能力和以及与当前专业的前沿知识结合,达到对μC/OS-II操作系统的学习和理解,为以后从事嵌入式工作的研究和开发打好基础。

三、课程设计内容

设计基于51单片机的嵌入式系统,把μC/OS-II操作系统移植到51单片机上,能完成基本的输入和输出,输入采用4*4的键盘,输出采用1602液晶。

再此基础之上,每个同学根据自己的特长扩展应用系统,具体可参考以下五种扩展方案的实现。

1、设计的游戏机,在游戏机工作时有背景音乐放出。

2、设计的是电子琴以及1602液晶显示。

3、设计的流水灯、蜂鸣器、闪烁灯任务。

4、设计的流水灯和电子书功能。

5、

(1)所有灯灭,

(2)1602显示93)LED灯闪烁,显示字符。

四、进度安排

序号

设计内容

所用时间

1

布置任务,学习μC/OS-II操作系统

5天

2

开发μC/OS-II操作系统的移植代码

3天

3

制作基于51单片机的硬件系统

2天

4

软硬件集成和调试

2天

5

答辩、撰写设计报告书

3天

合计

15天

五、基本要求

1、设计基于51单片机的输入和输出电路。

2、用4×4的键盘作为输入设备。

3、用LED或LCD进行显示。

4、开发μC/OS-II操作系统的移植代码。

5、对系统的进行综合和调试,通过硬件指示移植成功的标志。

6、在此嵌入式系统上,除过能完成最基本的输入和显示以外,每个同学根据自己的特长开发出应用系统。

7、编写课程设计的总结

 

嵌入式系统设计课程设计

一、概述

1.单片机介绍

  单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:

一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

2.单片机历史

单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

1.SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。

“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。

在开创嵌入式系统独立发展道路上,Intel公司功不可没。

2.MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:

不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。

它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。

从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。

在发展MCU方面,最著名的厂家当数Philips公司。

3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。

随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。

因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

3.单片机的应用领域

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

  单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。

此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。

二、单片机的结构与原理

1.MCS-51单片机内部结构

MCS-51单片机芯片内部结构框图如图1所示。

图1MCS-51单片机芯片内部结构

1.CPU

CPU即中央处理器的简称,是单片机的核心部件,它完成各种运算和控制操作,CPU由运算器和控制器两部分电路组成。

(1)运算器电路

运算器电路包括ALU(算术逻辑单元)、ACC(累加器)、B寄存器、状态寄存器、暂存器1和暂存器2等部件,运算器的功能是进行算术运算和逻辑运算。

运算电路以ALU为核心单元,可以完成半字节、单字节以及多字节数据的运算操作,其中包括加、减、乘、除、十进制调整等算术运算以及与、或、异或、求补和循环等逻辑操作,运算结果的状态由状态寄存器保存。

(2)控制器电路

控制器电路包括程序计数器PC、PC加1寄存器、指令寄存器、指令译码器、数据指针DPTR、堆栈指针SP、缓冲器以及定时与控制电路等。

控制电路完成指挥控制工作,协调单片机各部分正常工作。

程序计数器PC用来存放即将要执行的指令地址,它可以完成64K的外部存储器寻址,执行指令时,PC内容的高8位经P2口输出,低8位经P0口输出。

数据指针DPTR为16位数据指针,它可以对64K的外部数据存储器和I/O口进行寻址,它的低8位为DPL(地址82H),高8位为DPH(地址为83H)。

堆栈指针SP在片内RAM(128字节)中开辟栈区,并随时跟踪栈顶地址,它按先进后出的原则存取数据,上电复位后,SP指向07H。

2.定时器/计数器

MCS-51单片机片内有两个16位的定时/计数器,即定时器0和定时器1。

它们可以用于定时控制、延时以及对外部事件的计数和检测等。

3.存储器

MCS-51系列单片机的存储器包括数据存储器和程序存储器,其主要特点是程序存储器和数据存储器的寻址空间是相互独立的,物理结构也不相同。

对MCS-51系列(8031除外)而言,有4个物理上相互独立的存储器空间:

即内、外程序存储器和内、外数据存储器。

对于8051其芯片中共有256个RAM单元,其中后128个单元被专用寄存器占用,只有前128个单元供用户使用。

4.并行I/O口

MCS-51单片机共有4个8位的I/O口(P0、P1、P2和P3),每一条I/O线都能独立地用作输入或输出。

P0口为三态双向口,能带8个TTL门电路,P1、P2和P3口为准双向口,负载能力为4个TTL门电路。

5.串行I/O口

MCS-51单片机具有一个采用通用异步工作方式的全双工串行通信接口,可以同时发送和接收数据。

它具有两个相互独立的接收、发送数据缓冲器,两个缓冲器共用一个地址(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。

6.中断控制系统

MCS-51单片机的中断功能较强,以满足控制应用的需要。

8051共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。

所有中断分为高级和低级两个中断优先级。

7.时钟电路

MCS-51芯片内部有时钟电路,但晶体振荡器和微调电容必须外接。

时钟电路为单片机产生时钟脉冲序列,振荡器的频率范围为1.2MHz~12MHz,典型取值为6MHz。

8.总线

以上所有组成部分都是通过总线连接起来,从而构成一个完整的单片机。

系统的地址信号、数据信号和控制信号都是通过总线传送的,总线结构减少了单片机的连线和引脚,提高了集成度和可靠性。

2.89C58RD+型单片机介绍

89C58RD+是一种带32KB闪烁可编程/可擦除制度存储器(EPEROM-FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS的8位微处理器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51的指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,因而ATMEL的89C58RD+是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

并且,比起跟它同种类型的89C51,它具有更大的Flash存储器,可下载很大容量的程序代码,因此功能更加强大,应用范围更广泛。

89C58RD+有40个引脚,32个外部双向输入/输出(I/O)端口,9个中断源,内含2个外中断口,3个16位可编程定时计数器,可编程UART串行通信口,SPI串行口,89C58RD+可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

89C58RD+有PDIP、TQFP及PLCC等三种封装形式,以适应不同应用系统的需求。

89C58RD+管脚如图2所示,其中

(1)时钟引脚

XTAL1:

接外部晶体的一个引脚。

在单片机内部,它是构成片内振荡器的反相放大器的输入端。

当采用外部振荡器时,该引脚接收振荡器的信号,即把此信号直接接到内部时钟发声器的输入端。

XTAL2:

接外部晶体的另一个引脚。

在单片机内部,它是构成内部振荡器的反相放大器的输出端。

当采用外部振荡器时,此引脚应悬浮不连接。

注意:

如果采用片内的振荡电路,要在单片机的引脚XTAL1和XTAL2之间连接一个石英晶体或陶瓷谐振器,并接两个电容到地。

(2)控制线或其他电源的复位引脚

RST:

复位输入端。

ALE/

当访问外部寄存器时,地址锁存允许的输出电平用于锁存地址的低位字节。

在Flash编程期间,此管脚用于输入编程脉冲。

在平时,ALE以不变的频率周期输出正脉冲信号,次频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如果禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行外部执行状态ALE禁止,置位无效。

外部程序存储器的选通信号。

在有外部程序存储器取指令期间,每个机器周期两次

有效。

但在访问外部数据存储器时,这两次有效的

信号将不出现。

/Vpp:

保持低电平时,则在此期间访问外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意要加密方式1时,

将内部锁定为RESET;当

断保持高电平时,此间访问内部程序存储器。

在Flash编程期间,此管脚也用于施加12V编程电源(Vpp)。

(3)输入/输出引脚

P0口:

P0口为一个8位漏极开路双向I/O口,每脚可吸收8个TTL门电流。

当P1口的管脚第一次写“1”时,被定义为高阻输入。

P0口能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在Flash编程时,P0口作为原码输入口,当Flash进行校验时,P0口输出原码,此时,P0口外部必须被拉高。

P1口:

P1口为一个内部提供上拉电阻的8位双向I/O,P1口缓冲器能接收输出4个TTL门电流。

P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在Flash编程和校验时,P1口为第八位地址接收。

P2口:

P2口为一个内部提供上拉电阻的8位双向I/O,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高。

且作为输入。

并因此作为输入时,P2口的管脚被外部拉底,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部8位地址数据校验时,P2口输出其特殊功能起存器的内容。

P2口在Flash编程和校验时,接收高8位地址信号和控制信号。

P3口:

P3口为一个内部提供上拉电阻的8位双向I/O,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为一些特殊功能口,如表1所示。

表1P3口功能

管脚

备选功能

P3.0

RXD

串行输入口

P3.1

TXD

串行输出口

P3.2

外部中断0

P3.3

外部中断1

P3.4

T0

计时器0外部输入

P3.5

T1

计数器1外部输入

P3.6

外部数据存储器写选通

P3.7

外部数据存储器读选通

三、uC/OS-II在51单片机上的移植

1.uC/OS-II简介

uC/OS-II并非一个完备的实时操作体系,它只是一个实时内核。

uC/OS-II不像其它实时操作体系一样,提提供用户的是一个尺度的API函数,步伐开发职员使用操作体系提供的API函数举行应用步伐的开发。

要想在uC/OS-II内核上举行应用步伐的开发,就需要步伐开发职员在实时内核的基础上创建自己的实时操作体系。

首先,把uC/OS-II移植到自己的硬件目的板上,写出相应的驱动步伐以及用户图形界面等等;在这些接口函数之上,加上用户自己的应用步伐,就组成了嵌入式软件。

2.uC\os-II在MCS-51上的移植

虽然μC/OS-II大部分源代码是用C语言写的,但是完成和处理器一些有关的代码时,照旧必须要用汇编语言来实现的。

要使uC\OS-II正常运行,必须满足一下要求:

(1)处理器的C编译器能产生可重入型代码。

(2)用C语言就可以打开和关闭中断。

(3)处理器支持中断,并且能产生定时中断(通常频率在10至100Hz之间)。

(4)处理器能支持容纳一定量的数据存储硬件堆栈(可能是几千字节)。

(5)处理器有将堆栈指针和其他CPU寄存器的内容读出并存储到堆栈或内存中的指令。

MCS-51与KeilCx51编译器可以满足以上条件,可以将uC\OS-II移植到MCS-51系列处理器。

需要说明一点,目前uC\OS-II的版本较多,但基本都一致,兼容性也很好,本例采用的是uC\OS-IIV2.52版。

μC/OS-II的移植包括以下几个部分。

(1)设置与编译器有关的代码[OS_CPU.H]

在差异的处理器中有差异的字长,所以必须界说一系列数据范例以确保移植的准确性。

另外,在uC/OS-II中,不使用C的short、int和long等数据范例,这些都是和编译器相干的。

下面即是uC/OS-II界说的一部分数据范例。

typedefunsignedcharBOOLEAN;

typedefunsignedcharINT8U;/*无标志8位整数*/

typedefsignedcharINT8S;/*有标志8位整数*/

typedefunsignedintINT16U;/*无标志16位整数*/

typedefsignedintINT16S;/*有标志16位整数*/

typedefunsignedlongINT32U;/*无标志32位整数*/

typedefsignedlongINT32S;/*有标志32位整数*/

typedeffloatFP32;/*单精度浮点数*/

typedefdoubleFP64;/*双精度浮点数*/

首先来看对临界段的处理,就是关中断,处理完毕后在开中断。

uC\OS-II提供了3种方法来处理,针对MCS-51单片机,可以使用方法1来处理临界段。

在MCS-51系列单片机中,中断允许寄存器IE的第7位EA为中断允许控制为,EA=0屏蔽所有中断、EA=1允许所有中断。

MCS-51堆栈从低地址往高地址增长(1=向下,0=向上),因此将OS_STK_GROWTH定义为0。

OS_TASK_SW()是一个宏,在uC\OS-II从低优先级任务切换到高优先级任务是被调用。

uC\OS-II假定任务切换时靠中断级代码完成的,或者说uC\OS-II的任务切换时靠模仿中断动作来完成的。

uC\OS-II需要一条处理器指令,使其行为就像是硬件中断。

MCS-51没有软中断指令,在这种情况下,需要将堆栈结构设置成与中断堆栈结构一样,在用函数调用的方式来实现任务切换,也就是说,通过函数来模仿软中断指令。

(2)用C语言编写6个与操作体系有关的函数[OS_CPU_C.C]这10个函数是:

OSTaskStkInit()、OSTaskCreatHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()、OSTaskIdleHook()、OSTimeTickHook()、OSInitHookBegin()、OSInitHookEnd()和OSTCBInitHook()。

这10个函数只对OSTaskStkInit()编写代码,后9个函数必须声明,但是内部并没有代码。

在对堆栈设计时需要考虑一下因素:

<1>传统的8051处理器在中断来临时只将程序计数器PC的值压入堆栈。

<2>按照uC\OS-II的要求,保存全部寄存器,MCS-51的寄存器有PSW、ACC、B、DPL、DPH、R0-R7和SP。

<3>Cx51编译器允许用CPU寄存器传递3个参数。

<4>堆栈从低地址向高地址增长。

<5>堆栈指针指向上次入栈地址。

<6>MCS-51存在系统栈。

<7>系统栈深度为256字节。

因为需要进行任务栈与系统栈的复制,获得系统栈的起始地址,所以需要对系统进行一些定义。

首先,堆栈起点由Keil决定,只关心大小,然后通过SOStack获得keil分配的SP起点。

下面的代码就是相关的汇编代码,可以放在启动代码中,也可以放在相关的文件中。

为了函数重入,形参和局部变量必须保存在堆栈里。

MCS-51硬件堆栈太小,Keil将根据内存模式在相应内存空间仿真堆栈,增长方向由上向下,与硬件栈相反。

对于大模式编译,函数返回地址保存在硬件堆栈里,形参和局部变量放在仿真堆栈中,对MCS-51咬使用大模式编译。

3.编写4个汇编语言函数[OS_CPU_A.S]

uC/OS-II的移植实例要求用户编写4个简略的汇编语言函数:

OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。

表2移植所需要的具体材料及移植的参数

编译器

硬件堆栈大小

任务栈大小

系统栈保存参数(包括模栈指针?

C_XBP)

每秒切换次数

定时器初值

单片机型号

KeilCx51

30H

50H

17

50

B800H

STC11F48XE

4.测试、编写驱动和应用步伐

做完以上事情以后,就要测试移植的是否准确。

测试一个μC/OS-II实时内核并不庞大,即是让这个实时内核在自己的目的板上跑起来。

开始时,可以运行一些简略的使命和时钟节奏停止使命,如果调试乐成就可以在上面添加应用步伐。

uC/OS-II移植完成以后,就要在这个实时内核之上编写接口驱动步伐。

由于嵌入式操作体系体积更小,功效更强,且快速、稳固,更具有针对性,因此不像其它操作体系那样,对体系的全部接口配置都需要驱动、管理、调治和监视。

由于嵌入式产品是针对特别的用途而计划的,有很强的埋头性,因此,在编写驱动步伐时内容更精简,更具有稳固性,编写出的驱动模块更小。

编写驱动步伐应完成以下基本功效:

①对配置初始化和开释;②把数据从内核传送到硬件和从硬件读取数据;③读取应用步伐传送给配置文件的数据和回送应用步伐恳求的数据;④检测和处理配置出现的错误。

实现了以上功效以后,一个嵌入式操作体系就基本组成了。

四、设计方案

1.两种设计方案比较

方案一

附录一硬件电路设计含有三种功能:

电子琴、闪烁灯、1602液晶显示

软件移植部分:

1)裁剪部分:

修改os_cfg.h

#defineOS_MAX_TASKS5文件将任务数设置为5个

#defineOS_LOWEST_PRIO5优先级别也修改为5个

修改os_cpu.h

#defineCPU_MAX_STK_SIZE0x40保证能运行较大程序

2)任务部分:

任务1:

电子琴,可以通过按键发出DoReMiFaSoLaSiDo_H

voidTask1(voidxdata*ppdata)reentrant

{

ppdata=ppdata;

while

(1)

{

dzq();

OSTimeDlyHMSM(0,0,0,50);

}

}

任务2:

led闪烁;

voidTask2(voidxdata*ppdata)reentrant

{

ppdata=ppdata;

led1=0;

while

(1)

{

led1=~led1;

OSTimeDlyHMSM(0,0,0,100);

}

}

任务3:

1602液晶显示

voidTask3(voidxdata*ppdata)reentrant

{

ppdata=ppdata;

lcdinit();

while

(1)

{

display();

OSTimeDlyHMSM(0,0,0,50);

}

}

方案二

附录二硬件电路设计设计含有三种功能:

流水灯、闪烁灯和蜂鸣器

软件移植部分:

1)裁剪部分:

修改os_cfg.h

#defineOS_MAX_TASKS5文件将任务数设置为5个

#defineOS_LOWEST_PRIO5优先级别也修改为5个

修改os_cpu.h

#defineCPU_MAX_STK_SIZE0x40保证能运行较大程序

2)任务部分:

任务1:

1Hz的led闪烁

voidTask1(voidxdata*ppdata)reentrant

{

ppdata=ppdata;

while

(1)

{

OSTimeDlyHMSM(0,0,1,0);

P3

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

当前位置:首页 > 解决方案 > 工作计划

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

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