要求:利用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 傳送 接收的解決併發操作,主要防止重複呼叫該函式,等待函式的硬體還沒操作完才允許再呼叫,接收一...