打印

疑问:highgear 大侠说8051不是向量中断?

[复制链接]
16740|79
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘前辈|  楼主 | 2011-10-31 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘前辈 于 2011-10-31 10:00 编辑

摘自 highgear 大侠:

8086 DOS/BIOS的中断8051的中断不同,是向量中断,即cpu 从中断向量表中取出中断程序的地址,然后转到中断程序。



highgear 大侠意思说8051 不是向量中断 ,加上123jj  这两位 论坛上8051学了20年不止的最具权威的老工程师,把老刘这帮51刚入门的菜鸟弄糊涂了。

       记得教授讲课时,我的课堂笔记本上清楚画着教授的课件“8051的中断向量表”,——难道教授讲错了?教材是出版社铅印的,而且不止一本教材上讲过——8051的中断矢量地址。
只能说明咱菜鸟理解错了。——highgear 和教授都是对的。

     咱菜鸟永远被忽悠。谁让你年轻呢,54岁再说吧。

相关帖子

沙发
ayb_ice| | 2011-10-31 09:19 | 只看该作者
他说的应该是指向量表的实际地址是动态可变的
不要咬文嚼字

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Cortex-M0 + 1
板凳
coody| | 2011-10-31 09:24 | 只看该作者
原理一样,只不过8086的是可以“装”上去,而8051的固定。
现在的一些32位的MCU也是可以装向量地址的。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Cortex-M0 + 1
地板
Cortex-M0| | 2011-10-31 09:35 | 只看该作者
LS两位大虾讲解的透彻,学习了~~~

8086 DOS/BIOS的中断与8051的中断确实有所不同,8086的是可以“装”上去的,而8051的是固定的。

使用特权

评论回复
5
刘前辈|  楼主 | 2011-10-31 09:53 | 只看该作者

8051的向量表指向实际地址一样可变!没有不同!

本帖最后由 刘前辈 于 2011-10-31 10:21 编辑

呵呵,咱更疑问了,PC机的向量表动态可变?2个8259的外接管脚能动是吧?

依此理论:8051的向量表的实际地址一样动态可变呀!一样!都是Intel 设计的,一个机制!

highgear 说 INT 08 是时钟中断,向量地址在00000:0020H ,这个0020H内存地址 ,是由4*8=20H得到的,CPU内部的向量地址获取公式4*n能动态改变?咱中国人太厉害:硬件都能动态改变了!
         绝对不可变!可变的,开机阶段BIOS结束后由OS系统软件安装 是它的内容。一个指的是向量地址& ,一个说的是地址的内容*;  一个是指针(&),一个说的是指针指向内存的内容*  。——别搞混了。

     主板上固定外设的向量表由BIOS定位在内存固定位置……里,能动么?动了highgear还怎么知道在0020H ?


、、

使用特权

评论回复
6
highgear| | 2011-10-31 10:11 | 只看该作者
俺搬个板凳,笑看刘xx表演。

使用特权

评论回复
7
刘前辈|  楼主 | 2011-10-31 10:14 | 只看该作者
本帖最后由 刘前辈 于 2011-10-31 10:16 编辑

再咬文嚼字一把:
51中断:
void  test(void)  interrupt  n
{  }

CPU内部向量计算公式,n*8+3  向量表位置在内存0000H 。  一样!

然后是中断函数 test( ) 由编译器确定可动态定位段。


不是用汇编。


、、

使用特权

评论回复
8
Cortex-M0| | 2011-10-31 10:23 | 只看该作者
严格的说,早期的intel 8051,确实不是向量式中断,而是采用intel 首创的查询式中断,查询式中断的硬件结构简单,实现容易,适合当时的制造工艺。但有查询式中断有一个致命的缺点-----费时,故执行周期特长,电工们都知道,早期 intel 的8051,以12个时钟周期为一个指令周期,这在MCU的发展历史上,创下了一个指令周期所需时钟数最长的历史记录,至今无人超越。世界上的MCU几乎都采用向量式中断。当然,还有些MCU比如Z8,除了能用向量式中断,还能使用查询式中断,方便用户使用。

历史在发展,现在的 51,除了指令系统兼容,片内的硬件结构早已改的面目全非,不采用向量式中断也不行,否则不可能实现将一个指令周期的时钟数从 12降为 6,再降为 4,再降为 2,再降为 1,成为 1T的 MCU。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
9
Cortex-M0| | 2011-10-31 10:29 | 只看该作者
因此,highgear 老师讲述传统的 intel 8051不是向量中断,完全正确。

刘小前辈年纪轻轻,学51学的较晚,随着生产工艺的发展,现在的51,在中断实现结构上,确实都改为向量式中断了。

使用特权

评论回复
10
Cortex-M0| | 2011-10-31 10:36 | 只看该作者
在编程上:
8086 从中断向量表中取出中断程序的地址,然后转到中断程序中执行。
而8051直接从指定的保留地址执行中断程序。

使用特权

评论回复
11
HWM| | 2011-10-31 10:41 | 只看该作者
向量中断特指具备由“向量表”直接跳转入中断服务程序的中断系统结构。中断服务程序的入口地址存入向量表(表位置可固定或移动)。如此,MCS-51、ARM、X86的中断归属于哪类应该是非常明确的了。

注意MCS-51的中断进入过程一般需要跳几次?这个问题也就清楚了。

使用特权

