|
發(fā)布時間: 2018-4-8 20:47
正文摘要:在用STC89C52單片機做一個溫度采集功能。 功能是這樣的: 1、工作頻率 11.0592 2、P2.0,P2.1,P2.2,P2.3 普通IO口分別接了四個S18B20溫度傳感器,用來采集溫 ... |
|
樓上有人說的是對的 我今天也寫了類似代碼,你串口檢測接受。當你采集溫度的時候,把串口中斷關閉。 還有就是你的顯示,你可以先判斷下數據改變了,在去刷屏顯示。沒有必要接受到數據就是顯示,做個判斷也是對資源合理利用 |
|
軟件結構問題。 你可以定義標志位,有發(fā)送標志,發(fā)送數據;有接收數據完成標志,處理接收數據;有屏刷新標志,刷新屏幕。。。。。。 |
| 看到了用這個 RTX51 Tiny 可以讓51單片機實現多任務,得研究一下。這樣就可以實現收數據時,同時執(zhí)行查詢DS18B20溫度。 |
wulin 發(fā)表于 2018-4-9 15:33 用兩個51單片機實現多任務,每個51單片機執(zhí)行不同的任務。 兩個單片機通信,不能用串口,因為被占用了。也不能用中斷,不然會引響時序。 用輪詢,有好的穩(wěn)定的實例嗎? |
本帖最后由 wulin 于 2018-4-9 16:50 編輯 duwen009 發(fā)表于 2018-4-9 12:46 你如果無法協(xié)調使用時間片輪詢處理多任務管理,這通訊協(xié)議就要修改。上位機每發(fā)送一個字節(jié)需要等待下位機應答后才能發(fā)送下一個字節(jié)。你的程序寫得很啰嗦,會占用MCU很多時間,DS18B20是單總線器件,不必開多個I/O口。串口中斷里也不要處理非必須的事務,信息保存后由主程序處理。 |
wulin 發(fā)表于 2018-4-8 21:23 如果使用查詢法,單片機不能一直只查詢串口有沒有數據來到。同時還要l輪詢DS18B20的溫度數據,查詢一個DS18B20 時間就早己超過1毫秒,如果查詢幾個,還執(zhí)行其他的操作,如1602顯示的話,就會更長。 9600波特率下,串口收取數據,下一個字節(jié)數據接收完成前,約有1毫秒的時間,要把數據取走,不然串口就會丟棄接收的數據。這樣,在查詢其他器件時,串口還是會丟數據。 感覺查詢法似乎不行 |
滄浪 發(fā)表于 2018-4-8 22:40 中斷關了,如果這時串口有數據來到,串口數據就會丟失。 |
|
在進行DS18B20查詢之前把中斷給關掉不就好了嗎 |
| 串口接收使用查詢法,放棄使用中斷法,這樣可以避免與其他應用程序發(fā)生沖突。 |