(毕业设计论文)基于AT89C51单片机的多任务程序设计

上传人:zhuma****mei1 文档编号:54413387 上传时间:2018-09-12 格式:DOC 页数:45 大小:247.50KB
返回 下载 相关 举报
(毕业设计论文)基于AT89C51单片机的多任务程序设计_第1页
第1页 / 共45页
(毕业设计论文)基于AT89C51单片机的多任务程序设计_第2页
第2页 / 共45页
(毕业设计论文)基于AT89C51单片机的多任务程序设计_第3页
第3页 / 共45页
(毕业设计论文)基于AT89C51单片机的多任务程序设计_第4页
第4页 / 共45页
(毕业设计论文)基于AT89C51单片机的多任务程序设计_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《(毕业设计论文)基于AT89C51单片机的多任务程序设计》由会员分享,可在线阅读,更多相关《(毕业设计论文)基于AT89C51单片机的多任务程序设计(45页珍藏版)》请在金锄头文库上搜索。

1、精品毕业论文目录目录摘要摘要3AbstractAbstract40 0 文献综述文献综述 50.1 研究背景.50.2 研究现状.50.3 本人的研究思路.51 1 引言引言 71.1 任务 71.2 多任务 71.3 中断 71.4 任务切换 71.5 时钟节拍 81.6 代码的临界段 81.7 可重入函数 81.8 调度 91.9 空闲任务 92 2 KEILKEIL 平台上的平台上的 C C 语言语言 .92.1 从 C 到 C51.92.2 C51 中代码和数据的存储区域和访问方式.92.3 编译模式 .102.4 指针 .102.5 C51 中的可重入函数112.6 C51 函数参数

2、和返回值的传递122.7 C 语言和汇编语言混合编程133 3 以以 KEILKEIL 为开发平台基于为开发平台基于 AT89C51AT89C51 单片机的多任务调度器设计单片机的多任务调度器设计143.1 创建任务163.2 任务堆栈初始化173.3 任务控制块初始化20精品毕业论文3.4 任务切换系统函数203.5 时钟中断处理函数223.6 任务延时224 4 具体实例的设计具体实例的设计 .234.1 ampire 128X64lcd 显示驱动设计.234.2 按键电路设计 .264.3 贪吃蛇和俄罗斯方块的设计 .265 5 结论结论.29附录附录.30参考文献参考文献.44致谢致谢

3、.45精品毕业论文基于单片机的多任务程序设计基于单片机的多任务程序设计摘要摘要:本文介绍了基于 AT89C51 单片机的多任务程序设计。首先介绍了多任务系统的基本概念,然后设计了以 KEIL 为开发平台基于 AT89C51 单片机的多任务调度器,主要实现了任务调度函数、时钟中断处理函数、任务创建函数、任务堆栈初始化函数以及系统延时函数。最后编写了在128X64 LCD 上同时显示俄罗斯方块和贪吃蛇游戏的实例,并给出了游戏流程图和硬件电路图。本课题所设计的多任务系统具有结构简单,使用方便灵活的特点。关键词关键词:单片机;多任务;调度器;128X64LCD精品毕业论文multitask progr

4、am design based on MCULI YangCollege of Engineering and Technology, Southwest University, Chongqing 400716,ChinaAbstract: This article describes the design of multi-tasking program based on AT89C51 microcontroller. First introduces the basic concepts of multi-tasking system, and then design the AT89

5、C51 microcontroller-based task scheduling, task scheduling function to KEIL development platform, the clock interrupt handler, the task creation function, task stack initialization function, and the system delay function. Last written on 128X64 the LCD display an instance of the game of Tetris and S

6、nack, and the flow chart of the game and the hardware circuit. This project designed by the multi-tasking system has a simple structure, easy to use and flexible features.Key Words: MCU; multitasking; scheduling; 128X64LCD精品毕业论文0 0 文献综述文献综述0.0.1 1 研究背景研究背景单片机系统是嵌入式系统中十分重要的组成部分,在智能控制领域和测试系统中有着非常广泛的应用

