<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏


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

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




          STEP 4. 編寫固件

          可以說(shuō)這個(gè)設(shè)計(jì)的90%的工作就是在寫代碼,包括單片機(jī)代碼以及電腦燒錄軟件代碼,其中單片機(jī)用C語(yǔ)言編寫,電腦界面用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)然了,在開(kāi)始工作之前都必須檢查芯片是否能使用,所以每次燒寫之前都要使用unsigned char Pro_51_CheckChip(void)檢查被燒芯片是否工作正常的話就返回OK。等等等等,不再贅述。

          實(shí)現(xiàn)了基本的操作函數(shù),接下來(lái)就要考慮主控單片機(jī)要怎樣跟電腦進(jìn)行通信了,使用串口通信,我的做法是自己制定一個(gè)簡(jiǎn)單的傳送協(xié)議,該協(xié)議的第一個(gè)字節(jié)是指令,接下來(lái)的字節(jié)可以是地址,數(shù)據(jù)等等,做成一個(gè)數(shù)據(jù)幀,幀的大小隨指令作用不同而異。然后單片機(jī)使用串口中斷接收,因?yàn)橹骺貑纹瑱C(jī)在給另一個(gè)單片機(jī)燒寫的時(shí)候會(huì)費(fèi)時(shí)間,為了防止電腦端送過(guò)來(lái)的數(shù)據(jù)得不到及時(shí)處理而發(fā)生錯(cuò)誤,我在串口中斷服務(wù)程序里面實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的先進(jìn)先出循環(huán)隊(duì)列,隊(duì)列長(zhǎng)度設(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é)。



          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();