51单片机定时器的应用.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文档。上传文档
查看更多
51单片机定时器的应用

51单片机定时器的应用 原文地址:中断的关键字,n是中断号提供中断程序的入口地址。 0-INT0 1-T0 2-INT1 3-T1 4-串行中断5-T2 直接访问寄存器和端口 定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON;0xDE sbit EA 0x9F 操作 ADCON=0x08; P1=0xFF; io_status=P0; EA=1; 在使用了interrupt 1关键字之后,会自动生成中断向量 在ISR中不能与其他后台循环代码(the background loop code)共享局部变量 因为连接器会复用在RAM中这些变量的位置,所以它们会有不同的意义,这取决于当前使用的不同的函数 复用变量对RAM有限的51来将很重要。所以,这些函数希望按照一定的顺序执行而不被中断。 timer0_int()interrupt 1using 2 { unsigned char temp1; unsigned char temp2; executable Cstatements; } interrupt声明表示向量生成在(8*n+3),这里,n就是interrupt参数后的那个数字 这里,在08H的代码区域生成LJMP timer0_int这样一条指令 usingtells the compiler to switch register banks on entry to an interrupt routine.Thiscontextswitch is the fastest way of providing afresh registerbank for an interrupt routines local data and is to be preferred to stacking registers for very time-critical routines.Note that interrupts of the same priority can share aregister bank,since there is no risk that they will interrupt each other. using告诉编译器在进入中断处理器去切换寄存器的bank。这个contet切换是 为中断处理程序的局部变量提供一个新鲜的寄存器bank最快的方式。对时序要求严格的程序,是首选的stack寄存器(保存寄存器到stack)方式。 注意:同样优先级别的中断可以共享寄存器bank,因为他们每次将中断没有危险 If aUSING 1is added to the timer1 interrupt function prototype,the pushing of registers is replaced by asimple MOV to PSW to switch registerbanks.Unfortunately,while the interrupt entry is speeded up,the direct register addressing used on entry to sys_interp fails.This is because C51 has not yet been told that the registerbank has been changed.If no working registers are used and no other function is called,the optimizer eliminiates teh code to switch register banks. 如果在timer1的中断函数原型中使用USING 1,寄存器的pushing将被MOV to PSW切换寄存器bank所替换。 不幸的是,当一个中断入口被加速时。用在入口的直接寄存器寻址将失败。 这是因为C51没有告诉寄存器bank已经改变。如果不工作的寄存器将被使用,如果没有其他函数被调用,优化器. Logically,with an interrupt routine,parameters cannot be passed to it or returned.When the interrupt occurs,compiler-inserted code is run which pushes the accumulator,B,DPTR and the PSW(program status word)onto the stack.Finally,on exiting the interrupt routine,the items previously s

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档