7、。通常单片机上的程序为一个无限循环单任务结构,程序从上到下顺序执行,在无限循环过程中采用调用函数的方式来完成相关操作,面对一些短小的实时任务可以通过中断来处理,并且只有当一个任务执行完之后,另一个任务才能被执行,单任务系统具有简单直观和易于控制的特点,于此同时它又具有灵活性差、在复杂系统中难以胜任的缺点。比如当程序延时等待时,CPU 将处于空转状态即造成 CPU 效率低下,而当所面对的问题越来越复杂时此结构极其不方便,不利于编程。为了克服以上缺点将多任务机制引入单片机系统显得十分有必要,这里说的多任务并不是指计算机真的在特定的时间段内同时运行多个任务,而是按照时间片在各个任务之间进行快速的切换

8、,各个任务轮流占用 CPU,当切换非常迅速时,将产生从微观上看轮流执行而宏观上并行执行的效果。 0.20.2 研究现状研究现状目前在单片机上实现多任务机制的方式主要还是移植现有商业嵌入式实时操作系统如 UC/OS、VxWorks、WinCE 等,它们主要完成任务管理、任务的同步和通信、以及对存储资源的管理,同时用户利用实时系统提供的 API 或系统函数来完成相应的实时处理。采用这种方法在一定程度上能够缓解当前单片机系统以单一任务为核心的窘境,提高 CPU 的利用率,但是在单片机上移植商业实时操作系统除了要支付数额不小的的专利费用外,由于单片机自身的片上资源十分有限,特别是数据存储区空间和程序存

9、储区空间十分有限,即使对于比较高档的单片机而言,在移植的过程中往往一个系统内核就要占去一大部分程序存储空间,同时在内核运行时也要消耗不少 RAM 资源,这样就严重限制了用户对于应用程序的开发,对于那些低档的单片机绝大多数是不能运行商业性实时操作系统的。所以,如何在没有操作系统的情况下,采用一种简单的方法在单片机上实现多任务机制,那将是十分有意义的。0.30.3 本人的研究思路本人的研究思路对于像 AT89C51 这种内部资源很有限的单片机而言,将一个完整的实时操作系统移植上去显然是奢侈和不现实的,为了能够在 51 上实现多任务机制,本文设计了精品毕业论文基于时间片调度算法的多任务调度器,它为子

10、任务提供延时和任务切换系统函数。根据多任务机制的特点,系统必须提供一个基准时钟,系统通过基准时钟将 CPU 运行时间均等分割成若干时间片,多任务调度器将时间片分给各个任务,这个时间分割的任务就交由 51 单片机中的定时器来完成。当定时中断到来时,调度器会强制剥夺正在运行任务的 CPU 使用权,然后找到下一个可以运行的任务,并转去执行它。在调度器的设计过程中要用到 C 语言和汇编语言的混合编程,因为 C 语言不能直接操作寄存器,所以在进行工作环境保存和恢复的时候必须要用到汇编语言。同时因为 KEIL 的“可覆盖技术”在保存任务的工作环境时,除了保存硬件堆栈以外还要保存可重入堆栈和可重入堆栈指针。

11、为了验证调度器能否正常工作,本文设计了在128X64LCD 上同时运行两个子游戏任务,共 8 个按键分两组各控制一个游戏,预期的效果是两个游戏互相不干扰且能够同时运行。精品毕业论文1 1 引言引言在上大学之前,一直对操作系统很困惑,在只有一个 CPU 的系统中,很难想象多个任务是如何同时运行的?其实它的基本思想还是很好理解的,就是让每个任务通过调度程序依次执行一小会儿,当这个“一小会儿”很短的时候从整体上看就像是同时在运行了,所以调度程序的设计就非常关键。本文设计了以 KEIL 为开发平台基于 AT89C51 单片机的多任务调度器,它利用 51 单片机的 T0 定时器分割 CPU 时间给各个任

