單片機(jī)關(guān)鍵技術(shù)基礎(chǔ)詳解(二)
2.5分析編程的難點(diǎn)和技術(shù)解決方案
即使1個(gè)熟練的編程人員,編程過(guò)程中會(huì)遇到一些困難。為了能比較順利地完成程序設(shè)計(jì),應(yīng)根據(jù)程序所完成的功能和程序流程對(duì)整個(gè)程序的框架分析一下,并根據(jù)自己掌握的技能定位整個(gè)程序的難點(diǎn),然后找到最佳的算法。例如對(duì)于稍微大一點(diǎn)的項(xiàng)目,鍵盤掃描和顯示部分的程序編制應(yīng)該是單片機(jī)編程的難點(diǎn)。
(1)無(wú)論是鍵盤掃描還是顯示過(guò)程都和硬件部分息息相關(guān)
送片選信號(hào)選取鍵盤就必須搞清單片機(jī)芯片是高電平選通還是低電平選通;選通鍵盤后,還需要讀回鍵盤的狀態(tài)。對(duì)讀回的鍵盤狀態(tài)還要進(jìn)行防抖處理;若鍵盤抖動(dòng),放棄讀回的數(shù)據(jù),重新讀鍵盤狀態(tài);若確定為鍵盤按下,才能對(duì)按鍵值進(jìn)行處理;處理后的鍵值送顯示或作為其它使用。由此可知以上的每一過(guò)程都和硬件電路打交道。
(2)鍵盤掃描和顯示牽涉到的算法比較復(fù)雜
因?yàn)閽呙桄I盤的過(guò)程就是遍歷每個(gè)按鍵,識(shí)別抖動(dòng),識(shí)別按鍵是否松開等過(guò)程;除此之外還要延遲合適的時(shí)間,以便再次讀取鍵值。顯示過(guò)程也要遍歷每個(gè)數(shù)碼管或液晶字符;其中查表過(guò)程,送顯示過(guò)程都要用到比較復(fù)雜的循環(huán)遍歷算法。
(3)數(shù)字鍵和功能鍵的區(qū)分
是數(shù)字鍵就送顯示,是功能鍵就轉(zhuǎn)相應(yīng)的功能子程序,把兩者結(jié)合起來(lái)就構(gòu)成比較復(fù)雜的散轉(zhuǎn)程序。MCS51單片機(jī)有現(xiàn)成的散轉(zhuǎn)子程序可供參閱,PIC可以參照MCS51的散轉(zhuǎn)子程序套用。
以上3點(diǎn)都是單片機(jī)編程的難點(diǎn)部分,在編程之前都應(yīng)該找出來(lái)仔細(xì)分析。通過(guò)分析,將所有可能成為難點(diǎn)之處都一一找出并找出相應(yīng)的算法,在以后的程序編寫過(guò)程中也相應(yīng)地比較順利。
2.6寫程序
在上面的準(zhǔn)備工作完成后,就可以著手編寫程序。因?yàn)橛辛嗣鞔_的程序流程,有了充足的資料,可能遇到的難點(diǎn)基本上找到了解決方法;這樣,事先準(zhǔn)備得比較充分,即使在以后的程序編寫過(guò)程中遇到困難,也較易解決。這樣就可以節(jié)省很多時(shí)間,以便靜下心來(lái)認(rèn)真按照方案和流程編寫程序。另外,一般寫完1個(gè)功能程序就進(jìn)行調(diào)試,通過(guò)后再編寫另外1個(gè)功能代碼,這樣可以防止全部代碼編寫完畢后再調(diào)試可能帶來(lái)的相互影響,從而可以搞清楚到底是哪部分程序有問(wèn)題。
2.7程序調(diào)試
程序的調(diào)試過(guò)程是1個(gè)比較復(fù)雜的過(guò)程,有些需要高度的技巧和一定的方法。一般的編程軟件都提供單步、單步越過(guò)、斷點(diǎn)、運(yùn)行到光標(biāo)處等基本方法,一般掌握這幾種基本方法就可以解決絕大部分問(wèn)題。經(jīng)過(guò)長(zhǎng)時(shí)間的調(diào)試實(shí)踐之后自然就可以掌握一定的調(diào)試技巧,即熟能生巧。
3結(jié)束語(yǔ)
以上是編程一般單片機(jī)程序必須經(jīng)過(guò)的7大步驟,假如這7個(gè)過(guò)程的工作做得比較充分,一定能夠編寫出令人滿意的單片機(jī)程序。
三、關(guān)于單片機(jī)中的flash和eeprom
FLASH的全稱是FLASH EEPROM,但跟常規(guī)EEPROM的操作方法不同
FLASH 和EEPROM的最大區(qū)別是FLASH按扇區(qū)操作,EEPROM則按字節(jié)操作,二者尋址方法不同,存儲(chǔ)單元的結(jié)構(gòu)也不同,F(xiàn)LASH的電路結(jié)構(gòu)較簡(jiǎn)單,同樣容量占芯片面積較小,成本自然比EEPROM低,因而適合用作程序存儲(chǔ)器,EEPROM則更多的用作非易失的數(shù)據(jù)存儲(chǔ)器。當(dāng)然用FLASH做數(shù)據(jù)存儲(chǔ)器也行,但操作比EEPROM麻煩的多,所以更“人性化”的MCU設(shè)計(jì)會(huì)集成FLASH和EEPROM兩種非易失性存儲(chǔ)器,而廉價(jià)型設(shè)計(jì)往往只有 FLASH,早期可電擦寫型MCU則都是EEPRM結(jié)構(gòu),現(xiàn)在已基本上停產(chǎn)了。
至于那個(gè)“總工”說(shuō)的話如果不是張一刀記錯(cuò)了的話,那是連基本概念都不對(duì),只能說(shuō)那個(gè)“總工”不但根本不懂芯片設(shè)計(jì),就連MCU系統(tǒng)的基本結(jié)構(gòu)都沒(méi)掌握。在芯片的內(nèi)電路中,F(xiàn)LASH和EEPROM不僅電路不同,地址空間也不同,操作方法和指令自然也不同,不論馮諾伊曼結(jié)構(gòu)還是哈佛結(jié)構(gòu)都是這樣。技術(shù)上,程序存儲(chǔ)器和非易失數(shù)據(jù)存儲(chǔ)器都可以只用FALSH結(jié)構(gòu)或EEPROM結(jié)構(gòu),甚至可以用“變通”的技術(shù)手段在程序存儲(chǔ)區(qū)模擬“數(shù)據(jù)存儲(chǔ)區(qū)”,但就算如此,概念上二者依然不同,這是基本常識(shí)問(wèn)題。
沒(méi)有嚴(yán)謹(jǐn)?shù)墓ぷ骶?,根本無(wú)法成為真正的技術(shù)高手。
EEPROM:電可擦除可編程只讀存儲(chǔ)器,F(xiàn)lash的操作特性完全符合EEPROM的定義,屬EEPROM無(wú)疑,首款Flash推出時(shí)其數(shù)據(jù)手冊(cè)上也清楚的標(biāo)明是EEPROM,現(xiàn)在的多數(shù)Flash手冊(cè)上也是這么標(biāo)明的,二者的關(guān)系是“白馬”和“馬”。至于為什么業(yè)界要區(qū)分二者,主要的原因是 Flash EEPROM的操作方法和傳統(tǒng)EEPROM截然不同,次要的原因是為了語(yǔ)言的簡(jiǎn)練,非正式文件和口語(yǔ)中Flash EEPROM就簡(jiǎn)稱為Flash,這里要強(qiáng)調(diào)的是白馬的“白”屬性而非其“馬”屬性以區(qū)別Flash和傳統(tǒng)EEPROM。
Flash的特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,同樣工藝和同樣晶元面積下可以得到更高容量且大數(shù)據(jù)量下的操作速度更快,但缺點(diǎn)是操作過(guò)程麻煩,特別是在小數(shù)據(jù)量反復(fù)重寫時(shí),所以在MCU中Flash結(jié)構(gòu)適于不需頻繁改寫的程序存儲(chǔ)器。
在很多應(yīng)用中,需要頻繁的改寫某些小量數(shù)據(jù)且需掉電非易失,傳統(tǒng)結(jié)構(gòu)的EEPROM在此非常適合,所以很多MCU內(nèi)部設(shè)計(jì)了兩種EEPROM結(jié)構(gòu),F(xiàn)LASH的和傳統(tǒng)的以期獲得成本和功能的均衡,這極大的方便了使用者。隨著ISP、IAP的流行,特別是在程序存儲(chǔ)地址空間和數(shù)據(jù)存儲(chǔ)地址空間重疊的MCU系中,現(xiàn)在越來(lái)越多的MCU生產(chǎn)商用支持IAP的程序存儲(chǔ)器來(lái)模擬EEPROM對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)器,這是低成本下實(shí)現(xiàn)非易失數(shù)據(jù)存儲(chǔ)器的一種變通方法。為在商業(yè)宣傳上取得和雙EEPROM工藝的“等效”性,不少采用Flash程序存儲(chǔ)器“模擬”(注意,技術(shù)概念上并非真正的模擬)EEPROM數(shù)據(jù)存儲(chǔ)器的廠家紛紛宣稱其產(chǎn)品是帶EEPROM的,嚴(yán)格說(shuō),這是非常不嚴(yán)謹(jǐn)?shù)?,但商人有商人的目的和方法,用Flash“模擬”EEPROM可以獲取更大商業(yè)利益,所以在事實(shí)上,技術(shù)概念混淆的始作俑者正是他們。
從成本上講,用Flash“模擬”EEPROM是合算的,反之不會(huì)有人干,那么那位“總工”和樓上某網(wǎng)友所說(shuō)的用EEPROM模擬Flash是怎么回事呢?這可能出在某些程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間連續(xù)的MCU上。這類MCU中特別是存儲(chǔ)容量不大的低端MCU依然采用EEPROM作為非易失存儲(chǔ)器,這在成本上反而比采用Flash和傳統(tǒng)EEPROM雙工藝的設(shè)計(jì)更低,但這種現(xiàn)象僅僅限于小容量前提下。因Flash工藝的流行,現(xiàn)在很多商人和不夠嚴(yán)謹(jǐn)?shù)募夹g(shù)人員將程序存儲(chǔ)器稱為Flash,對(duì)于那些僅采用傳統(tǒng)EEPROM工藝的MCU而言,他們不求甚解,故而錯(cuò)誤的將EEPROM程序存儲(chǔ)器稱為“ 模擬Flash”,根本的原因是他們未理解Flash只是一種存儲(chǔ)器結(jié)構(gòu)而非存儲(chǔ)器的用途,錯(cuò)誤的前提自然導(dǎo)致錯(cuò)誤的結(jié)論。商業(yè)上講,用EEPROM模擬 Flash是不會(huì)有人真去做的愚蠢行為,這違背商業(yè)追求最大利益的原則,技術(shù)上也不可行,而對(duì)于技術(shù)人員而言,尤其是IC業(yè)內(nèi)的“總工”如果再這么講那只能說(shuō)明他或她要么根本不了解相關(guān)技術(shù)細(xì)節(jié),要么非常不嚴(yán)謹(jǐn),這都不符合“總工”的身份。本質(zhì)的問(wèn)題是Flash是一種存儲(chǔ)器類型而非MCU中的程序存儲(chǔ)器,即使MCU的程序存儲(chǔ)器用的是Flash,但其逆命題不成立。
在此寫此文,一方面是要澄清技術(shù)概念,另一方面更是不想令錯(cuò)誤的說(shuō)法誤人子弟,搞技術(shù)也需要嚴(yán)謹(jǐn)?shù)目茖W(xué)精神。
28系列是最早的EEPROM,28F則是最早的Flash,甚至Flash一詞是Intel在1980S為推廣其28F系列起的“廣告名”,取其意“快”,僅此而已。當(dāng)年的Flash不比傳統(tǒng)EEPROM容量更大只是容量起點(diǎn)稍高。至于現(xiàn)在的手冊(cè)中有無(wú)EEPROM字樣并不重要,非要“較枝”的話,看看內(nèi)容有無(wú)“電可擦除”存儲(chǔ)器的說(shuō)法,至少我隨手打開SST的Flash手冊(cè)上都寫的很清楚,不過(guò)這些根本就是無(wú)意義的皮毛,典型的白馬非馬論。
至于AVR的地址連續(xù)問(wèn)題是我隨手之誤,應(yīng)指68HC系列,但即使如此,就算我沒(méi)有用過(guò)包括AVR在內(nèi)的任何MCU也跟Flash的性質(zhì)毫無(wú)關(guān)系。
四、自制AVR仿真器
自制AVR仿真器用JtagICE仿真Mega16芯片進(jìn)行開發(fā),開發(fā)成功后,才移植到M8/48/88/168上。只要開發(fā)時(shí)留意一下,移植并不會(huì)有困難。
使用貼面IC的效果圖:
但使用貼面IC一個(gè)不好的地方是,芯片無(wú)法拆下來(lái)(如果我們要重新燒錄芯片的ROM,能拆下來(lái)就方便多了)。所以,這個(gè)活動(dòng),我們推薦使用DIP40封裝的Mega16. 以下是實(shí)物圖:
網(wǎng)上關(guān)于自制Jtag的線路有許多種。根據(jù)搜集到的資料,設(shè)計(jì)出本文介紹的最簡(jiǎn)易、制作最容易的 JTAG。RS232接口是用分立件制作,就地取材,簡(jiǎn)單可靠.
本線路的J1雙排十針座,既可以做Jtag,又可以做ISP(通過(guò)跳針JP1控制)。JP1跳針短路時(shí),J1用作ISP下載,方便更新本Jtag的ROM。J1 跳針開路時(shí), 用作JTAG.
如果你有232芯片,可以按以下線路代替上面的分立件RS232部分:
燒錄文件:
按以上的硬件制作好PCB后,檢查焊接無(wú)誤,就可以進(jìn)行燒錄了。
燒錄的方法有很多,我(armok)推薦的一個(gè)方法是:將M16芯片從JTAG板上拆下來(lái),放到普通的帶ISP口的實(shí)驗(yàn)板,使用SL-ISP1.32 軟件,將本文附錄所帶的將AVR Studio 4.10 Rom 燒錄文件中的flash.rom 及 epprom.rom 直接燒入到Jtag ATmega16 就可以了。
評(píng)論