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