没有合适的资源?快使用搜索试试~ 我知道了~
AT89S52中断函数结构
需积分: 11 1 下载量 56 浏览量
2013-11-29
13:19:31
上传
评论
收藏 50KB PDF 举报
温馨提示
试读
1页
void external_int() interrupt 0 //using 1中的interrupt 0 和 using 1
资源推荐
资源详情
资源评论
AT89S52 中断函数结构
void external_int() interrupt 0 //using 1 中的 interrupt 0 和 using 1
值得提出的是,中断函数类型 void,说明中断函数是不能有返回值的,这点要明
确,所以不要企图让中断函数给你个返回值。还有,函数名后面括弧内是没有参
数的。。。这点也需要注意,中断函数不能传递参数。interrupt 后面的数是中断号。
重点我给你解释下 using。
这是 C51 编译器扩展的关键字。用来选择 80c51 单片机中不同的寄存器组,你也知
道 R0-R7 总共有 4 组,那么 using 后面的数字也就是 0-3 范围里的一个数了。如果不需要
using 的话,编译器会自动选择一组寄存器作为绝对寄存器访问的。 using 对代码是有一定
的影响的。 给你说个简单的例子,你可以想下, 如果定义 void time0() interrupt 1 using 1
假设,我们又在中断里调用了一个 delay();这个 delay 是起延时作用。 那么,我们就需要确
保我们使用的寄存器组是同一组,否则,就会出现混乱。所以,我建议你,不必要时不要使
用 using。
简单来说,51 有 4 组通用寄存器,R0~R7,我们在使用的时候,从来就没有指明用的
是哪个 R0,编译器就会自动选一组通用寄存器作为绝对地址访问。在 c 语言中,我们写一
个函数,例如延时函数,里面用的变量,反汇编之后就是在使用 R0-R7,那么你能确定你
使用的是哪一组寄存器吗? 所以说,使用 using 能选择使用的寄存器组,但同时在“切换”
时要特别小心。你在中断程序里调用别的程序就会出现寄存器组切换问题。。 其实 using 还
有其他的注意地方,因为使用麻烦,我从来不用这个关键字。这也就是我为什么不推荐楼主
用 using。编译器会自己选择一组嘛。 所以只要这样定义一个中断函数就行了:
void FuncName() interrupt lvl 其中 lvl 就是中断的优先级序号。
资源评论
feifei1123
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功