嵌入式c语言程序设计实验指导书.doc_第1页
嵌入式c语言程序设计实验指导书.doc_第2页
嵌入式c语言程序设计实验指导书.doc_第3页
嵌入式c语言程序设计实验指导书.doc_第4页
嵌入式c语言程序设计实验指导书.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验项目1:嵌入式开发系统熟悉KEIL C 开发环境使用方法实验目的:1、熟悉KEIL C软件开发环境2、搭建基本的开发环境实验平台:Windows XP 操作系统、Keil c 开发软件主要实验内容:一、 上机熟悉KEIL C软件开发环境二、 掌握搭建基本开发环境的过程,掌握比较常用的选项设置三、 学生自己编写一段小的c代码,掌握编译过程。本实验知识背景:功能强大的单片机开发工具KEIL CKeil Software 的8051开发工具提供以下程序你可以用它们来编译你的C源码汇编你的汇编源程序连接和重定位你的目标文件和库文件创建HEX文件调试你的目标程序。l Windows应用程序uVision2是一个集成开发环境它把项目管理源代码编辑程序调试等集成到一个功能强大的环境中l C51美国标准优化C交叉编译器从你的C源代码产生可重定位的目标文件 l A51宏汇编器从你的8051汇编源代码产生可重定位的目标文件 l BL51连接/重定位器组合你的由C51和A51产生的可重定位的目标文件生成绝对目标文件 l LIB51库管理器组合你的目标文件生成可以被连接器使用的库文件 l OH51目标文件到HEX格式的转换器从绝对目标文件创建Intel HEX 格式的文件 l RTX-51实时操作系统简化了复杂和对时间要求敏感的软件项目 对由这些工具组成的开发套件进行描述它们是为专业开发人员而设计的,但所有层次的编程人员都可以用它们来获得8051微控制器的绝大部分应用。实验步骤:1. 打开KEIL 软件,新建工程2. 命名KEIL工程文件名,然后保存3. 弹出器件选择窗口,选择 Atmel 并双击4. 选择AT89C51 或AT89S51 ,然后点击确定5. 提示问你是否加载 标准8051 Startup 文件,点击否6. 新建一个文本文件7. 输入源程序或直接从其他的文本中复制源程序粘贴进来。8. 保存刚才的文本文件9.注意选择后缀.c10. 把刚才保存的 *.c添加到工程中11. 点击完Add 后,这个窗口还在,再点击 Close 12.设置目标文件属性13. 把 Create HEX File 前面的方框钩起来14.编译源程序15. 状态显示编译结果16.点击链接按钮,生成16进制文件17.状态显示生成16进制文件实验项目2:嵌入式C语言程序的设计与调试实验目的:1、进一步熟悉KEIL C软件开发环境2、搭建基本的开发环境3、编写代码并使用KEIL C进行调试实验平台:Windows XP 操作系统、Keil c 开发软件主要实验内容:一、 上机熟悉KEIL C软件开发环境二、 掌握搭建基本开发环境的过程,掌握比较常用的选项设置三、 学生自己编写一段小的c代码,掌握编译过程,进行调试,学会观察寄存器和管脚等调试方法。四、 结合实验项目1完成实验报告1份本实验知识背景:一、 掌握实验项目1的基本技能,能够搭建基本的开发环境。二、 了解KEIL C开发软件的调试环境三、 为方便观察调试现象,应针对单片机的寄存器或管脚编写代码。实验步骤:1、按照实验项目1搭建基本实验平台,学生可输入自己的实验代码。2、输入代码后,处理编译过程中的问题,保证编译链接通过。3、在编译状态点击按钮可进入调试状态。4、进入调试状态5、,熟悉并掌握调试环境中的主要快捷按钮6、查看P1端口状态7、点击运行,观察P1端口8、熟悉view按钮9、点击按钮观察存储器,在address:处填入P1端口地址0x90可以观察P1端口在不断变化。10、右击代码中的特殊功能寄存器P1,选择菜单中的最后一项将P1添加到watch windows 1窗口。11、可以在watch windows 1 观察P1 的变化。12、学生独立操作,进一步熟悉操作环境,并操作前面介绍的主要功能。13、结合实验项目1完成实验报告1份。实验项目3:硬件测试编码设计与调试(没有实验设备)实验目的:1、利用KEIL C软件和51单片机实验开发板调试端口的led2、掌握软件与硬件的平台搭建3、学习下载hex代码,并在KEIL C环境下进行调试。4、使用proteus软件对实验结果进行仿真。实验平台:Windows XP 操作系统、Keil c 开发软件、proteus软件主要实验内容:一、搭建KEIL C软件与实验开发板的开发环境,设置好波特率、串口。二、下载代码至目标板,单步执行代码,注意观察实验现象。三、对代码进行修改并调试,并进行仿真测试。四、使用proteus软件对结果进行仿真实验,观察实验结果。五、编写实验报告分析实验现象。本实验知识背景:为了弥补由于暂无实验设备无法进行软、硬件平台搭建的缺陷,加入ledkey.dll和Dpj.dll两个能够模拟硬件的调试文件。并将程序进行进行proteus仿真观察实验结果。实验步骤:1、调试文件的使用方法由于暂无51单片机硬件实验平台,无法进行真正的调试开发,为此加入ledkey.dll和Dpj.dll两个能够模拟硬件的调试文件。加入的方法是:1)、将这两个文件拷贝到keilc51bin。2)、以ledkey.dll 为例,点击options for target的debug选项在parameter填入-dledkey。3)、调出硬件仿真面板就可以使用了。2、使用Proteus软件仿真方法1)、打开proteus软件,单击菜单命令“File”-”open design”,打开对应实验的.DSN文件。2)、在文件中,左键双击AT89C51单片机,在弹出的对话框的“Program File”项中选择在keil文件中生成的十六进制HEX文件。3)、单击页面左下角按钮开始进入程序仿真状态,观察仿真结果与引脚的电平变化,红色代表高电平,蓝色代表低电平。按钮停止仿真。完成实验程序:编写程序,完成下列实验。1、设计程序,按下按键时,P1.1控制发光二极管点亮,否则,P1.0控制发光二极管点亮。2、单片机系统控制要求为:(1)正常情况下,8个发光二极管点亮。(2)按下K1时,第1个和第8个发光二极管闪烁,间隔时间为1S。(3)按下K2时,8个发光二极管闪烁,间隔为2S。(4)发光二极管由单片机P0口控制。3、使用单片机P0口实现8个LED的流水灯控制。实验项目4:中断系统程序设计实验目的:1、掌握嵌入式c语言开发51单片机中断系统的方法和特点。2、掌握软件开发及调试平台的搭建3、通过调试分析并学习中断优先级方面的知识实验平台:Windows XP 操作系统、Keil c 开发软件、proteus软件主要实验内容:一、编写中断及中断优先级代码,搭建KEIL C软件开发环境,并编译链接通过。二、单步执行代码,注意观察实验现象并进行分析。三、使用proteus软件对结果进行仿真实验,观察实验结果。四、编写实验报告分析实验现象。本实验知识背景:1、中断的概念:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。2、80C51中断的控制 中断允许控制 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA (IE.7), CPU中断允许(总允许)位中断请求标志1)、TCON的中断标志IT0(TCON.0),外部中断0触发方式控制位。当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。IE0(TCON.1),外部中断0中断请求标志位。IT1(TCON.2),外部中断1触发方式控制位。IE1(TCON.3),外部中断1中断请求标志位。TF0(TCON.5),定时/计数器T0溢出中断请求标志位。TF1(TCON.7),定时/计数器T1溢出中断请求标志位2)、SCON的中断标志RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必须由软件清除。TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。 中断优先级控制 80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。 PX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS (IP.4),串行口优先级设定位;PT2 (IP.5) ,定时/计数器T2优先级设定位。而80C52单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的 。v PX0(IPH.0),外部中断0优先级设定位;v PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断0优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS (IPH.4),串行口优先级设定位;PT2 (IPH.5) ,定时/计数器T2优先级设定位。同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:80C51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。正在进行的低优先级中断服务,能被高优先级中断请求所中断。 为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。可以演示keil下使用c语言按位设置和对整个寄存器的设置在程序中的使用。C语言的中断函数处理,与汇编语言的区别。中断应用的C语言编程 C51编译器支持在C源程序中直接开发中断程序。中断服务程序是通过按规定语法格式定义的一个函数。 中断服务程序的函数定义的语法格式如下: 返回值 函数名(参数) interrupt m using n MCS-51中断源编号实验步骤:1、 在KEIL C环境下建立一个工程项目2、 编写代码,设置EA、TCON、IP等寄存器3、 编写中断函数4、 编译并连接,处理出现的错误保证调试通过。5、 利用实验项目1、2学到的知识调试,可以使用单步执行和设置断点等方式。6、 调试时须打开调试端口,使用键盘LED仿真板。7、 利用实验项目3中学到的知识同proteus软件观察实验结果。完成实验程序:4、使用定时/计数器作为延时控制,要求两灯在P0.0和P0.1之间按1S互相闪烁。分析思考:1)、利用P3管脚,分别使用下降沿和电平触发方式观察中断差别。2)、观察中断发生前后TCON的变化。实验项目5:中断、定时器小系统综合设计、调试及测试实验目的:1、利用KEIL C软件,编制应用程序控制发光二极管定时闪烁2、掌握定时/计数器工作方式的控制3、分别用中断和查询两种方式实现 实验平台:Windows XP 操作系统、Keil c 开发软件、proteus软件主要实验内容:一、根据定时器的结构与工作原理,选择定时器工作方式并计算初值。二、根据要求编写程序。三、调试代码、编写实验报告。本实验知识要点:一、定时 / 计数器的结构T0、T1均为16位加1计数器。计数值高八位计数值低八位计数值高八位计数值低八位TH0 TH1 TL0 TL1 工作方式控制字 TMOD 工作方式 TCON 1、工作方式控制寄存器 TMOD T1 T0TMOD GATE C/T M1 M0 GATE C/T M1 M0GATE 门控位。 GATE = 0 启动不受 /INT0或 /INT1的控制; GATE = 1 启动受 /INT0 或 /INT1 的控制。C/T 外部计数器 / 定时器方式选择位 C/T = 0 定时方式; C /T = 1 计数方式。M1M2 工作模式选择位。 M1 M0 模式 说明 0 0 0 13位定时/计数器高八位TH(7 0)+ 低五位TL(4 0) 0 1 1 16位定时/计数器 TH(7 0)+ TL(7 0) 1 0 2 8位计数初值自动重装 TL(7 0) TH(7 0) 1 1 3 T0运行,而T1停止工作,8位定时/计数。2、定时 / 计数器控制寄存器TCONTCON TR1 TR0 TR0 定时 / 计数器0运行控制位。 软件置位,软件复位。 与GATE有关,分两种情况: GATE = 0 时,若TR0 = 1,开启T0计数工作; 若TR0 = 0,停止T0计数。 GATE = 1 时,若TR0 = 1 且/INT0 = 1时,开启T0计数; 若TR0 = 1 但 /INT0 = 0,则不能开启T0计数。 若TR0 = 0, 停止T0计数。TR1 定时 / 计数器1运行控制位。 用法与TR1类似。二、定时 / 计数器的四种工作模式1、模式0 T1、T0的等效逻辑结构 (显示投影胶片)计数寄存器TLi 低5位 + THi8位C/T = 0 定时C/T = 1 对外计数。定时:fosc / 12 = 1 /(12/fosc) = 1 / T 等间隔,次数已定,时间确定 T 即对机器周期进行计数。 左图定时时间为nT。 n 计数:脉冲不等间隔。 每个下降沿计数一次 确认一次负跳变需两个机器周期,所以,计数频率最高为fosc / 24。GATE = 0 时,A =“1” B = “1”(TRi = 1时),启动计数 B = “0”(TRi = 0时),停止计数。GATA = 1 时, A =“1”(/ INTXi =“1”) B =“1”(TRi = 1时)启动,B = “0”(TRi = 0时)停止。A =“0”(/ INTXi =“0”)停止。2、模式1与模式0相似。与模式0的区别:计数位数不同。计数寄存器:THi(高8位)+ TLi(低8位)3、模式2与模式0、1的区别:1)计数位数不同; 2)初值自动重装。计数寄存器:TLi(8位) 溢出时 TFiTHi(8位初值)4、模式3T0定时/计数,而T1停止计数,但可作波特率发生器。T0分成两独立定时/计数器TL0和TH0。TL0使用C/T、GATE、TR0、/INT0、TF0定时/计数,TH0使用TR1、TF1 因此,只能用于定时。(展示投影胶片。)模式3时,T1可定时为模式0、1、2的定时/计数,但不可中断,所以一般只作串口波特率发生器用。三、定时/计数器的应用编程前确定参数:(1)定时/计数器T0、T1选择其一,(2)工作方式C/T及GATA,(3)计数初值加1计数、16位。FFFFH X=MN;M=213=8192(模式0) N X M=216=65536(模式1) X M M=28=256 (模式2、模式3)0000H(4)工作模式M1、M0实验步骤:、在KEIL C环境下建立一个工程项目、编写代码,设置EA、TCON、IP等寄存器、编写中断函数、编译并连接,处理出现的错误保证调试通过。、利用实验项目1、2学到的知识调试,可以使用单步执行和设置断点等方式。、调试时须打开调试端口,使用键盘LED仿真板。、利用实验项目3中学到的知识同proteus软件观察实验结果。完成实验程序:5、P0接8个LED,使8个LED闪烁。当奇数次按下INT0的按钮时,8个LED每次同时点亮4个,点亮3次,即D0D3与D4D7交叉点亮3次。偶数次按下INT0的按钮时,则D0D7进行左移和右移2次。当按下INT1的按钮时,产生报警(INT1优先)。6、教材P188,使用查询和中断方式实现方波的设置。观察实验结果,各寄存器的变化。本次实验可以使用软件仿真硬件插件dpj.dll和ledkey.dll进行仿真,并利用proteus软件观察实验结果。前面实验项目3中,已经介绍了dpj.dll、ledkey.dll和proteus软件的使用方法。实验项目6:基于单片机的行列式键盘操作实验实验目的:1、掌握AT89C51与行列式键盘的接口技术。2、使用proteus软件仿真键盘扫描程序,深刻理解键盘扫描程序的含义。实验平台:Windows XP 操作系统、Keil c 开发软件、proteus软件主要实验内容:一、根据行列式键盘的设计原理,编写键盘扫描程序。二、调试代码、编写实验报告。本实验知识要点:一、键盘输入过程: 1、 CPU判断是否有键按下 2 、确定按下是哪个键 3、 此键代表的信息翻译成机器识别的代码 二、扫描程序查询过程: 1 、行输出全为0,无键按下,列输出全为1, 扫描码:F0H2 、有键按下,P14-P17输出非全1,检查按键所在位置 3 、逐行扫描,读出列值4 、对得到的行号和列号译码,得到键值 5 、消除除键的抖动 实验步骤:1、在KEIL C环境下建立一个工程项目。2、编写代码,编译并连接,处理出现的错误保证调试通过。3、利用实验项目3中学到的知识同proteus软件观察实验结果。完成实验程序:7、教材P269键盘扫描程序。实验项目7:双机串行通信实验目的:1、掌握AT89C51双机通信的基本原理。2、实现实现两片AT89C51之间的通信,甲机将数据发送到乙机并显示出来。使用proteus软件仿真程序,深刻理解双机通信的作用。实验平台:Windows XP 操作系统、Keil c 开发软件、proteus软件主要实验内容:一、根据双机通信原理,编写双机通信程序。二、调试代码、编写实验报告。本实验知识要点:在串行通信中,数据是在两个站之间传送的。按照数据传送方向,串行通信可分为三种制式:单工制式(Simplex)、半双工制式(Half duplex)、全双工制式(Full duplex)。其中,单工制式是指甲乙双方通信只能单向传送数据。半双工制式是指通信双方都具有发送器和接收器,双方既可发送也可接收,但接收和发送不能同时进行,即发送时就不能接收,接收时就不能发送。全双工制式是指通信双方均设有发送器和接收器,并且将信道划分为发送信道和接收信道,两端数据允许同时收发,因此通信效率比前两种高。 AT89C51内部有一个可编程全双工串行通信接口。该部件不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。下面将对其内部结构、工作方式以及波特率进行介绍。(1)数据缓冲器(SBUF) SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。此外,在接收寄存器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,这样可以避免在数据接收过程中出现帧重叠错误。发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路不需要双重缓冲结构。在逻辑上,SBUF只有一个,它既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收缓冲器。即CPU对SBUF的读写,实际上是分别访问上述两个不同的寄存器。(2)串行控制寄存器(PCON)串行控制寄存器SCON用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等。它是一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:表1 寄存器收发控制及状态指示表SM0SM1SM2RENTB8RB8TIRISM0 SM1:串行口工作方式选择位。这两位组合成00、01、10、11对应于工作方式0、1、2、3。串行接口工作方式特点见下表。表2 串口工作方式表SM0SM1工作方式功能波特率0008位同步移位寄存器f/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:多机通信控制位。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。注意:TI在任何工作方式下都必须由软件清0。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。(4)波特率发生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。(5)电源控制寄存器PCON(其最高位为SMOD)(6)波特率计算波特率(band rate)是异步通信中每秒钟传送的二进制数码的位数(比特数),单位是位/秒。波特率有以下两种作用:1)反映串行通信的速率;2)反映对传输通道的要求:波特率越高,要求的传输通道的频带宽度就越宽异步通信:波特率为每秒传送的字符数和每个字符位数的乘积。AT89C51串行通信共有4种工作方式,它们分别是方式0、方式1、方式2和方式3,由串行控制寄存器SCON中的SM0 SM1决定。本设计用串行口方式1收发程序,实现两片AT89C51之间的通信。(1)方式1发送 方式1输出时,数据由TXD输出,一帧信息为10位,1位起始位0,8位数据位(先低位)和1位停止位1。当执行一条数据写发送缓冲器SBUF的指令,就启动发送。发送开始时,内部发送控制信号变为有效。将起始位向TXD输出,此后,每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD输出一个数据位。8位数据位全部发送完毕后,置“1” TI。(2)方式1接收 数据从RXD(P3.0)脚输入。当检测到起始位的负跳变时,开始接收数据。定时控制信号有两种):接收移位时钟(RX时钟,频率和波特率相同)和位检测器采样脉冲(频率是RX时钟的16倍,1位数据期间,有16个采样脉冲),当采样到RXD端从1到0的跳变时就启动检测器,接收的值是3次连续采样(第7、8、9个脉冲时采样)进行表决以确认是否是真正的起始位(负跳变)的开始。当一帧数据接收完,须同时满足两个条件,接收才真正有效。1) RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。2) SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则收到的数据装入SBUF和RB8(RB8装入停止位),且置“1”中断标志RI。若这两个条件不同时满足,收到的数据将丢失。实验步骤:1、在KEIL C环境下建立一个工程项目。2、编写代码,编译并连接,处理出现的错误保证调试通过。3、利用实验项目3中学到的知识同proteus软件观察实验结果。完成实验程序:8、用两块AT89C51模拟甲机和乙机,在甲机的P1口和指拨开关相连,通过调节指拨开关来输入数据,、然后把这个数据发出到乙机去。在乙机里,先通过RXD口读取指拨数据,然后P1口通过总线传导各LED灯,P1一共有8个引脚,每个引脚对应一个灯(可以考虑中断和查询两种方法)。实验项目8:系统软件包、第三方应用程序包应用 - RTX51-Tiny实时操作系统实验目的:1、掌握RTX51-Tiny实时操作系统调度机制2、掌握软件开发及调试平台的搭建方法3、通过os_wait函数的学习,能基本使用RTX51-Tiny完成简单的程序设计。实验平台:Windows XP 操作系统、Keil c 开发软件主要实验内容:一、了解并掌握RTX51-Tiny的基本使用方法,特别是掌握os_wait函数的使用。二、能够搭建RTX51-Tiny的开发平台。三、编写实验报告分析实验现象。本实验知识背景:RTX51是一个用于8051系列处理器多任务实时操作系统,RTX51可以简化那些复杂而且时间要求严格的工程的软件设计工作。有二个不同的RTX51版本可以利用:RTX51 Full 使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换, RTX51工作在与中断功能相似的状态下,信号和信息可以通过邮箱系统在任务之间互相传递,你可以从一存储池中分配和释放内存,你可以强迫一个任务等待中断超时或者是从另一个任务或中断发出的信号或信息。RTX51 Tiny 是一个 RTX51的子集它可以很容易地在没有任何外部存储器的单片8051系统上运转,除了下列例外RTX51 Tiny支持许多在RTX51中的特征,RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换不支持抢先式的任务切换,不包括消息历程,没有存储器池分配程序。许多微处理器应用程序要求同时执行两个工作或任务. 对于这样的应用程序一个实时操作系统RTOS 允许灵活的分配系统资源中央处理器存储器等等.)给各个任务 RTX51是一个很好使用的强大的实时操作系统 RTX51可以运行于所有的8051派生机型。可以使用标准 C语言编写和编译一个程序或使用 C51构造编译他们 仅在指定任务标识符和优先权上有一点差别. RTX51程序也要求你载运程序中用include命令引入实施管理的头文件并使用 BL51 linker/locator进行连接和选择适当的 RTX51库文件。单任务程序一个标准的 C语言程序从主函数开始执行,在一嵌入式应用中,主函数通常是一段无限循环的代码可以认为是一个连续执行的单独任务。例如int counter;void main (void) counter = 0;while (1) /* 始终重复 */counter+; /* 计数器加1 */时间片轮转程序更高级的 C语言程序可以在不使用实时操作系统的情况下实现时间片轮转拟多任务系统,在这种系统中任务或功能被一段无限循环程序重复调用。例如int counter;void main (void) counter = 0;while (1) /* 始终重复 */check_serial_io ();process_serial_cmds (); /* 处理串行输入 */check_kbd_io ();process_kbd_cmds (); /* process keyboard input */adjust_ctrlr_parms (); /* adjust the controller */counter+; /* increment counter */用 R T X 5 1 进行时间片轮转调度rtx51也能完成时间片轮转多重任务而且允许准并行执行多个无限循环或任务,任务并不是并行执行的而是按时间片执行的。可利用的中央处理器时间被分成时间片由 RTX51分配一个时间片给每个任务,每个任务允许执行一个预先确定的时间,然后rtx51切换到另一准备运行的任务并且允许这个任务执行片刻,时间片非常段通常为几个毫秒,因此它表现得如同各个任务是同时地执行的。RTX51使用一个8051硬件计时器中断作为定时程序。产生的周期性中断用于驱动 RTX51时钟,RTX51不需要在你的程序中拥有一个主函数,它将自动开始执行任务 0 如果你确实有一个主函数你必须利用 RTX51 Tiny中的 os_create_task函数或RTX51中的 os_start_system函数手工启动 RTX51。下列例子显示一个只使用时间片轮转任务调度的简单的 RTX51应用程序 在本程序里的二个任务是简单计数器回路 rtx51开始执行函数名为 job0的任务 0 这些功能添加了另一个叫做 job1任务 在 job0运行一会儿以后RTX51切换到 job1 在 job0运行一会儿以后RTX51转回到job0 这个过程将不确定地重复下去。#include int counter0;int counter1;void job0 (void) _task_ 0 os_create (1); /* mark task 1 as ready */while (1) /* loop forever */counter0+; /* update the counter */void job1 (void) _task_ 1 while (1) /* loop forever */counter1+; /* update the counter */R T X 5 1 事件即使是在等待一个任务的时间片到达时,你也可以使用 os_wait函数通知 RTX51它可以让另一个任务开始执行,这个功能中止正在运行的当前任务,然后等待一指定事件的发生在这个时候任意数量的其他任务仍可以执行。使用 R T X 5 1 的时间溢出事件你可以用 os_wait函数等待的最简单的事件是事件溢出 RTX51时钟报时信号周期,这类事件可被用于任务中需要延迟一段时间的地方,这可用于查询一个开关状态的代码中。在这样的条件下,只须每隔 50ms左右查询一次开关下一个例子技术示范你可以在允许其他的任务执行的时候使用。os_wait功能延迟任务的执行#include int counter0;int counter1;void job0 (void) _task_ 0 os_create (1); /* mark task 1 as ready */while (1) /* loop forever */counter0+; /* update the counter */os_wait (K_TMO, 3); /* pause for 3 clock ticks */void job1 (void) _task_ 1 while (1) /* loop forever */counter1+; /* update the counter */os_wait (K_TMO, 5); /* pause for 5 clock ticks */在上面的例子中job0像前面叙述的一样启动 job1,然后在增加 counter0计数以后job0呼叫 os_wait函数以暂停个时钟报时信号,这时rtx51切换到下一个任务 job1 在 job1增加counte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论