《刪繁就簡:單片機入門到精通》是作者過去十多年工作經(jīng)驗的積淀,以實際應用為基礎,理論結合實際,用自己的理解來闡述單片機相關技術。全書立足單片機基本概念、開發(fā)應用技巧、單片機高端技術、C語言編程、問題調(diào)試分析、產(chǎn)品設計這六方面,采用平實易懂的語言,把作者的個人理解和經(jīng)驗積累匯集起來供讀者分享。
《刪繁就簡:單片機入門到精通》讀者范圍廣泛,無論是剛接觸單片機的新人,還是已經(jīng)具備一定經(jīng)驗的工程師,都有針對性章節(jié)可供閱讀。
一直以來,在我內(nèi)心都認為傳道授業(yè)是一件無上光榮的事,只可惜生來不善言辭,自然無法從事教師這個職業(yè),而是走了一條電子技術工作的職業(yè)之路。寫書是許多技術工作者的夢想,本人也不例外,然而由于受到時間、精力和觀念的影響,實現(xiàn)這個夢想的一線技術開發(fā)人員并不多,我也是偶然有機會才寫成了此書。
相對來說,我算是比較喜歡書的一類人,當年南下廣東打工時,隨身沒帶什么東西,書倒拖了一堆。對于專業(yè)方面的書,我也和大家一樣常憤懣于作者的寫作態(tài)度,直到看到臺灣侯捷(侯俊杰)寫的《深入淺出MFC》,給了我震撼,不能說是文采飛揚,但在用心程度方面,著實沒有可以挑剔的地方。
毫無疑問侯捷前輩具有非常好的專業(yè)素養(yǎng),我相信VC程序員技能高于他的也是大有人在,但他憑借著嚴謹、認真、求實的技術態(tài)度,每一點都自己進行考證,終于寫出了這本我認為可以奉為經(jīng)典的書。正是侯捷前輩的這本書觸動了我,雖然我個人的技能水平和寫作能力有限,但如果我也能像侯捷前輩那般認真,把自己以往的工作經(jīng)驗加以總結,是不是也有可能寫出一本能夠得到大家認可的書呢?
我相信做事一定要有激情,否則就會在猶豫中放棄各種想法,于是在2009年7月開始了本書的寫作。一開始對書的寫作并沒有太多想法,只是想著這是興趣所在,應盡量將書的內(nèi)容寫得全面和實用。最初大概有半個月時間,我隨身帶著一個小本子,只要一想到某個主題,就順手記錄到本子上,就這樣得到了書的提綱和目錄。
真沒想到寫書是如此辛苦,為了保證內(nèi)容正確,就不時需要進行驗證,往往只是一張簡單的圖表,卻要另外花數(shù)小時寫程序驗證,慢的時候一天只能寫一兩頁。開始寫作后經(jīng)常是回家就窩到計算機前,一窩就是數(shù)小時,南方的夏天比較長,就是光著膀子也是汗流浹背,現(xiàn)在回想起來還真有點詫異我當時的耐心。
戴上舉 電子專業(yè)本科,長期從事單片機產(chǎn)品研發(fā)工作。熱衷于技術鉆研在單片機和嵌入式領域?qū)I(yè)知識有著深刻理解,在同事和朋友眼里是一個有技術悟性的人。有國有、民營和外資企業(yè)不同環(huán)境工作經(jīng)歷,歷任產(chǎn)品一線開發(fā)技術指導、整體設計等職位,主導開發(fā)過年產(chǎn)量達百萬臺的消費電子產(chǎn)品。
第1章 單片機基礎
1.1 什么是單片機
1.2 單片機是如何工作的
1.3 單片機與計算機的區(qū)別
1.4 晶振
1.5 系統(tǒng)時鐘和周期
1.6 單片機指令和匯編語言
1.7 RAM/ROM的作用
1.8 單片機接口
1.9 接口驅(qū)動能力
1.10 方便實用的中斷
1.11 函數(shù)和堆棧
1.12 單片機PAGE/BANK概念
1.13 CISC與RISC
1.14 為什么DSP“跑得快”
1.15 單片機產(chǎn)品開發(fā)常見用語
第2章 單片機應用小技巧
2.1 用I/O模擬接口
2.2 交流特性顯神通
2.3 電阻網(wǎng)絡低成本高速AD
2.4 利用電容充放電測電阻
2.5 晶振也能控制電源
2.6 如何降低功耗
2.7 開機請用NOP
2.8 查表與乘除法
2.9 RAM動態(tài)裝載程序
2.10 程序也可被壓縮
2.11 累計誤差
2.12 讓定時更準一些
2.13 寄存器也可當RAM
2.14 清中斷標志的位置
2.15 鍵盤掃描
2.16 視覺暫留
2.17 讓耳朵優(yōu)先
2.18 1000與1024
2.19 PWM
2.20 單片機與虛擬機
第3章 單片機高級特性
3.1 Cache
3.2 總線
3.3 DMA
3.4 存儲器管理
3.5 嵌入式與操作系統(tǒng)
第4章 單片機C語言
4.1 單片機C語言簡介
4.2 for()/while()循環(huán)
4.3 循環(huán)里的i+q-與i
4.4 優(yōu)化的方法與效果
4.5 全局變量的風險
4.6 變量類型與代碼效率
4.7 慎用int
4.8 危險的指針
4.9 循環(huán)延時
4.10 運算表達式
4.11 溢出
4.12 強制轉換
4.13 高效實用位運算
4.14 宏和register
4.15 手機里的計算器
4.16 函數(shù)設計
4.17 某產(chǎn)品函數(shù)編寫規(guī)則
第5章 問題分析與調(diào)試
5.1 應該具備基本硬件能力
5.2 使自己站在別人的角度來思考問題
5.3 先找自己原因再假定他人出錯
5.4 充分發(fā)掘IDE調(diào)試工具功能
5.5 IDE調(diào)試工具也會導致錯誤產(chǎn)生
5.6 沒有IDE調(diào)試工具的測試
5.7 C語言要多查看匯編代碼
5.8 養(yǎng)成查看寄存器內(nèi)容的習慣
5.9 中斷的一些特殊情況
5.10 別迷信文檔與硬件
5.11 程序暫停不代表所有模塊暫停
5.12 幾種儀器好幫手
5.13 多用計算機工具軟件
5.14 串口通信不能使用隔離變壓器分析實例
5.15 Cache導致錄音有雜音分析實例
5.16 Cache導致RAM驗證結果不對分析實例
5.17 雙口RAM讀/寫競爭出錯分析實例
第6章 實際產(chǎn)品開發(fā)
6.1 如何開發(fā)一個產(chǎn)品
6.2 學會看電氣參數(shù)表
6.3 接口的匹配
6.4 電源和地的影響
6.5 成本意識
6.6 別煩流程圖
6.7 功能的全面與實用
6.8 批量產(chǎn)品的替代方案
6.9 多了解新器件
6.10 盡可能讓生產(chǎn)更方便
6.11 性能預估
6.12 電磁兼容
6.13 上電與測試
6.14 程序版本發(fā)放記錄
參考文獻
大部分單片機都需要晶振才能工作起來,晶振就像交響樂團的指揮家一樣控制單片機的工作節(jié)奏。指揮家的指揮棒沒起,交響樂團是不會開始演奏的,同樣晶振沒開始向單片機提供節(jié)奏信號,單片機也不會工作起來。在1.2節(jié)中說觸發(fā)是單片機的一個重要概念,晶振就是單片機所有工作觸發(fā)時序的信號源,單片機通過它所提供周期穩(wěn)定的觸發(fā)信號去觸發(fā)程序相應操作。
不是所有的單片機都用晶振來做觸發(fā)信號源,有一些場合可以用RC振蕩器(有的單片機自身內(nèi)部有RC振蕩電路),外部接一個電阻來調(diào)節(jié)振蕩頻率。既然RC振蕩器也可以用,為什么還要用晶振呢?原因很簡單,RC振蕩器所產(chǎn)生的頻率一致性和穩(wěn)定性都不好,會因為電阻電容值的誤差出現(xiàn)比較大的偏差,電壓的高低變化也會產(chǎn)生一定影響,晶振雖然價格要高一些,但一致性和穩(wěn)定性比RC振蕩器要好許多。
實際應用時應根據(jù)產(chǎn)品特性選擇晶振或RC振蕩器。如果產(chǎn)品對控制性能的時間精度要求并不嚴格,比如是一個通過按鍵發(fā)光發(fā)聲的簡單兒童玩具,就可以用RC振蕩器來降低成本;但如果一個產(chǎn)品需要顯示日期時間,用RC振蕩器顯然不能滿足要求,一天下來誤差有可能達到幾分鐘,所以必須用晶振,這個例子涉及累計誤差的概念,2.1節(jié)將會對累計誤差專門進行闡述。
既然晶振只是起到觸發(fā)信號源的作用,那是不是可以用一個周期穩(wěn)定的信號源來替換晶振或RC振蕩器呢?適當條件下確實可以,只是這樣一個信號源的實現(xiàn)會比用晶振的成本都要高。在我之前的產(chǎn)品開發(fā)經(jīng)歷中,就做過多個單片機只用一個晶振的產(chǎn)品,但不建議這么做,因為晶振對電路板走線有一定要求,控制不好容易導致晶振不起振。
是不是一個單片機想跑多快就需要晶振提供同樣快的周期觸發(fā)信號?無論是設計單片機芯片還是生產(chǎn)晶振的廠家都不希望這么做。我們知道,頻率越快越難控制,也越容易被干擾,晶振作為一個外接器件,自然不希望自己被要求提供非常高的頻率。頻率越高,對產(chǎn)品電路板布線的限制就越多,產(chǎn)品開發(fā)、生產(chǎn)部門使用起來也就越麻煩,同樣也不希望外接晶振跑得太快。
設計單片機芯片的廠家為我們解決了這個煩擾,他們將一種叫PLL(鎖相環(huán))的技術應用到單片機芯片內(nèi),通過這個技術將晶振的頻率在單片機內(nèi)部倍頻,這樣就可以讓單片機得到比晶振高幾倍甚至許多倍的工作頻率。除此以外,PLL還有一個優(yōu)點,單片機可以在工作中動態(tài)改變工作頻率,可以利用這個特性降低功耗來提升產(chǎn)品性能。