电气与电子信息工程学院嵌入式系统设计课程设计设计题目:基于AT89S52单片机的游戏机嵌入式系统设计与制作专业班级:电子信息工程2008级(2)班学号:200840210212姓名:童俊指导教师:邓彬伟李玉平设计时间:2011/11/14~2011/12/2设计地点:K2自动化综合实验室嵌入式系统设计课程设计成绩评定表指导教师签字:2010年12 月20 日课程设计任务书2011 ~2012 学年第 1 学期学生姓名:林忠航专业班级: 08电信本1、2 指导教师:邓彬伟、李玉平工作部门:电信教研室一、课程设计题目嵌入式系统设计课程设计二、课程设计目的为了提高嵌入式系统设计与实际的应用能力,开始为期三周的嵌入式系统设计课程设计。
通过实训使学生在巩固所学单片机知识的基础之进一步把其与μ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、设计基于51单片机的输入和输出电路。
2、用4×4的键盘作为输入设备。
3、用LED或LCD进行显示。
4、开发μC/OS-II操作系统的移植代码。
5、对系统的进行综合和调试,通过硬件指示移植成功的标志。
6、在此嵌入式系统上,除过能完成最基本的输入和显示以外,每个同学根据自己的特长开发出应用系统。
7、编写课程设计的总结.六、设计报告课程设计报告的基本内容至少包括封面、正文、附录三部分。
课程设计报告要求统一格式,字体工整规范。
1、封面封面包括“《嵌入式系统设计》课程设计报告”、班级、姓名、学号以及完成日期等。
2、正文正文是实践设计报告的主体,具体由以下几部分组成:七、考核方式与成绩评定办法备注:成绩等级:优(90分~100分)、良(80分~89分)、中(70分~79分)、及格(60分~69分)、60分以下为不及格。
八、参考书目[1] Jean J Labrosse.嵌入式实时操作系统μC/OS-II[M].邵贝贝译.北京:北京航空航天大学出版社,2003.[2] 任哲.嵌入式实时操作系统μC/OS-II原理及应用[M].北京:北京航空航天大学出版社,2003.[3] 沈睿. μC/OS-Ⅱ在DSP2407 上若干移植问题的研究[J].中国水运,2007,5(5)::43-44.[4] 马忠梅编著.单片机的C语言应用程序设计[M].北京:北京航空航天出版社,2OO3.[5] 徐灵伟,刘飞.基于μC/OS-Ⅱ的嵌入式中断实现与扩展[C].北京:中国控制与决策学会,2007 :999-1002教研室主任签名:年月日基于μC/OS-II的贪食蛇游戏设计一、μC/OS-II实时操作系统简介μC/OS-是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU 时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
μC/OS-II可以管理多达64个任务。
由于它的作者占用和保留了8个任务,所以留给用户应用程序最多可有56个任务。
赋予各个任务的优先级必须是不相同的。
这意味着μC/OS-II不支持时间片轮转调度法(round-robin scheduli ng)。
μC/OS-II为每个任务设置独立的堆栈空间,可以快速实现任务切换。
μC/OS-II 近似地每时每刻总是让优先级最高的就绪任务处于运行状态,为了保证这一点,它在调用系统API 函数、中断结束、定时中断结束时总是执行调度算法,μC/OS-II通过事先计算好数据简化了运算量,通过精心设计就绪表结构使得延时可预知。
二、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-II V2.52版。
μC/OS-II的移植包括以下几个部分。
(1)设置与编译器有关的代码[OS_CPU.H]在差异的处理器中有差异的字长,所以必须界说一系列数据范例以确保移植的准确性。
另外,在uC/OS-II中,不使用C的short、int和long等数据范例,这些都是和编译器相干的。
下面即是uC/OS-II界说的一部分数据范例。
typedef unsigned char BOOLEAN;typedef unsigned char INT8U; /*无标志8位整数*/typedef signed char INT8S; /*有标志8位整数*/typedef unsigned int INT16U; /*无标志16位整数*/typedef signed int INT16S; /*有标志16位整数*/typedef unsigned long INT32U; /*无标志32位整数*/typedef signed long INT32S; /*有标志32位整数*/typedef float FP32; /*单精度浮点数*/typedef double FP64; /*双精度浮点数*/首先来看对临界段的处理,就是关中断,处理完毕后在开中断。
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()。
表1移植所需要的具体材料及移植的参数4. 测试、编写驱动和应用步伐做完以上事情以后,就要测试移植的是否准确。
测试一个μC/OS-II实时内核并不庞大,即是让这个实时内核在自己的目的板上跑起来。
开始时,可以运行一些简略的使命和时钟节奏停止使命,如果调试乐成就可以在上面添加应用步伐。
uC/OS-II移植完成以后,就要在这个实时内核之上编写接口驱动步伐。
由于嵌入式操作体系体积更小,功效更强,且快速、稳固,更具有针对性,因此不像其它操作体系那样,对体系的全部接口配置都需要驱动、管理、调治和监视。
由于嵌入式产品是针对特别的用途而计划的,有很强的埋头性,因此,在编写驱动步伐时内容更精简,更具有稳固性,编写出的驱动模块更小。