彙編 深度理解中斷

2022-03-31 01:37:40 字數 1265 閱讀 8681

要求:利用t0的工作模式1產生1ms定時,在p1.0引腳輸出週期為2ms的方波。設微控制器晶振頻率fosc=12mhz。要求如下:分別採用查詢方式和中斷方式編寫程式。

一、中斷模式

cpl p1.0 控制翻轉

設定初值。

中斷:org 0000h ;偽指令

ljmp main ;這是實際上的第一條指令,使用長轉移

org 000bh ;web中斷用0003h,定時器使用000bh

ljmp insert

org 0100h

main:mov tmod,#01h

;接下來啟動定時器

setb tr0

setb et0 ;小開關

setb ea ;總開關

mov th0,#0fch ;如果當成數字,那麼就要加0;如果是字母,就不用加0

mov tl0,#18h ;初始化也放在main函式裡

sjmp $ ;死迴圈,反覆執行這段指令。其實這個指令是可以被代替的,用其他正常執行的**代替

org 0200h

insert:

;模式0和模式1,初值需要再設定一次,之所以能進入insert,是因為計時器溢位,溢位後觸碰到中斷,所以在中斷服務程式中還需要再賦值

mov th0,#0fch

mov tl0,#18h

cpl p1.0

reti

明白這個處理順序,就可以徹底理解中斷了。代表執行的過程:org 0000h ==> org 0100h ==> org 000bh ==> org 0200h ==>reti 返回到sjmp $

定時器存在main裡,不在中斷子程式裡。

pc是乙個16位的計數器。用於存放和指示下一條要執行的指令的位址。定址範圍達64kb。pc有自動加1功能,以實現程式的順序執行。pc沒有位址,是不可定址的,無法用指令對它進行讀寫。但在執行轉移、呼叫、返回等指令時能自動改變其內容,以改變程式的執行順序。

二、查詢方式

(tf0=1,溢位。溢位就反轉)

org 0000h

ljmp main

org 0100h

main:mov tmod,#01h

setb tr0

loop3:mov th0,#0fch

mov tl0,#18h

loop1:jbc tf0,loop2 ;等於1符合條件轉移,順帶著清零

sjmp loop1

loop2:cpl

sjmp loop3

彙編 (十) 內中斷

1.1 內中斷的產生 當cpu內部有下面內容發生的時候,將產生相應的中斷資訊,8086cpu使用中斷型別碼的資料來標識中斷資訊的 中斷型別碼為乙個位元組型資料,可以表示256種中斷資訊 1.2 中斷向量表 cpu用 8位的中斷型別碼 通過 中斷向量表 找到相應的 中斷處理程式的入口位址。cpu如何找...

理解中斷 3

4 下半部 在中斷處理過程中,不能睡眠。另外,它執行的時候,會把當前中斷線在所有處理器上都遮蔽 在ack中完成遮蔽 更糟糕的情況是,如果乙個處理程式是sa interrupt型別,它執行的時候會禁上所有本地中斷 通過cli指令完成 所以,中斷處理應該盡可能快的完成。所以linux把中斷處理分為上半部...

linux 中斷理解

1 程序 執行緒只針對的是應用層,而核心呼叫 驅動沒有這種概念,呼叫的都是核心呼叫裡相同的函式或變數,所以應用層多個應用操作同個硬體時,特別是要加互斥操作,8250通過cs針腳決定傳送資料給哪個串列埠 2 傳送 接收的解決併發操作,主要防止重複呼叫該函式,等待函式的硬體還沒操作完才允許再呼叫,接收一...