第3章 51单片机中断控制.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言循环移位指令 汇编语言减1条件转移指令: 寄存器减1条件转移指令 ( DJNE Rn,rel ) 直接地址减1条件转移指令 ( DJNE direct,rel) C语言实现要求所需的三个知识点: 自增、自减运算符 ++i :i自增1后再参与其它运算。 --i : i自减1后再参与其它运算。 i++: i参与运算后,i的值再自增1。 i-- : i参与运算后,i的值再自减1。 移位指令 C语言也同样有自己的移位命令,但和汇编语言是有区别的: 例如 P11:表示P1逐位向左移动一位;P1n:表示P1逐位向左移动n位。 同样 P11:表示P1逐位向右移动一位;P1n:表示P1逐位向右移动n位。 循环左移、右移子程序 for语句 for(表达式1;表达式2;表达式3) 语句 中断允许控制寄存器(IE) EA中断允许中控制位,EA=0 :中断总禁止;EA=1:中断总允许。这位相当于一个总的中断开关。 EX1=0:禁止外中断1;EX1=1:允许外中断1,前提是EA=1 EX0=0:禁止外中断0;EX0=1:允许外中断0,前提是EA=1 外中断控制寄存器 IT1=0:外中断1采用电平触发的方式;IT1=1:外中断1采用脉冲触发的方式。 IT0=0:外中断0采用电平触发的方式;IT0=1:外中断0采用脉冲触发的方式。 IE1:外中断1请求标志位,当外中断1发生,IE1自动置1,中断相应完成以后,单片机自动清零。 IE0:外中断0请求标志位,当外中断0发生,IE0自动置1,中断相应完成以后,单片机自动清零。 定时器控制寄存器(TCON) 外中断控制电路 C51中断序号定义 C51寄存器组序号定义 第3章 51单片机对中断的控制 一、流水灯程序改进 二、中断控制实例 寻找流水灯执行规律 设置计数变量 使用移位指令 判断计数变量的状态 流水灯程序改进流程规划: 程序改进关键点: 1、设定一个计数变量。 2、控制变量值的状态。 3、判断变量是否符合条件。 4、循环移位语句的使用。 RL A ;循环左移 RR A ;循环右移 RLC A ;带位循环右移 RRC A ;带位循环左移 循环左移指令(RL A)举例 设移位前累加器A的状态: 则移位后累加器A的状态: 举例: MOV A,#0FEh RL A 运行结果: A的值为 0FDH 带位循环左移指令(RLC A)举例 设移位前累加器A的状态和进位标志C的状态为: 则移位后累加器A的状态和进位标志为C的状态为: 举例: CLR C MOV A,#0FEh RLC A 运行结果: A的值为: 0FCH C的状态为:1 DJNE Rn,rel DJNE direct,rel 汇编语言改进流水灯程序及流程图 1、变量自加、自减(变量控制) 2、移位命令 3、for循环指令(循环控制) 注意C语言的移位并不是像汇编语言那样是循环移动的,假设P1的状态为0XFE。 再看看C语言右移指令是什么效果,同样假设我们P的状态为0XFE。则: 虽然C语言中没有专门用来循环左移或循环右移的运算符。但是C语言有强大的库函数,在库函数中有专门的循环左移或循环右移的子程序来让我们调用。它们分别是:_crol_,_cror_。 _crol_为循环左移子程序,_cror为循环右移子程序。 假如要将P1循环左移一位,则调用的格式位 P1=_crol_(P1,1),如果循环左移两位,则:P1=_crol_(P1,2),非常方便吧。 _cror_是循环右移子程序,调用的格式和循环左移是一样的。 由于是调用的是库函数,所以我们必须文件包含#includeintrins.h,intrins.h是包含这两个子程序的库函数文件。C语言还有很多的这样的库函数,可供我们方便的调用,从这点来说学习C语言是相当实惠的。 进入for循环后,先执行表达式1的语句,表达式1一般进行循环变量的初始化;而表达式2则一般作为判断语句,判断循环变量条件是否达到指定的要求;如果符合循环条件则先执行循环体中的程序语句,再执行表达式3的语句,表达式3则一般对循环变量递增或递减,用于控制循环的次数;每一次的循环都会执行表达式2,则判断循环变量是否仍符合循环的条件,如果不再符合,则跳出for循环。 上面的讲述方法大家可能不是很好理解,for语句最简单的应用形式,也是最容易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增量) 语句; 或: for(循环变量赋初值;循环条件;循环变量增量) { 语句;}

文档评论(0)

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

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

1亿VIP精品文档

相关文档