下面首先先簡單介紹單匯流排通訊的原理:
假設通訊線上無資料時,即常態為低電平,即單匯流排以 下拉電阻將匯流排拉為低電平,其中100k歐就是常態的下拉電阻。
這裡以12v為高電平,以實現較遠通訊電路的設計
那麼如何實現數字通訊呢?
現將3ms高電平,1ms低電平作為邏輯1;1ms高電平,1ms低電平作為邏輯0.(當然,只要高電平的時間有明顯區分即可)
軟體設計時,通常需要定時器配合,即設計乙個0.5ms的定時中斷,並定義乙個中斷次數計數器c,每發生一次中斷,c加一。
軟體包括發資料和接收資料兩部分。
(1)發資料程式設計方法
程式應設計兩個函式,發邏輯1和發邏輯0兩個函式。
發邏輯1是,首先將定時器重新初始化,並將c清0,將傳送資料埠置1.之後一直查詢計數器c,當c等於6時,傳送埠立即給0.並將定時器重新初始化,且c清0;然後查詢等待
當c等於2時,程式返回,即傳送邏輯1結束。同理髮邏輯0.
採用位域的方法定義輸出為port_send,輸入為prt_re.注意要初始化i/o屬性
unsigned int ms_timing0;
void send_high()//3個1ms高電平和1個1ms低電平為傳送邏輯1
void send_low()//乙個1ms高電平和1ms低電平為乙個傳送邏輯0
下面是發乙個位元組資料的程式:
void send(unsigned int nc)
}(2)接收資料
接受資料需要一直查詢接收資料埠,發現為高電平,即刻進入接收資料狀態。
當出現高電平後,定時器重新初始化,且c清0,查詢等待直到接收埠出現低電平,立即退出c的值。
當1< 當5<
軟體設計時,要注意防止進入程式死區,在等待高或低電平時,同時也要查詢計數器c的值,當c已經很大,比如10時,要考慮是否發生匯流排錯誤問題,該類情況要給予充分的重視。
下面是連續接收8個邏輯位的函式,當檢測到高電平時,即刻進入此函式。
unsigned int re8()
if((c_times>=1)&&(c_times<3)) nc<<=1;
if((c_times>=5)&&(c_times<7)) nc=(nc<<1)|0x01;
c_times=0;
while(!port_re)
} return nc;
}
神奇的遙控器
看完美國的 神奇遙控器 後,感慨多多。看完後,我知道人生在於分分秒秒的經歷,每經歷過一些,我們都能得到一些精彩,無論是痛苦還是快樂,有時覺得經歷一段人生低潮是很有必要的,痛苦的時刻也會給人帶來特殊的體驗。看完後,我開始想起家人,想著日日夜夜掛念我的爸媽,想著我的哥哥,姐姐和弟弟。家人需要的不是給他們...
STM32高階 紅外遙控器的應用詳細步驟
紅外遙控是一種無線 非接觸摸制技術,具有抗干擾能力強,資訊傳輸可靠,功耗低,成本低,易實現等顯著優點,被諸多電子裝置特別是家用電器廣泛採用,並越來越多的應用到計算機系統中。同類產品的紅外線遙控器,可以有相同的遙控頻率或編碼,而不會出現遙控訊號 串門 的情況。紅外遙控的編碼目前廣泛使用的是 nec p...
使用電視遙控器的基於Arduino的家庭自動化
家庭自動化是乙個概念,其中單個裝置用於控制房屋的許多方面,例如開啟和關閉不同的電器,監視溫度,火災警報,車庫門等。在此專案中,使用遙控器進行控制 簡單地說是 開 和 關 幾個電器或裝置,從而實現簡單的家庭自動化系統。遙控器是幾乎所有家庭中最常用的裝置之一。它們幫助我們操作電視,空調,vcr等裝置。遙...