- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言在8051单片机上的扩展(KEIL中interruptusing关键字的用法)
C语言在8051单片机上的扩展(KEIL中interrupt、using关键字的用法)
直接访问寄存器和端口
定义
sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE sbit EA 0x9F
操作
ADCON = 0x08 ; /* Write data to register */ P1 = 0xFF ; /* Write data to Port */
io_status = P0 ; /* Read data from Port */ EA = 1 ; /* Set a bit (enable all interrupts) */
在使用了interrupt 1 关键字之后,会自动生成中断向量
在 ISR中不能 与其他 后台循环代码(the background loop code) 共享 局部变量
因为 连接器 会复用 在RAM中这些变量的 位置 ,所以 它们会有不同的意义,这取决于当前使用的不同的函数
复用变量对 RAM有限的51来将 很重要。所以,这些函数希望按照一定的顺序执行 而不被中断。
timer0_int() interrupt 1 using 2{ unsigned char temp1 ; unsigned char temp2 ; executable C statements ;}
interrupt声明 表示 向量生成在 (8*n+3),这里,n就是interrupt参数后的那个数字这里,在08H的代码区域 生成 LJMP timer0_int 这样一条指令
using tells the compiler to switch register banks on entry to an interrupt routine. This context switch is the fastest way of providing a fresh 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 a register bank, since there is no risk that they will interrupt each other.
using 告诉编译器 在进入中断处理器 去切换 寄存器的bank。这个contet切换是为中断处理程序的局部变量提供一个新鲜的寄存器bank 最快的方式。 对时序要求严格的程序,是首选的 stack寄存器(保存寄存器到stack)方式。
注意:同样优先级别的中断 可以共享 寄存器bank,因为 他们每次将中断 没有危险
If a USING 1 is added to the timer1 interrupt function prototype, the pushing of registers is replaced by a simple 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
您可能关注的文档
最近下载
- 派出所校园防欺凌方案.docx VIP
- 汽车钢板弹簧后悬设计答辩--公开课件设计.ppt VIP
- 义务教育版(2024)七年级全一册信息科技 第9课 数据传输有新意 教案.docx VIP
- 7氯丁橡胶总结.ppt VIP
- 华为HCIA-GaussDB GaussDB应用开发 H13-911考试题库-下(判断、填空题).docx VIP
- DB37T5072-2016山东建筑工程建筑结构施工技术资料-全套资料表格word.docx VIP
- DB37T5072-2016山东建筑工程建筑结构施工技术资料-全套资料表格word.docx VIP
- DB37T5072_2016山东建筑工程建筑结构施工技术资料_[全套]资料表格word.docx VIP
- 一年级拼音书写四线三格.docx VIP
- 军民航防相撞课件.pptx VIP
文档评论(0)