你知道真正的「讀引腳」和「讀鎖存器」指令的區別嗎

2022-05-16     大方老師單片機

原標題:你知道真正的「讀引腳」和「讀鎖存器」指令的區別嗎

你知道真正的讀引讀鎖存指令的區別

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

某些指令說明

-讀引讀鎖存指令的區別

.關於並I/O讀引讀鎖存指令的區別

例如,P1P1.0引腳外接一個發光二極LED的陽極LED的陰極接地。

若想查看一下單片機剛才P1.x腳輸出的信息01,如果直接讀引腳,結果顯然錯誤。

-讀引讀鎖存指令的區別

正確做法是D鎖存器Q端狀態,那裡儲存的才是前一時刻送P1.0的真實值。就是說,凡P1口前一狀態以便修改後再送的情形,都應讀鎖存Q端信息,而不是讀取引腳的信息。

P1口外接輸入設備時,要P1口引腳上反映真實的輸入信號,必須設法先讓該引腳內部的場效應管截止才行,否則當場效應管導通時P1腳上將永遠為低電平,無法正確反映外設的輸入信號。讓場效應管截止,就是用指令P1口的相應位送一電平,這就是為什麼讀引腳之前,定要先送的原因。

-讀引讀鎖存指令的區別

MOV CP1.0讀的P1.0腳,同樣,指MOV AP1也是讀引腳指令,讀引腳指令之前一定要有P1.01的指令。而指CPL P1.0讀鎖存,也--指令,它會先P1.0的鎖存器Q端狀態,接著取反,然後再送P1.0引腳上。而指ANL P1A讀鎖存命令。類似--指令舉例如下:

INC P1

XRL P3A

ORL P2A

ANL P1A

CPL P3.0

-操作數的位元組地址和位地址的區分問題

關於操作數的位元組地址和位地址的區分問題

如何區別指令中出現的位元組變量和位變量?

例如指MOV C40H和指MOV A40H兩條指令中源操作40H都是以直接地址形式給出的40H是位元組地址還是位地址?對於助記符相同指令,觀察操作數就可看出。顯然前條指令中40H肯定是位地址,因為目的操作C是位變量。後條指令40H是位元組地址,因為目的操作A是位元組變量。

-累加AAcc的書寫問題

.關於累加AAcc的書寫問題

累加器可寫AAcc,區別是什麼?

Acc彙編後的機器碼必有一個位元組的操作數是累加器的位元組地E0HA彙編後則隱含在指令操作碼中。例:INC A的機器碼,查指令表04H。如寫INC Acc後,則成INC direct的格式,再查指令表,對應的機器碼05H E0H

-累加AAcc的書寫問題

.關於累加AAcc的書寫問題

在對累加A的直接尋址和累加A的某一位尋址要Acc,不能寫A。例如:

POP Acc不能寫POP A

SETB Acc.0,不能寫SETB A.0

-書寫兩16進位數據前要0"

.書寫兩16進位數據前要0

經常遇到必須在某些數據或地址的前面多填一0,否則彙編就通不過?這是彙編語言的嚴格性和規範性的體現。由於部分十六進位數是用字母來表示的,而程序內的標號也常用字母表示,為將標號和數據區分開,幾乎所有的彙編語言都規定:凡是以字母開頭(對十六進位數而言,就AF開頭)的數字量,應當在前面添加一個數0。至於地址量,它也是數據量的一種,前面也應該添0

:

MOV A0F0HF0以字母開頭的數據量

MOV A0F0HF0以字母開頭的地址量

如不0,就會把字母開頭的數據量當作標號來處理,從而出錯以及不能通過彙編。指令系統匯總

·指令條數多,不宜死記硬背,應在程序的編寫中,多加練習,在實踐中不斷掌握和鞏固常用的指令。

文章來源: https://twgreatdaily.com/bbd06288f219a5bcca694f9ea7ca3478.html