.定时和中断的应用.docVIP

  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文档。上传文档
查看更多
定时和中断的应用

外部中断的应用 问题描述: 设计流水灯,并利用外部中断(外部中断0、外部中断1自选)让接在P1口的8位流水灯闪烁十次。 图1-1 流水灯PROTEUS仿真图 程序清单: 图1-2 C语言程序 图1-3 汇编程序 仿真效果 图1-4 没有外部中断请求时 图1-5 中断响应 4.程序分析: C语言程序中一共有4个函数:1 是延时函数delay();2 是中断和输出初始化函数init(),为外部中断工作做准备;3 是主函数,在函数里用到while( 表达式 ) 语句,并且表达式一直为真,即表达式取非0 值,构成了无限循环,在循环里执行流水灯程序,并一直检测是否用外部中断请求;4 是外部中断函数,中断函数没有返回值,没有参数,我选的是外部中断1,所以写成viod INT_timer (void ) 2,其中2是外部中断1 在C语言中的入口序号。在中断函数里 unsigend int i = 20 就是为闪烁10次的循环初值。 编写汇编程序时就可以根据C语言程序的写法一步一步往下写就可以了。在汇编程序里需要注意几个地方:1-中断的入口地址,外部中断1的是0013H,就有了ORG 0013H。2-调用函数,在汇编里可以用ACALL或LCALL调用,两者区别就在调用寻址范围,ACALL只能11位地址范内调用,而LCALL是16位寻址,函数返回要用RET。 3-中断函数,进入中断函数必须要对一些数据进行保存,防止数据出错,就要用到进栈(PUSH)和出栈(POP),对栈的操作遵循“先进后出”原则,中断函数用RETI返回。 定时器的应用1 1.题目描述:利用51单片机的定时中断(1或2)设计5MS延时,并用此延时作为流水灯间隔。 图2-1 Proteus仿真原理图 2.程序清单 图2-2 C语言程序 图2-3 汇编程序 仿真效果 图2-4仿真图 4.程序分析: 我选的是定时/计数器0的方式1,时钟频率选择12MHZ。定时/计数器实际是一个加1 计数器,每次计数时间为一个机器周期,12MHZ晶振时,每计数一次就是1us,所以计数5000次就是5MS,这样用定时器设计5MS延时就做好了。由于5MS时间太短,对于流水灯根本看不出效果,所以我用了5MS延时20次(20*5=100MS)。 三、定时器应用2 1.题目描述:利用定时计数器的计数功能设计一个电子计数器,每来一次中断记录一个数,并将数据显示在数码管上,分别利用汇编语言或C语言设计程序设计,利用PROTUSE软件画出电路仿真图,并实现功能仿真。 图3-1 Proteus仿真图 程序清单 图3-2 C语言程序图 图3-3 汇编程序 3.仿真效果 图3-4 无中断请求 图3-5 按键第一次按下 程序分析 我选择定时/计数器0的方式1,要想定时/计数器工作于计数模式,首先TMOD=0x05,在汇编中定时/计数器的入口地址为000BH。其次给TH0和TL0赋初值,我做的是按键按下一次就记一次数,所以设置初值为65535,那么TH0=0xff,TL0=0xff,最后就是开总中断,开定时器中断。

文档评论(0)

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

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

1亿VIP精品文档

相关文档