數據手冊上的原話是這樣的:
“讀PORTA 寄存器(寄存器3-1)讀的是引腳的狀態而寫該寄存器將會寫入端口鎖存器。所有寫操作都是讀-修改-寫操作。因此,寫壹個端口就意味著先讀該端口的引腳電平,修改讀到的值,然後再將改好的值寫入端口數據鎖存器。”
它的意思就是說,如果妳要讀壹個端口的值其實是先讀壹個端口,然後修改,寫入。當寫入以後端口數據被鎖存器鎖存,所以妳連續用位操作讀的話,會導致錯誤的結果,(妳這裏連續用了三條位操作指令)特別是對於同樣的壹個端口來說更是如此。對於PIC單片機,這點千萬要小心了。
解釋壹下妳補充的問題:這個PIC單片機的芯片結構有關。PIC單片機確實是支持位操作指令。但是它的位操作是讀寫整個端口的。所以讀寫I/O口會出現這種情況。
而且PIC是RISC型單片機和51的CISC型單片機不壹樣,PIC和AVR的芯片結構也不壹樣。AVR是增強型的RISC型單片機。
如果妳寫51單片機或者AVR單片機程序,可以連續用位操作指令。不影響妳的結果的。但是PIC不行。
還有51單片機和AVR單片機都沒有翻頁的概念。而PIC單片機裏面有翻頁的概念。特別當妳妳用匯編語言寫PIC單片機程序妳就要註意翻頁的情況了。用C語言寫的話,編譯器自動會給妳翻頁的,所以不用去管它的。
如果還需要有其他問題,妳可以加下我的qq:373884636