日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

單片機(jī)課程設(shè)計(jì)-ATMEL51系列單片機(jī)編程器

 共同成長888 2015-07-19

單片機(jī)課程設(shè)計(jì)-ATMEL51系列單片機(jī)編程器 

  用單片設(shè)計(jì)過很多東西,可以說把AT單片機(jī)(包括AVR單片機(jī))的所有外設(shè)資源都使用過了,所以在尋思著要設(shè)計(jì)一個(gè)什么樣的東東??
  有次去面試,我對面試官說我設(shè)計(jì)過一塊開發(fā)板,然后那面試官直接問了個(gè)核心問題:這個(gè)編程器的固件是你自己寫的嗎?一下子就問到了痛處。是的,編程器固件不是自己寫的,那為什么不自己設(shè)計(jì)一個(gè)呢? 我說的自己設(shè)計(jì)是包括硬件電路、單片機(jī)程序以及電腦端界面等等所有東西全部自己DIY。當(dāng)一個(gè)真正的DIYer。所以我動(dòng)手了,用了幾天幾夜時(shí)間弄了一個(gè)可以支持兩種芯片(AT89S51 AT89S52)
的基于ISP下載的編程器
  首先要說的是,要設(shè)計(jì)個(gè)編程器, 這方面的資料在網(wǎng)上基本是找不到的,估計(jì)是大家不想開源(open source code)...所以必須自己按照某一芯片的官方數(shù)據(jù)手冊慢慢搞懂它的下載協(xié)議,然后寫成固件。


  STEP 1. 研究數(shù)據(jù)手冊
  首先找了一份S52芯片的中文數(shù)據(jù)手冊,一看傻了眼,翻譯得很垃圾,垃圾還不要緊,最重要是里面把關(guān)于FLASH編程的章節(jié)直接忽略掉了。。想看都沒得看。沒辦法,那就直接研究英文數(shù)據(jù)手冊算了,用了一天多時(shí)間認(rèn)真把數(shù)據(jù)手冊看懂。。這里本人一直有個(gè)誤區(qū),從大一的時(shí)候開始就以為S52會(huì)有256B的用戶RAM,比S51高級,其實(shí)不是,S52也只有128B內(nèi)存,F(xiàn)LASH容量比S51多4KB也就是8KB。。謹(jǐn)記謹(jǐn)記。?;蛘吣憧梢赃x擇接入外部RAM,不過這會(huì)浪費(fèi)掉你至少16個(gè)IO口用來做數(shù)據(jù)及地址總線,而且還要加外一個(gè)地址鎖存器用來復(fù)用本來就不夠用的IO口,而匯編指令中的MOVX就是用來操作外部RAM的。OK數(shù)據(jù)手冊研究完畢(還算幸運(yùn)的,因?yàn)镾52的數(shù)據(jù)手冊只有30多頁)。


 

 

 

  STEP 2. HEX文件的本來面目以及怎樣將HEX文件轉(zhuǎn)換成機(jī)器碼

  之前我一直以為HEX文件就像鏡像文件一樣對應(yīng)著單片機(jī)FLASH的每一個(gè)數(shù)據(jù),然后燒錄軟件LOAD程序的時(shí)候是直接將HEX文件里面的數(shù)據(jù)一個(gè)一個(gè)輸入到單片機(jī)的FLASH中,又來了個(gè)誤區(qū),事實(shí)情況卻不是這樣的。正解是:HEX文件是一種用ASCII編碼的文件,就是說里面的數(shù)據(jù)都是字符來的,比如說里面記錄了一個(gè)地址為0X00EF的話,如果按照二進(jìn)制格式應(yīng)該是:0000 0000 1110 1111 這樣記錄的,但HEX采用了ASCII字符編碼,直接在里面寫成:‘0’ ‘0’ ‘E’ ‘F’ (這是ASCII字符?。。。;谶@個(gè)原理,要想正確下載程序就必須寫一個(gè)HEX->機(jī)器碼轉(zhuǎn)換算法,將HEX文件轉(zhuǎn)換成機(jī)器碼。用了幾個(gè)小時(shí)就把算法搞定。具體實(shí)現(xiàn)過程就不說了,想了解的可以直接找我聊啦,總之最后結(jié)果就是我實(shí)現(xiàn)了一個(gè) HEX_Translate(char *Input,char *Output)函數(shù)搞定


  STEP 3. 實(shí)現(xiàn)硬件電路

    其實(shí)硬件電路很簡單,打算用串口跟電腦端進(jìn)行通信,然后使用一片S52做為主控芯片,通過ISP接口給另一片單片機(jī)下載程序。用了一個(gè)晚上時(shí)間用萬用板把電路搭建起來,里面用了一片MAX232作電平轉(zhuǎn)換,轉(zhuǎn)換后的電平輸給S52,S52接出幾只IO口給對應(yīng)的被下載芯片的ISP引腳,包括MISO MOSI SCK 以及復(fù)位端RST。硬件就是這么簡單這么傻,下圖:



 

 


  STEP 4. 編寫固件

  可以說這個(gè)設(shè)計(jì)的90%的工作就是在寫代碼,包括單片機(jī)代碼以及電腦燒錄軟件代碼,其中單片機(jī)用C語言編寫,電腦界面用C++編寫(所以必須有一點(diǎn)WINDOWS應(yīng)用程序編程基礎(chǔ))。

  燒寫單片機(jī)的工作流程其實(shí)就是->把復(fù)位腳接高,然后送入四個(gè)字節(jié)碼,讓它進(jìn)入編程模式,然后根據(jù)協(xié)議要求一個(gè)一個(gè)把數(shù)據(jù)送進(jìn)去。我在KEIL上實(shí)現(xiàn)了幾個(gè)最基本的操作函數(shù),比如要擦除芯片就調(diào)用:unsigned char Pro_51_Erase(void),如果芯片擦除成功就會(huì)返回OK(宏定義,值為1),當(dāng)然了,在開始工作之前都必須檢查芯片是否能使用,所以每次燒寫之前都要使用unsigned char Pro_51_CheckChip(void)檢查被燒芯片是否工作正常的話就返回OK。等等等等,不再贅述。

  實(shí)現(xiàn)了基本的操作函數(shù),接下來就要考慮主控單片機(jī)要怎樣跟電腦進(jìn)行通信了,使用串口通信,我的做法是自己制定一個(gè)簡單的傳送協(xié)議,該協(xié)議的第一個(gè)字節(jié)是指令,接下來的字節(jié)可以是地址,數(shù)據(jù)等等,做成一個(gè)數(shù)據(jù)幀,幀的大小隨指令作用不同而異。然后單片機(jī)使用串口中斷接收,因?yàn)橹骺貑纹瑱C(jī)在給另一個(gè)單片機(jī)燒寫的時(shí)候會(huì)費(fèi)時(shí)間,為了防止電腦端送過來的數(shù)據(jù)得不到及時(shí)處理而發(fā)生錯(cuò)誤,我在串口中斷服務(wù)程序里面實(shí)現(xiàn)了一個(gè)簡單的先進(jìn)先出循環(huán)隊(duì)列,隊(duì)列長度設(shè)為8B,一接收到數(shù)據(jù)的時(shí)候,中斷服務(wù)程序就將數(shù)據(jù)向隊(duì)列添加,而前臺(tái)程序要取數(shù)據(jù)就直接調(diào)用GetByte()函數(shù),該函數(shù)自動(dòng)向隊(duì)列取得一個(gè)數(shù)據(jù),如果隊(duì)列為空,則會(huì)進(jìn)入阻塞,直到有數(shù)據(jù)才會(huì)返回。發(fā)送隊(duì)列也是根據(jù)此種原理??傊?,關(guān)于串口,最終實(shí)現(xiàn)了兩個(gè)函數(shù),一個(gè)發(fā)送,一個(gè)接收,給全局使用,不必理會(huì)實(shí)現(xiàn)細(xì)節(jié)。

 


  STEP 5. 編寫電腦端界面

  電腦端界面是使用串口進(jìn)行通信的,所以電腦必須有串口,或者使用USB轉(zhuǎn)串口。

  開發(fā)環(huán)境使用了本人最喜歡的C++ Builder 6.0 。因?yàn)殚_發(fā)速度很快,很適合我這種非專業(yè)WINDOWS程序員使用。最終開發(fā)出來的應(yīng)用程序可以打開HEX文件,并自動(dòng)轉(zhuǎn)換成機(jī)器碼,然后通信串口一個(gè)一個(gè)按照地址發(fā)給單片機(jī)。如圖:


 


  STEP 6. 測試

  雖然原理簡單,但是編寫過程卻很費(fèi)時(shí),BUG不斷出現(xiàn),暈死,其實(shí)讓我選擇去當(dāng)苦力搬磚或者選擇寫代碼,還是選擇挺搬磚比較好,因?yàn)榇u總可以搬完嘛,代碼卻不一定能寫得出。所幸經(jīng)過幾天調(diào)試,所有功能完成了。

 測試: 寫了一個(gè)單片機(jī)的8*8點(diǎn)陣顯示程序,然后連接設(shè)備,打開文件。擦除芯片。。點(diǎn)擊“編程”。。。經(jīng)過兩秒鐘,界面進(jìn)度條顯示下載完成。小心地將下載好的芯片拔出來,插到單片機(jī)開發(fā)板上,接電。。查看效果。一接電,點(diǎn)陣上顯示出期待已久的圖案了,說明測試成功。下圖:


 

 

  STEP 7. 拓展功能

  完成后想進(jìn)一步拓展編程器的功能,在想著要弄點(diǎn)什么好,于是想到了手工匯編,就是不用開發(fā)環(huán)境,自己把指令一條一條寫出來然后下載,SO,要怎么下載???,沒問題,我在單片機(jī)里面實(shí)現(xiàn)了一個(gè)類似命令行的對話窗口,只要在電腦上打開超級終端或者串口助手,就可以通過字符指信與單片機(jī)進(jìn)行對話,可要設(shè)置好地址,就可以查看或者修改單片機(jī)FLASH存儲(chǔ)器中的任意一個(gè)值,想怎么改就怎么改,如圖:


 

 到此,開發(fā)過程開部結(jié)束,  ,有興趣想要看源代碼的同學(xué)發(fā)郵件找我要

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多