回覆列表
-
1 # fmotm3347
-
2 # 使用者8209154827005
SJMP $意味著跳轉到該指令的開頭以開始執行,因此它變為迴圈執行,就地跳轉,通常用於等待中斷。
但是本指令也不宜濫用。這是一條死迴圈指令,如果系統的中斷是開放的,那麼SJMP $指令實際上是在等待中斷,當有中斷申請後,CPU 轉至執行中斷服務程式。
中斷返回時,仍然返回到這條死迴圈指令,繼續等待中斷,而不是返回到該指令的下一條指令。這是因為執行SJMP $後,PC 仍指向這條指令,中斷的斷點就是 [3] 這條指令的首位元組地址。
擴充套件資料
1)在51中,與外部儲存器RAM打交道的只可以是A累加器。所有需要送入外部RAM的資料必需要透過A送去,而所有要讀入的外部RAM中的資料也必需透過A讀入。
在此我們可以看出內外部RAM的區別了,內部RAM間可以直接進行資料的傳遞,而外部則不行,比如,要將外部RAM中某一單元(設為0100H單元的資料)送入另一個單元(設為0200H單元),也必須先將0100H單元中的內容讀入A,然後再送到0200H單元中去。
2)要讀或寫外部的RAM,當然也必須要知道RAM的地址,在後兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由於Ri(即R0或R1)只是一個8位的暫存器,所以只提供低8位地址。因為有時擴充套件的外部RAM的數量比較少,少於或等於256個,就只需要提供8位地址就夠了。
3)使用時應當首先將要讀或寫的地址送入DPTR或Ri中,然後再用讀寫命令。
SJMP $意味著跳轉到該指令的開頭以開始執行,因此它變為迴圈執行,就地跳轉,通常用於等待中斷。但是本指令也不宜濫用。這是一條死迴圈指令,如果系統的中斷是開放的,那麼SJMP $指令實際上是在等待中斷,當有中斷申請後,CPU 轉至執行中斷服務程式。中斷返回時,仍然返回到這條死迴圈指令,繼續等待中斷,而不是返回到該指令的下一條指令。這是因為執行SJMP $後,PC 仍指向這條指令,中斷的斷點就是 [3] 這條指令的首位元組地址。擴充套件資料1)在51中,與外部儲存器RAM打交道的只可以是A累加器。所有需要送入外部RAM的資料必需要透過A送去,而所有要讀入的外部RAM中的資料也必需透過A讀入。在此我們可以看出內外部RAM的區別了,內部RAM間可以直接進行資料的傳遞,而外部則不行,比如,要將外部RAM中某一單元(設為0100H單元的資料)送入另一個單元(設為0200H單元),也必須先將0100H單元中的內容讀入A,然後再送到0200H單元中去。2)要讀或寫外部的RAM,當然也必須要知道RAM的地址,在後兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由於Ri(即R0或R1)只是一個8位的暫存器,所以只提供低8位地址。因為有時擴充套件的外部RAM的數量比較少,少於或等於256個,就只需要提供8位地址就夠了。3)使用時應當首先將要讀或寫的地址送入DPTR或Ri中,然後再用讀寫命令。