C51 定时器延时 堆栈

[复制链接]
查看11 | 回复2 | 2011-7-15 22:23:08 | 显示全部楼层 |阅读模式
程序中不出现1ms以上的指令延时,比如delay()这样的函数,所有的长时间的延时都是用定时器延时。
例如:

在一个子函数中,要使用延时。那么就用定时器来作延时时间的计算.在这个时间段内。保护现场以及寄存器,接下来让PC指针回到主函数执行其他程序,这样就做到了释放CPU。
不知道我这样理解对吗.

如果正确。那么实现这样的程序是否要用到设置堆栈?如果要用到堆栈那么C51如何压栈出栈等??
加分

回复

使用道具 举报

千问 | 2011-7-15 22:23:08 | 显示全部楼层
如果没有用using指定你所用的寄存器组的话那么R0~R7都会入栈,当然入站的还有当前的PC,PSW等,如果想要节省入栈的时间可以指定using 0 就是用R0,只有R0会入栈,中断结束时压栈的数据会自动出栈。如果用汇编写的话就不一样了,有时候会更简单一点吧。如果你的程序里面只是用到了R0的话就是直接PUSH R0,就好了,用到什么就PUSH 什么,但是要注意POP的时候要与之对应。(PC是自己压栈的)...
回复

使用道具 举报

千问 | 2011-7-15 22:23:08 | 显示全部楼层
请问以下的题目中设置堆栈和保护现场、恢复现场有什么区别和联系吗?MOV SP,#60H 设置堆栈是设置堆栈的起始存储单元,PUSH ACC ;保护现场PUSH PSWPUSH DPLPUSH DPH ,就是在60H单元开始依次存储ACC、PSW、DPL、DPH另外,中断的返回RETI是回到SJMP $吗? 不是,返回RETI是...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行