一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2127|回复: 15
收起左侧

[51单片机] 单片机程序里中断号有用吗

[复制链接]
发表于 2014-10-7 23:01 | 显示全部楼层 |阅读模式
单片机的中断程序里的中断号using n 有啥用?貌似蛇脚interrupt X,X=0——3已经将两个外部中断、两个定时器中断定义明了。
发表于 2014-10-7 23:06 | 显示全部楼层
非常重要!每个中断源有唯一的查询号,程序里对应的是中断程序入口。

点评

能详细些吗?没有看明白。  发表于 2014-10-7 23:29
发表于 2014-10-7 23:06 来自手机 | 显示全部楼层
жΨж
发表于 2014-10-7 23:09 来自手机 | 显示全部楼层
using nж
发表于 2014-10-8 03:31 | 显示全部楼层
using n 是寄存器组,就是R0~R7的组号,一共四组。
interrupt X,才是中断入口号。
发表于 2014-10-8 11:08 | 显示全部楼层
貌似89C51只开一个中断的时候可以不写也能工作。规范一点还是写上好

有的单片机中断有20多个,如果不标识,或者标识错了,不会产生中断的
发表于 2014-10-8 12:03 | 显示全部楼层
interrupt m,“中断发生后去哪里”
using n,“中断处理后如何回来”
发表于 2014-10-8 12:48 | 显示全部楼层
huchuan987 发表于 2014-10-8 03:31
using n 是寄存器组,就是R0~R7的组号,一共四组。
interrupt X,才是中断入口号。

正确。
using n是为了在中断发生时进行快速上下文切换而指定在中端服务程序中使用不同于被中断程序所使用的通用寄存器组号(0-3),当然前提是在中端服务程序中要用到通用寄存器。
这与ARM体系结构中不同的处理器模式使用不同的通用寄存器组类似。
发表于 2014-10-8 12:50 | 显示全部楼层
huchuan987 发表于 2014-10-8 03:31
using n 是寄存器组,就是R0~R7的组号,一共四组。
interrupt X,才是中断入口号。

只有5楼这个是正解,其他人都没想事。

中断中处理行为稍多的话,就会影响到(用到)R0~R7,这时要保护现场的话就得先逐个PUSH R0~R7,退出前还得逐个POP,占用很多时间。
而要想快的话,就可以用using n切换到别的没用到的寄存器组。只要修改PSW一个就行了,而不再需要保护R0~R7,自然就快多了。

由于默认的程序用的是using 0(寄存器组0),所以中断定义中就不应该再用0,否则会出错的。因为这时寄存器组还是跟原来一样的,R0~R7没保护就被修改了,中断返回后R0~R7就不对了。


至于哪个要保护哪个不要保护,这些C编译器都会进行覆盖分析后帮你自动处理好的,一般用户完全可以不用关心,但想深入点提高下效率,还是有必要研究下的。
发表于 2014-10-8 16:23 | 显示全部楼层
中断号有用,只是放在哪个寄存器里根据自己的选择~

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-5 16:18 , Processed in 0.067325 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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