用汇编讲中断,反而更简单!中断到底是什么?来深入理解中断吧!
Ғылым және технология
想要更加深入的了解单片机的中断,可以稍微了解一下汇编语言,因为仅靠C语言或者书本的讲述,对中断的了解程度只是表象。
而汇编语言是直接跟硬件打交道的,它的每一行代码都直接对应单片机内部的存储器,或寄存器这些。
通过汇编语言,你会对计算机的底层原理有一个更加透彻的理解,比方说中断的原理!
后面会把本视频的图文版发布到微信公众号:爱上半导体,大家可以先关注一下。
想要更加深入的了解单片机的中断,可以稍微了解一下汇编语言,因为仅靠C语言或者书本的讲述,对中断的了解程度只是表象。
而汇编语言是直接跟硬件打交道的,它的每一行代码都直接对应单片机内部的存储器,或寄存器这些。
通过汇编语言,你会对计算机的底层原理有一个更加透彻的理解,比方说中断的原理!
后面会把本视频的图文版发布到微信公众号:爱上半导体,大家可以先关注一下。
Пікірлер: 39
其實很簡單,中斷是一塊硬體電路,它的動作就是把PC(program counter)的值塞入堆疊器,堆疊器指針加一,PC被置入中斷的指向的地方,去了新的地址跑另外的一小段程式直到碰上中斷返回的指令,如8051的RETI,又觸發起動另外一塊硬體電路,它的動作是和上面的相反,從堆疊器取出最上面的值,就是剛進中斷時塞進去的哪個,堆疊器指針減一,用那個值把現有的PC值擠走,回去繼續跑原來中斷發生時被迫離開的那段程式.
谢谢终于明白pc和dptr指针的区别了
講解得非常好 感謝分享
你就是一位天才
頻道講解的不會太複雜,又容易理解,對學習很有幫助
6:45 发生中断后存入堆栈的不止有PC的值,通用寄存器的值也会被存到堆栈中。而且存储这些值的动作,准确的说,也不是由ALU完成的。因为ALU只负责算术和逻辑运算呐。
俺以前就是搞51单片机的,那时候还没有stc,用的是atmel的,后来今年才有的stc,说实话宏晶的处理器真的给力。已经十多年没干这行业了,也不知道发展的什么样子了。
@sharksonata203
8 ай бұрын
我15年就能买到STC的51单片机了😅
做的不错,虽然没都看懂但理解个7788,要是加个实验视频就更好了
终于听懂了什么是中断
3:31 第二根红线的划线划错了位置,应该是划到EX1这一行
Good~
这解说是电脑合成音吗?声音好温柔噢。❤
想听你说车的继电器RELAY , 30,85,86,87的意思。能安排上嘛
頭香 ❤姐姐的解說
@saitama3753
8 ай бұрын
你给谁叫姐姐?给TTS程序吗?
总觉得“地址译码器”的65535个连接不太现实,印刷电路不可能同时印刷65535根tracers。实际上应该是程序计数器里的数字作为获得内存RAM里下一句机器语言指令的内存地址直接去访问对应的内存地址。这是冯诺伊曼架构的精髓。
@gz6x
12 күн бұрын
视频讲的原则上正确,但是实际上是通过多级地址译码器来避免排线太多的问题
ORG 00H 指令把PC设置成00H?ORG只是伪指令,和PC没有关系,只是指示编译程序下面的指令从什么地址开始存放。
請問在3:01的“程序計數器最多也就能控制64字節的存儲單元“,是最多能控制65536個字節吧!還是是控制64K個字節是這個意思嗎?謝謝。
@imsailorjames
8 ай бұрын
65536B = 64KB的呀😂
指令段中还有ORG 13H也是伪指令,没有指出。
如果我的前面不設迴圈的話 會一直依序讀到13H發生中斷嗎? 還是硬體不觸發低準位的話 會直接跳過呢?跳過的機制原理又是怎樣呢? 有點小疑惑
@LiuQixuan
8 ай бұрын
不会,中断是现象也是一种资源,中断程序预留的那一部分存储空间不会被一般程序调用(hack不算)。当然程序的执行也不是简单的12345按顺序执行。实际上是一段一段执行,然后由jump指令在不同段间调转,除了中断指令外,一般指令不能跳转到中断入口。
3:34 第二根红线画错了吧?
所謂地址譯碼器是真的有實體線路65536根嗎?
@arrive_at
2 ай бұрын
16根就可以了,每根有2种状态,2^16次方即可实现65536个地址的选择。
4096下一个是8192,不是8182.
現在開始好奇單片機如何執行命令這件事了?
@user-ev2tj1ti3r
5 ай бұрын
可以学习下计算机组成原理
如果中斷處理程序需要訪問 RAM,但是在處理中斷的時候又接收到了一個新中斷,中斷處理程序怎麼識別自己在第幾層中斷,從而不會吧上一層中斷的臨時數據當作自己的臨時數據😂
@xzdemo1707
8 ай бұрын
一般一个 PC 有很多可以接收中断的IRQ线,是由操作系统调度的,此外中断也分不可被打断与可以被打断的。此外你说临时数据,这里我理解是上下文,切换线程时上下文会由操作系统保存/还原现场,所以中断本身,就跟普通程序一样,并不用关心
@tommymairo8964
8 ай бұрын
@@xzdemo1707 但是這不是 PC 呀😅
@tommymairo8964
8 ай бұрын
@@xzdemo1707 也沒有 OS 😅
@junelu3360
8 ай бұрын
堆栈嘛,比如主程序A执行到a1位置,中断B触发,把a1放到堆栈里,执行到b1的时候中断C又触发了,把b1放到堆栈里。C结束以后,先把b1拿出来继续执行,如果B也结束了就把a1拿出来继续执行。堆栈是后进先出的。
@tommymairo8964
8 ай бұрын
@@junelu3360 所以單片機也帶 sp 嗎🌝
可以學怎麼做電子雞嗎 XD 哈哈
你谈谈电机改发电机吗?谢谢