找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3474|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机中断函数问题分析

[复制链接]
跳转到指定楼层
楼主
ID:37685 发表于 2013-9-5 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:单片机中断中void time0() interrupt 1 using 1

中断函数类型void,说明中断函数是不能有返回值的,这点要明确,所以不要企图让中断函数给你个返回值。还有,函数名后面括弧内是没有参数的。。。这点也需要注意,中断函数不能传递参数。interrupt 后面的点是中断号。重点我给你解释下using。这是C51编译器扩展的关键字。用来选择80c51单片机中不同的寄存器组,你也知道R0-R7总共有4 组,那么using 后面的数字也就是0-3范围里的一个数了。如果不需要using的话,编译器会自动选择一组寄存器作为绝对寄存器访问的。using对代码是有一定的影响的。给你说个简单的例子,你可以想下,如果定义 void time0() interrupt 1 using 1假设,我们又在中断里调用了一个delay();这个delay是起延时作用。那么,我们就需要确保我们使用的寄存器组是同一组,否则,就会出现混乱。
void INT0()interrupt 0 using 1
{....
.....
}
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;


using 0 是第0组寄存器;
using 1 是第1组寄存器;
using 2 是第2组寄存器;
using 3 是第3组寄存器;


51单片机内的寄存器是R0--R7(不是R0-R3)


R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。


using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)


using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(08H)....R7(0FH)


using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是10H-17H。R0(10H)....R7(17H)


using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是18H-1FH。R0(18H)....R7(1FH)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表