新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)課程設(shè)計(jì)-ATMEL51系列單片機(jī)編程器

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

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
用單片設(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é)議,然后寫成固件。

本文引用地址:http://m.butianyuan.cn/article/201612/324271.htm


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ù)搞定


上一頁 1 2 3 下一頁

評論


技術(shù)專區(qū)

關(guān)閉