评论回复
评分
参与人数 3威望 +3 收起 理由
ccmc + 1
highgear + 1
123jj + 1
12
Cortex-M0| | 2011-10-31 10:51 | 只看该作者
早期的教科书,如复旦大学出版的 51相关类书籍,俺手头有十几本,没有一本讲 51是 向量中断。

相反,讲述其他单片机时,如 8086, 8096, 6800, 68000, 6502, 6805, 6808, Z8, uPD78 等等, 全部讲的是向量中断。

使用特权

评论回复
13
刘前辈|  楼主 | 2011-10-31 10:51 | 只看该作者
本帖最后由 刘前辈 于 2011-10-31 10:59 编辑

highgear 连PC机里有几个8259,他们如何与CPU连接、工作的都不知道,只知道一些纯软的东西,连BIOS都是只知道调用,不知其所以然,还在这没弄啥呦。

8051 的时钟0 中断向量是 000BH,不知道吧。要说软件安装:C51/ L51 的事:

void  timer0(void)  interrupt  1     //  1*8+3=0B  是硬件向量表内容。
{  }


难道谁还理解“ 这里实际是 LJMP timer0”?哈哈,highgear 难道知道把0008:E0DC9169
装入 int 8  号向量地址?  ——服气。认输。


、、

使用特权

评论回复
14
Cortex-M0| | 2011-10-31 10:52 | 只看该作者
当然,后期的 MCU,  无一例外都采用向量式中断。

使用特权

评论回复
15
hp34401a| | 2011-10-31 10:53 | 只看该作者
学习。另,建议对不雅ID清理一下!

使用特权

评论回复
16
Cortex-M0| | 2011-10-31 11:13 | 只看该作者
向量中断特指具备由“向量表”直接跳转入中断服务程序的中断系统结构。中断服务程序的入口地址存入向量表(表位置可固定或移动)。如此,MCS-51、ARM、X86的中断归属于哪类应该是非常明确的了。

注意MCS-51的中断进入过程一般需要跳几次?这个问题也就清楚了。...
HWM 发表于 2011-10-31 10:41


HWM老师正解。

俺班门弄斧,抄点HWM老师的导师-----复旦大学陈章龙老法师的原话。

每个中断源的查询是周期性的按顺序地进行的。其方法是在每个机器周期期间对各个中断标志进行采样,在下一周期则对采样得到的值按次序查询。如果查询时发现某个中断标志已经置位,说明有中断申请,则按查询次序先发现的中断申请将被执行。


题外话:
按照HWM老师的指示,MCS-51的中断进入过程一般需要跳几次?从上面陈章龙老法师的原话中可以得出结论,不止一次吧~~~
而向量中断的特点就是当场采样,立刻执行,仅需一次~~~
因些,传统的MCS-51的中断,到底是查询中断还是向量中断,一目了然~~~
当然,毫无疑问,现在的快速51, 如 1T的 51, 无一例外都采用向量式中断, 否则无法快速响应中断。

使用特权

评论回复
17
123jj| | 2011-10-31 11:16 | 只看该作者
HWM老师讲解的入木三分,学习了~~~

使用特权

评论回复
18
123jj| | 2011-10-31 11:40 | 只看该作者
非要把硬件实现和软件实现放在一起忽悠。。
王奉瑾 发表于 2011-10-31 11:38



只能说明,LZ的忽悠功力没老王的强大~~~  :lol

使用特权

评论回复
19
刘前辈|  楼主 | 2011-10-31 12:09 | 只看该作者
同意12楼HWM老师的详尽解释,我这本全美通行的8051教材上关于8051中断向量表的叙述和你的讲述完全一样。——也就是说和X86向量中断CPU操作完全一样。

同意13楼Cortet-M0版主的解释:新一点的51教材都把51中断讲述为向量中断。——其实,51内核并没有变化。——都是Intel8051内核蓝本。——我认为原因在于先有国外教材把51中断讲述为向量中断,然后国内教授跟风翻译。过去旧的国内教材不敢讲,主要是没有先例。——51内核从上世纪80年代到现在并无实质性的改变,中断结构还是一样。说明旧的8051 也属于向量中断。尽管和X86不完全一样。

我这本全美通行优秀教材,中国由中科院、北大、清华、国防科大、复旦、上海交大、南大、浙大、中科大、哈工大、西安交大、人大、北航、北邮、中山大学、郑州大学,解放军理工大、中国国家信息安全测评认证中心等重点大学教材中是这么讲的:(难抄,看看有没有电子版粘贴)

哪位网友是上面重点大学毕业的?是不是学的下面这个教材?反正我是。讲得一清二楚。和HWM老师一样。

《8051微控制器和嵌入式系统》[美]Muhammad Ali Mazidi,Janice Giliispie  Mazidi,……著, 严隽永译    机工出版社

P255


、、

使用特权

评论回复
20
Cortex-M0| | 2011-10-31 12:59 | 只看该作者
——51内核从上世纪80年代到现在并无实质性的改变 ...
刘前辈 发表于 2011-10-31 12:09



51内核从上世纪80年代到现在,  已突飞猛进,有了实质性的突破,将当时的需运行12个机器周期为一个指令周期,发展到现在仅需1个机器周期为一个指令周期,这种技术上的突破,在当时是无法想像的。。。。

因此,除了指令的兼容性,其本硬件的兼容性,内核,硬件实现技术已有了翻天复地,改朝换代的变化。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:做自己所热爱的,并热爱自己所做的。

24

主题

1038

帖子

4

粉丝