許久沒有發了,分享下最近的感悟。如有錯誤的地方往指正,互相學習,哈哈。廢話不多說,入正題,今天就Modbus說一下。
對于modbus相信大家并不陌生,我不知道大家怎么寫的,我也希望大家有好 寫法提供參考,那是不勝感激的。在此感謝這段時間大家的幫助,如孫工,韓工,等等。本次講解就是在孫工的基礎上建立的,硬件是用的STM8S系列,
這里直說串口接收中斷與定時器中斷,
以前是這么寫的,用到了一個定時器,一個UART串口,咱先不說stm8 如果用在STC芯片上,那可是很昂貴的,本身就三個定時器,一個UART用,還需要一個定時器輔助,就剩下可憐的一個定時器了。這只是個通訊啊大哥,其他的工作科怎么做。反復的看,反復的改,是不是可以這樣啊,work();這個函數拿出來,再寫一個函數,在這個函數里面包含著它,建立屬于它的標志位,于是出來下邊這個版本,
我們分析下這樣的好處,首先用了標志位后可以與其他函數共享定時器,節約了資源,接下里是省去了 開關定時器的繁瑣步驟。效率自然就上去了。接著往下看,在485通訊時是否遇到過返回數組不全的問題,(接收的前段數據時正確的),我遇到過,在STM8 上邊,為什么呢,愿意在于DE端的控制上,還未發送完成就關閉的發送使能,程序如下未改正前。
發現問題后你可能會這么改。如下
哈哈,成功返回所有數據,高枕無憂了。是嗎?我咋么覺得這個延時這么礙眼啊,配合簡單的任務可能不會出問題,如果1S通訊10次的話你還能笑出來嗎?
那會你應該考慮怎么改良一下那,繼續往下看 ,再用標志位,
仔細看的會發現 DE端的控制跟work()寫在一塊了,給發送完成提供了充足的時間,又把CPU騰出來干別的事情,一舉兩得吧,哈哈,這樣通訊50/s次表示無壓力,再往下說,是不是遇到過調試通訊無返回的情況,是不是還不知道問題出來那一塊,好吧,我們不如加點指示的東西,學習下人家TCPIP,加一個通訊指示燈,怎么加呢,是不是會這樣。
這里就不寫用延時手段或者是再各定時器的寫法了,以上這個寫法通訊時會起到指示作用,也很節約CPU,但是他接收錯誤數據時也會指示,作用不是很好,再看一下放在哪里好呢,恩 下邊這里,
好了 就到這里,有什么不對 地方麻煩指正,這里先謝謝。 純屬個人見解獻丑了