當前位置:編程學習大全網 - 網絡軟體 - 為什麽PIC單片機作為輸出的時候出現這樣的問題

為什麽PIC單片機作為輸出的時候出現這樣的問題

妳這個問題我也碰到過,現在我來解釋壹下原因。根據數據手冊提供的說明建議妳改成PORTA = 0x01;delay();PORTA = 0x02;delay(); PORTA = 0x04;delay();問題應該能解決了。

數據手冊上的原話是這樣的:

“讀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

  • 上一篇:當年的文質彬彬光良如今51歲變肌肉男,他健身是為了保持嗓音狀態嗎?
  • 下一篇:短線黑馬的幾個特征
  • copyright 2024編程學習大全網