肺腑之言-寫給喜歡單片機(jī)的初學(xué)者
首先是兩個(gè)字 “喜歡”!!
本文引用地址:http://www.ex-cimer.com/article/170492.htm一個(gè)東西 光有10分鐘的熱度是不夠的
從事單片機(jī) 就意味著你以后是和枯燥的程序 調(diào)試 亂碼 未知的軟硬件錯(cuò)誤 熬夜 臉上的豆豆 什么什么的聯(lián)系在一起(有點(diǎn)夸張 哈哈)
如果你選擇了這種生活 并且確定你有一種精神能指引你一路走到底 至于什么精神 只有你自己知道 是滿屏幕的 0101 還是 一串串胡亂的ABCD
還是 成功后的成就感 還是天生俱來的對電子類東西的 癡迷 還是喜歡別人在外面花天酒地 卻喜歡獨(dú)坐電腦面前 攻克技術(shù)的顛峰 不需要理由
世界上就有這樣一種人 不需要理由
那么確定了上面的之后 讓我們開始吧 單片機(jī) 也叫做單板機(jī) 單片微型計(jì)算機(jī) 麻雀雖小 五臟俱全 那么如果你學(xué)過計(jì)算機(jī)組成原理 我相信你應(yīng)該能更好的理解 單片機(jī)的內(nèi)部結(jié)構(gòu) 如果沒有學(xué)過 也不要緊 那就拿小麻雀開刀 再一層層 自下而上的 到我們所用的PC
剛開始學(xué)單片機(jī)的時(shí)候 看到厚厚的一本書 不要一咬牙 要一下子把書全部看完 看得仔仔細(xì)細(xì) 明明白白 先看看目錄 無非就是 介紹單片機(jī)的歷史 然后它內(nèi)部的組成原理 然后是指令 然后就是接口 先說歷史 知道51單片機(jī)是現(xiàn)在資料最豐富 最適合上手拿來開刀的就是了 不要覺得書上的 知識老 這都 N多年前的了 現(xiàn)在是不是都不一樣了 兼容這個(gè)詞 比如你用 ATC51 寫的程序 拿到 ATS51 52 STC 都能用 只是 后續(xù)的片子 在一些地方更加完善 功能更強(qiáng)大
比如 在書上來掉牙的 2051 上的 MOV A,#00H 到其他 51系列的 上也是一樣的 你看它的片子的介紹上 寫了一句 “完全兼容51系列單片機(jī)” 那么OK
別管那么多 只管用就是了 我發(fā)覺我廢話多了 這不知道寫到那去了。。抽跟煙 繼續(xù)。。。
上面的意思是說 面前是一坐山 很高 然后我就一咬牙 嗎的 慢慢爬吧 我不信我爬不上去了 或許爬到一半就退縮了 退而再攻之
我拿個(gè)測量儀來 噢 原來這山總共7000米 半山腰有個(gè)亭子 到那是3500米 剛開始那1000米 坡度很小 2000米的時(shí)候有個(gè) 茅房(^_^) 6000米的時(shí)候有個(gè)美女正在洗澡 山頂有個(gè)和尚廟 行 心中有了底 上!!
剛開始的時(shí)候初學(xué)一定要用匯編 可能大家也看到了 關(guān)與C和匯編的討論 各有各的說法 我個(gè)人覺得初學(xué)者 完全沒有必要去追求什么飄逸的風(fēng)格
就用笨拙的匯編 雖然它像一頭大苯熊一樣 但是 當(dāng)你能和大笨熊 親切的交流 屈駕自如的時(shí)候 再去和 漂亮的兔子MM 鴛鴦戲水 會(huì)更加的得心應(yīng)手
匯編剛開始你會(huì)覺得很煩 就是 在那 MOV 過去 MOV 過來 JB JC JNB JNC DJNZ 很難記 不像C 一個(gè) IF 一個(gè) DO WHILE 就搞定的事
但是 用匯編你能更加了解 一條指令在 CPU 內(nèi)存 的執(zhí)行過程 能更加親切的和 P0 P1 P2 P3 的每一個(gè) 口線 交流 不需要C 的屏蔽底層 而是直接的就和底層 親密接觸 這里有人要說我了 什么什么的 還是那句話 個(gè)人意見 僅供參考 在寫延時(shí)程序的時(shí)候 DJNZ 是雙周期指令 比如12M的 那么 一條指令是1US 那么你要精確的知道自己這段延時(shí) 能延時(shí)多少US 多少M(fèi)S 那么你對 51單片機(jī)內(nèi)部的 指令 周期 對以后寫有嚴(yán)格時(shí)序操作的程序 就更加得心應(yīng)手 比如 看到一個(gè)片子的PDF 數(shù)據(jù)總線 要拉低多少M(fèi)S 地址總線 要拉高多少US 等待周期要等待多少US/MS 那么 不要懷疑 自己寫 指令 搞定它 成功以后 你會(huì)發(fā)現(xiàn)你從 最底層的了解了 一個(gè)片子是怎么傳送數(shù)據(jù) 怎么通信 這樣的經(jīng)歷 對你以后再接觸其他 片子的時(shí)候是莫大的幫助
像關(guān)于書上的內(nèi)容 指令不用記得那么死 或者說完全不需要記 需要的時(shí)候 馬上查 在查的過程中 會(huì)更加加深你的印象(說點(diǎn)丟人的話 JC JB JNB JB 這些 指令我到現(xiàn)在都從來不記 我又不應(yīng)付考試 我書隨時(shí)就在旁邊 用的時(shí)候去翻就是了 )
這也就提到了練習(xí)
程序 和指令 不要只看不用 實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn) 實(shí)踐出真知 這都是老話了 不過用在單片機(jī)的學(xué)習(xí)上是太貼切了 單片機(jī) 本來就是實(shí)踐性很強(qiáng)的
像我在學(xué)校的時(shí)候 每次實(shí)驗(yàn)課 都認(rèn)真的做 抓住每次上機(jī)的機(jī)會(huì) 板子很貴 自己買不現(xiàn)實(shí) 而上機(jī)的時(shí)候能接觸到的每一次都很寶貴
LED流水燈 十字口 交通燈 這些程序很基礎(chǔ) 在一次 一次的小程序成功的過程中 你會(huì)更加喜歡上單片機(jī) 并且堅(jiān)定繼續(xù)為之不離不棄的決心
熟能生巧 我還記得我剛開始的時(shí)候 經(jīng)常是 把指令寫錯(cuò) 把 跳轉(zhuǎn)的標(biāo)號寫錯(cuò) 經(jīng)常用系統(tǒng) 的關(guān)鍵字 變量未定一存儲(chǔ)空間就用 等等等等。。 但是 一次 又一次錯(cuò)誤 下來 得到的是程序的正確性的大大的提高
在這里我建議 剛開始先多讀別人的程序 而且是完整的 備注多的 格式規(guī)范的 從最開始就養(yǎng)成良好的 編程風(fēng)格 而不是隨意的亂添亂加 胡亂的復(fù)制粘貼
看懂 別人程序里的每一句代碼的意思 為什么要加這條 這條指令的作用是什么 如果不清楚 馬上翻書去查 在查的過程中 更加加深對這條指令 或者這段子程序的用法的深刻的記憶 下次自己用的時(shí)候 才能像自己一樣的拿來 得心應(yīng)手 這也是為什么要選擇51系列的單片機(jī) 應(yīng)該它的示例代碼 網(wǎng)上鋪天蓋地 而且高手也不會(huì)吝嗇的把 初學(xué)要用的代碼 還設(shè)置成什么自動(dòng)回復(fù) 才能看才能下載 得到這些 代碼的途徑是很方面的 得到的有用的信息也是最多的 像 1302 1602 DS18B20 LED 串口 DA AD 常用的接口與51的驅(qū)動(dòng)程序 這些網(wǎng)上都有很多 匯編版本 的 C 版本的 不要覺得都是幾年前的東西 都是人轉(zhuǎn)來轉(zhuǎn)去 老掉牙的東西 先都拿來消化掉 再為自己所用
大家也許也發(fā)現(xiàn)了 在BAIDU 里找一些程序的時(shí)候看到一版的匯編 代碼 但是沒有一點(diǎn)注釋 2個(gè)字 痛苦 所以 為了方便大家 也位了以后你能方便別人
剛開始寫程序就要習(xí)慣 給程序?qū)憘渥?為了別人能看懂 像一個(gè)大的工程 都是團(tuán)隊(duì)合作 你幾千的代碼 沒有備注 別人幾千的代碼也沒備注 那好吧 先花個(gè)1天的時(shí)間把程序看懂了 再干其他的吧
程序中像子程序的說名 入口參數(shù) 出口參數(shù) 內(nèi)存的分配 關(guān)鍵語句的 單條備注 標(biāo)號的頂格 代碼的 縮進(jìn) 等等 良好的編程風(fēng)格絕對會(huì)讓你在以后的工作和學(xué)習(xí)過程中事半功倍
;-------------------------
;****子程序
;-------------------------
next:
mov a,th0 ;//讀取計(jì)數(shù)值TH0
swap a ;//高4位與低4位對換
mov r1,a ;//保存到R1
anl tl0,#0f0h ;//取TL0高4位,低4位忽略不計(jì)
評論