我編程一個PIC18F94K20與MCP7941X I2C RTCC船和24AA128 I2C CMOS串行EEPROM裝置一起使用。目前,我擁有能夠成功初始化RTCC秒/天/等值的代碼並啓動計時器,並在每秒更換一次時切換LED。邏輯運算符&比特分離計算在C(PIC編程)
我試圖擴大代碼讀回這些值的正確的數據,但我遇到了麻煩,當我試圖解釋在價值的各種「額外」位。內存映射可能有助於闡明幾分我的問題:
服用,例如,小時列或02H地址。位6設置爲1切換12小時時間,將01000000添加到小時位。我可以在這個地址讀回字節的全部內容,但是我想使用if語句來檢測12或24小時的時間是否到位,並相應地進行調整。我並不擔心10小時的位數,因爲我可以用BCD轉換循環輕鬆計算(我認爲)。
我先前使用的位OR運算符在C原始小時的數據擴充到24餘初始化的時間在此特定情況下爲0x11,並且設置12小時控制位,它是0x64。當設置時間:
WriteI2C(0x11|0x64);
它可以看到使用按位或。
當讀回的時間,我怎麼可以將運營商到我的代碼多餘的比特從實際時間位分開?我試着做這樣的事情:
current_seconds = ReadI2C();
current_seconds = ST & current_seconds;
但這完全毀了一切。它編譯,但設備在這個序列上「卡住」。
如何從我需要的實際數據中分離出ST/AMPM/VBATEN位,以及對於各種環境實現循環的好方法是什麼(例如,如果第6位回讀12小時時間= 0和24小時時間,如果bit6 = 1,依此類推)。
我有點一個C新手,這是我第一次涉足電子產品,所以我真的很感謝所有幫助。謝謝。
我不認爲這個問題適合在這裏。只需閱讀有關C位運算符(|,&,<<)和位操作。 –
你是否推薦任何可能更合適的地方?對不起,如果我錯了。 – samanthapants
要查看的位的掩碼用&運算符完成,並將要設置爲1的位進行分隔。所以如果你是從我的閱讀秒看可能只是轉換((((regdata&0x7)* 10)+(regdata&0xf);我認爲 – kenny