一個月前,進行了最為基礎的rs232串口通信實驗。當時還不懂中斷是什么,而在查找串口通信資料的時候一直在被強調可以使用中斷或是查詢模式,當然查詢也不懂。中斷算是比較難以接受的,因為之前在用VC++編譯C語言程序時,程序中只有一個main()函數的思想已經根深蒂固,不是不明白而是出于對中斷的抵觸不可接受。后來由于多次接觸,漸漸的也發現了它的重要性,單片機程序中main()函數跟中斷服務程序是同等級別的,中斷發生時中斷的是當前運行的main()函數。
用了兩天的時間也大抵搞清楚了有關定時/計數器,以及中斷相關的寄存器,一個采用中斷模式的RS232程序也就隨之編寫完了。把程序燒寫到flash之后通過RS232串口能夠跟電腦通信,但是發送給上位機的數據一直是混亂的,完全不聽從我的設置。我忽視了一個重要的細節,有關波特率的調節問題,說到底就是晶振選擇不合理。選用11.0592的晶振才能夠得到整數的波特率,以此減小波特率誤差。然而我一直用的12M晶振,這樣的錯誤竟然持續了50次之多,搞清楚了原因之后問題才得以解決。后來當我引用按鍵控制的時候問題又來了,按一次按鍵發送的數據長短不一,或多或少。原因是我忽視了按鍵抖動問題,按一次按鍵按鍵分合的次數往往不止一次。當時如果不是一位前輩指點怕是我極難找到這個問題,在進行軟件消抖之后問題也就解決了,最終想要的效果終于得到了。
在完成了RS232通訊實驗后后面的一系列通訊業變得簡單了起來,后來又一一實踐了SPI,usart,等同步通信方式,并且開始著手USB的學習。在經歷了種種失敗之后越來越明顯的感覺到了一個問題,就我們目前所遇到的困哪而言,其實解決的方案都很簡單實施的過程也很方便,而發現問題所在才是隱藏最深最為重要的一步。就像我們在電工實習以及電子實習時候的檢修工作一樣,問題一旦被發現基本上能夠迅速解決,然而發現問題卻顯得格外棘手。以后遇到的問題,也并不是想電工實習檢修拿著萬用表逐個排查那么簡單,更多的時候需要靜下來思考思考,查閱資料。總之發現問題,往往比解決問題更加關鍵。
|