第七节课 外部中断模块化编程和状态机思想.pptVIP

第七节课 外部中断模块化编程和状态机思想.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七节课 外部中断模块化编程和状态机思想

第七节课 外部中断、模块化编程和状态机思想 11医学仪器检测 黄奕晖 QQ:547126338 TEL EA — ET2 ES ET1 EX1 ET0 EX0 IE 中断允许寄存器IE (0A8H) EX0/EX1/ET1/ET0/ES 位: 分别是INT0/1,Timer0/1,串行口的中断允 许控制位: =0 时禁止中断; =1 时允许中断。 ET2:T2中断允许控制位(仅52系列有) =0 时禁止中断; =1 时允许中断。 EA:总的中断允许控制位(总开关): =0 时禁止全部中断;=1 时允许中断。 外部中断 定时器控制寄存器TCON (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。 IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平触发; =1:在INT0/INT1端申请中断的信号负跳变触发. TCON:Timer控制寄存器,低4位管理外部中断 外部中断 ?在CPU已经开放了外部中断允许的前提下: ?在INT0/INT1引脚输入一个负脉冲或低电平, ?TCON寄存器中的IE0/IE1标志位自动变“1”, ?检测到IE0/IE1变“1”后,将产生指令: 执行中断服务程序, ?并将IE0/IE1标志位自动清“0”,以备下次申请。 外部中断(INT0,INT1)申请过程 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON 中断服务程序的写法 Void 函数名() interrupt 中断号 { 中断服务程序内容 } 注意:中断函数不带返回值,前面用void;中断函数不 带任何参数,所以函数名后面为空。 5.interrupt m 修饰符 在该修饰符中,m的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 using n修饰符 修饰符using n用于指定本函数内部使用的工作寄存器组,其中n的取值为0~3,表示寄存器组号。 可以省略 省略后系统自动选择 模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。在系统的结构中,模块是可组合、分解和更换的单元。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。它可以通过在不同组件设定不同的功能,把一个问题分解成多个小的独立、互相作用的组件,来处理复杂、大型的软件。 模块化编程 电脑的各个模块 数独机程序的模块化。如果不模块化,一个很明显的问题,数独机的数万行程序在一个C文件里,这样的程序会让人眼花缭乱,不知道在写什么。 为什么要模块化 因为当程序大了之后,一个人写程序必定会被一个团队写程序所取代。这时团队里个人只需要负责自己的模块就行。方便分工。同时模块化还可以降低程序复杂度,使程序设计、调试和维护等操作简单化。 stdio.h里头的小部分 模块化的基础 如何写h文件 C文件 h文件 h文件写什么 各种声明 宏定义 Typedef 其他 extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。 要更深层次地了解和使用模块化,只有多多编程和多多思考。这样才能掌握得更加透彻。 状态机的实现 状态机就是状态转移图。举个最简单的例子。人有三个状态健康,感冒,康复中。触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。所以状态机就是健康-(t3)-〉健康;健康-(t1)-〉感冒;感冒-(t3)-健康;感冒-(t2)-〉康复中;康复中-(t4)-〉健康。等等。就是这样状态在不同的条件下跳转到自己或不同状态的图。 状态机的编写 switch(STATE) { case STATE1: …… break; case STATE2: …… break; case …… : …… default: break; } 比如通过定时器计时中断,每当过了10ms时,执行下数码管的程序;每当过了15ms时执行下扫描按键的程序;每当过了100ms时执行下led的亮灭程序。这样也是状态机的一种应用。 还有一个例子,对于按键的扫描,一个按键按下去有多种状态。比如没按、按下去、消抖、消抖后还按下去、按下去1s、按下去2s、1s内连续按2下,1s

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档