我有一個8位參數,我需要從這個參數發送4個第一位數字到我的PORTC。如何在不更改PORTC的最後4位的情況下執行此操作?我的第一個主要想法是做參數= PORTC,但是然後我改變了所有的8位而不僅僅是4位。如何使用參數更改4位?
回答
如果由「前四」你的意思是低四位,然後
PORTC = (parameter & 0x0F)
我們正在做的上面與二進制值0000 1111
這意味着執行bitwise AND操作的高4位會被清除,低4位將被保留(如果1 => 1,如果0 => 0)。所以,如果你的8位參數爲xxxx yyyy
那麼以後,這將是0000 yyyy
如果你指的是高四位,而PORTC需要他們在低4
PORTC = (paramter >> 4)
這意味着我們left shifting二進制字符串xxxx yyyy
下降4個地方,所以你會得到0000 xxxx
移交後的操作。
但是,有時您需要維護輸出端口上的其他位,因此您需要執行bitwise OR操作以保留現有值。
PORTC |= (parameter & 0x0F)
或
PORTC |= (paramter >> 4)
因此,如果我們正在設置的低4位,則這確保我們不會改變任何的高位比特的,當我們在該端口上輸出。
您需要先仔細查看您的微處理器文檔,看看是否有任何方法可以讀取IO端口的輸出狀態。如果沒有,並且讀取PORTC只是讀取引腳的輸入狀態,那麼通常需要維護一個「輸出鏡像」 - 只是輸出數據的一個副本。
然後,你必須做這樣的事情:
static unsigned char outputMirrorC;/
...
...
// Set the bottom four bits of the port
outputMirrorC &= 0xf0; // Just keep the top four bits of the mirror
outputMirrorC |= newData & 0x0f; // Take the bottom four bits from your new data
PORTC = outputMirrorC; // Write the data to the port
你沒有給什麼PORTC是,這是非常關鍵的任何信息。但是對於大多數硬件,您必須首先讀取整個端口以獲取其值,更改低4位並將更改後的字節寫回。假設端口是8位寬,並且「first fuor digits」意思是低4位,那麼C是:
char val = read_port_c();
write_port_c((val & ~0xf) | my_4_bit_value);
您需要val & 0xf0; – nos
@nos正如我所說的,他沒有說出「前四位數字」是什麼。如果他的意思是位0-3,那麼我的代碼是正確的。如果他的意思是比特4-7,那麼你就是。 OP將不得不弄清楚。 – Gene
@Gene否,nos是正確的,你的描述與你的代碼衝突。如果你想保留高位,那麼mask必須是'0xF0'。 – user694733
- 1. 如何使用JavaScript更改CSS參數?
- 2. 如何更改unsigned char中的4位?
- 3. 如何使用4位數字
- 4. 位置參數計數4
- 5. 如何用systemd更改dockerd參數?
- 6. 允許更改位置perl模塊使用配置參數
- 7. 參數ValueFromPipeline和更改位置
- 8. 如何更改的onClick使用JavaScript,包括函數參數(S)
- 9. 如何使用參數更改函數中的全局變量
- 10. 如何更改笨尋呼機參數位置
- 11. SSRS如何更改Web部件中的參數位置?
- 12. 如何更改報告中的SSRS輸入參數位置
- 13. 如何更改外部函數參數
- 14. 使用位參數
- 15. 如何使用基於參數的參數化版本更改配置?
- 16. 如何使Ruby方法傳遞輸出參數(更改引用參數的值)?
- 17. 使用VB.net更改存儲參數
- 18. 水晶報表:更改使用參數
- 19. Laravel - 使用GET更改URL參數
- 20. 我無法使用Gulp更改參數
- 21. 如何更改ASP.NET MVC使用的「ReturnUrl」參數的名稱?
- 22. MVC路由如何避免使用參數更改網址
- 23. 如何使用URL參數更改頁面上的鏈接href?
- 24. 如何使用提交表單更改jquery參數?
- 25. 如何使用C#更改SQL Server啓動參數
- 26. 如何使用Perl更改XML中的參數值?
- 27. 如何使用Ruby通過循環更改URL參數?
- 28. 如何使用JavaScript更改樣式參數?
- 29. 如何使用python更改多個文件中參數的值
- 30. 如何使用bash或perl更改XML中的參數值?
你會通過編輯原始文章(OP)發佈一些代碼嗎? – octopusgrabbus