- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 基本编程技术2.ppt
第六章 基本编程技术 基于MCS-51的编程 基于rtx51-tiny 编程的基本概念 计算机硬件 通用型(执行文件,RAM运行) 嵌入式(固化在ROM中运行,或shadow) 操作系统 引导与环境的建立 任务调度 文件系统 与应用程序的关系:捆绑或独立 编程环境对程序结构的影响 开始——运行——退出 初试化——无穷循环; 无OS 带OS时,多任务 无操作系统的前后台方式程序编写 循 环 流水灯的例子 超循环 状态机编程算法 任务分解为 状态转移 状态设置 转移条件由前台标志决定或由任务状态决定 红色箭头为出错处理或状态维持 超循环 状态机在串行数据通信中的作用 通信规约 同步字 命令字 数据长度 数据 校验 命令执行 Status = 0 =1 =2 =3 =4 =5 利用前后台及状态机技术的编程示例 设单片机接收命令并执行; 字符编码:9600,N,8,1(无校验8位,1停止位) 通信规约:7Eh,Comm,Len,Data,Verify 7Eh: 同步字符7Eh,单同步; Comm: 命令,1字节,合法命令为0,1,2 Len: 数据长度,1字节,≤8 Verify: 校验和,从Comm字节起到此字节之前所有字节内容累加,累加和为1字节,溢出丢弃 单片方式,无外部RAM,fosc=11.0592MHz 任务实现分析 串行口的初试化,中断接收编程; 前台中断:接收数据到40-5Fh循环缓冲队列; 接收存数指针rHnd; 取数指针gHnd; gHnd = rHnd表示队列为空; 注意 后台以状态变量status控制规约的解析过程; 不满足执行条件,状态保持; 正常执行依次递进; 出现错误状态变量清0,丢弃数据 数据校验正确时执行命令 具有可抢占式任务调度的前后台系统 MCS-51实现任务抢占 EXTRN CODE (F_disp) CSEG AT 001Bh LJMP T1SRV T1_ISR SEGMENT CODE RSEG T1_ISR T1SRV: MOV TH1,#1Fh MOV TL1,#00h CALL isr_ret PUSH DPH PUSH DPL PUSH ACC PUSH PSW MOV PSW,#0 PUSH 0 call F_disp POP 0 POP PSW POP ACC POP DPL POP DPH ret isr_ret: RETI END 一些细节 EXTRN CODE (F_disp) CSEG AT 001Bh LJMP T1SRV T1_ISR SEGMENT CODE RSEG T1_ISR T1SRV: MOV TH1,#1Fh MOV TL1,#00h CALL isr_ret PUSH DPH PUSH DPL PUSH ACC PUSH PSW MOV PSW,#0 PUSH 0 call F_disp POP 0 POP PSW POP ACC POP DPL POP DPH ret isr_ret: RETI END 具有可抢占式和优先级任务调度的前后台系统 * 系统启动代码 任务1 任务2 任务N 后台(任务) ISR_1 ISR_2 ISR_1 … 前台(中断) 前台主要: 定时中断 通信中断 外部事件中断 ISR主要设置 Flags 后台的循环主要: 查询标志,并根据标志 完成定时任务 数据收发 外部事件处理 清除 Flags 信 号 量 撤消信号 送数 数据更新 延时等待 置初值 效率? 多个任务都需要等待时如何协调? 如果有繁重的计算,CPU资源如何发挥作用? 初试化 时间标志 其它任务 更新数据,送数 撤消定时标志 Yes 定时标志 生成算法 中断 响应 中断 返回 全程变量 定时标志 计算辅助变量 状态0 状态1 状态2 Sts=? Sts=0 条件满足 执行该状态的任务 结果 Sts++ Sts=0 No Yes OK Error Sts=N 条件满足 执行该状态的任务 结果 Sts=0 Sts=0 No Yes OK Error Sts=1,…,N-1 转移条件 收到同步字 收到命令字 收到数据长度字节 收到数据 校验计算正确 执行,Status=5 系统启动代码 任务1 任务2 任务N 后台(任务) ISR_1 ISR_2 ISR_1 … 前台(中断) 调用相关指令 开放中断系统 执行时间 关键性任务 子程序返回 当前任务可剥夺 函数 F_disp() 为时间关键性任务,必须在T1中断后执行,简单的处理方法是将F_disp的全部代码纳入
文档评论(0)