12、务,实现各个任务之间的跳转,多任务调度器实现了任务创建、任务堆栈初始化、时钟中断处理、系统延时等功能。同时设计了以多任务调度器为平台在128X64LCD 上显示两个游戏的任务实例。在进行调度器设计之前,本章简要介绍多任务系统设计必须了解的基本概念。1.11.1 任务任务一个任务就是一个单独的程序或函数,当启动多任务系统后每个任务可以认为CPU 完全属于它自己。多任务程序设计首先要解决的就是如何将问题分割成多个子任务,每个任务都是整个程序的一部分,分别完成不同的功能,拥有自己的 CPU 寄存器和任务堆栈。一般的,每个任务都是一个无限循环结构,任务在整个执行过程中将分别处于运行,等待,就绪,3 种

13、状态,运行状态表示此任务正在使用 CPU,等待状态表示此任务正等待某个事件的发生,在此之前它不会得到运行,就绪状态表示此任务一切就绪随时可以得到运行。1.21.2 多任务多任务在只有一个 CPU 的系统中,每一时刻只可能有一个任务在运行,而多任务其实是通过 CPU 在各个任务之间转换和调度来实现的,当转换非常迅速时,从宏观上看就像是同时在运行。1.31.3 中断中断中断就是一种硬件机制,CPU 通过它感知异步事件的发生,中断一旦被响应,CPU 将保存相关的寄存器,同时跳转到中断处理子程序。微处理器中的开中断和关中断指令可以让系统响应或不响应中断,但是在多任务系统中,关中断的时间应尽可能的短。精

14、品毕业论文1.41.4 任务切换任务切换任务切换就是将正在运行任务的 CPU 寄存器中的全部内容保存到此任务的任务堆栈中,然后把下一个将要运行的任务在任务堆栈中的内容重新装入 CPU 寄存器中,最后跳转到将要运行任务的代码处。任务切换过程增加了程序的额外负担,CPU 的寄存器越多,额外负担就越重。任务切换所需时间取决于有多少 CPU 寄存器需要入栈。1.51.5 时钟节拍时钟节拍时钟节拍是周期性的中断,可以把它看作是系统心脏的跳动,时钟的节拍式中断可以将任务延时若干个整数时钟节拍,时钟节拍的拍率越快,系统任务切换就越频繁,系统的额外开销就越大。同时任务切换程序在时钟节拍中断发生时根据任务的状态

15、来决定是否要进行任务切换。1.61.6 代码的临界段代码的临界段代码的临界段表示在运行过程中不能分割的代码段,一旦这部分代码开始执行,系统将不会响应任何中断打入,临界段代码通过在代码首尾处加入关中断和开中断指令来实现不被中断。1.71.7 可重入函数可重入函数可重入函数可以被一个以上的任务所调用,而不必担心数据被破坏,可重入函数在任何时候都可以被中断,一段时间后又可以得到运行,同时相应的数据不会丢失。可重入函数要么只使用局部变量,变量保存在 cpu 寄存器中或堆栈中,要么使用全局变量,在任务切换时就要保存和恢复相应的全局变量。可重入函数范例int max(int *x,int*y)int a;

16、a=*x;if (a=*y) return a;return *y;不可重入函数范例int var;精品毕业论文int max(int *x,int*y)var=*x;if (var=*y) return var;return *y;1.81.8 调度调度调度就是系统通过某种策略决定该轮到那个任务运行,调度算法主要有时间片轮转法和优先级调度法。时间片轮转法就是赋予每个任务相同的时间片计数,每当时钟节拍中断发生时,系统会将正在运行任务的时间片计数减 1,当时间片计数为零时,当前任务会由运行状态变成就绪状态,同时将进行任务切换。优先级调度算法就是系统赋予每个任务各异的数值,数值越小代表优先级越高,在进行任务切换时系统总是找到优先级最高的任务进行任务切换。1.91.9 空闲任务空闲任务用户在启动多任务系统之前,必须要创建一个空闲任务,当用户创建的其它任务都处于等待状态时,CPU 将会转去执行空闲任务,同时空闲任务将永远处于就绪状态,即它可以随时得到执行。2 2 KEILKEIL 平台上的平台上的 C C 语言语言下面将介绍 C51 在多任务调度器

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号