AT89C51簡易在線編程
問題: AT89C51一般只能在專業(yè)編程器上燒錄,每次改動程序,要從目標(biāo)板上撬下芯片,燒錄后再插上運(yùn)行。我的燒錄器TOP851軟件只能在XP上運(yùn)行,還要再開一個電腦,實在是很麻煩。 怎樣實現(xiàn)在線編程呢?麻煩的是AT89C51沒有SPI口,如果在編程器上做文章,需要很多口線。 我的要求是,PC機(jī)通過串口對AT89C51目標(biāo)板編程。
思路: AT89C51的EA(31腳)可以選擇執(zhí)行片內(nèi)程序(H),還是片外程序(L),我們就可以控制這個引腳,實現(xiàn)“在線編程”。 1、編程。先設(shè)置為EA=H,片內(nèi)程序接收串口程序數(shù)據(jù),并將此寫到目標(biāo)板片外數(shù)據(jù)存儲器起始地址為0X8000的地方。 2、運(yùn)行。不斷電,設(shè)置EA=L, 按一下目標(biāo)板復(fù)位鍵,片外數(shù)據(jù)存儲器變成了片外程序存儲器,從這個片外程序存儲器的0X0000地址開始運(yùn)行。 這就實現(xiàn)了“在線編程”。
要點: 看到這里,你可以發(fā)現(xiàn)兩個問題,這也就是本方案的“精華”。 1、片外數(shù)據(jù)存儲器變成了片外程序存儲器?AT89C51片外數(shù)據(jù)存儲器和片外程序存儲器始終地址都是0X0000--0XFFFF,區(qū)分在PSEN(29腳)為片外程序存儲器讀信號,RD(17腳)為片外數(shù)據(jù)存儲器讀信號,這兩個信號不會同時出現(xiàn),本方案把這兩個信號線連在一起,接到片外數(shù)據(jù)存儲器(我使用的是62256)22腳(讀控制),很多資料說要用一個與門,別信他的,我試驗過,直接連上就可以。在今后的實驗中,這個空間使用要小心,不要把程序覆蓋了。如果把這個信號用開關(guān)切換,就沒有限制了,我這是懶人懶法。 2、程序?qū)懺谄鈹?shù)據(jù)存儲器起始地址為0X8000的地方(應(yīng)該0X0000也行,我沒有試過),執(zhí)行的時候又從片外程序存儲器的0X0000地址開始運(yùn)行? 為了省掉地址譯碼器,62256片選(29腳)直接接地,存儲器地址就是0X0000--0X7FFF,重復(fù)地址是0X8000--0XFFFF。 用下邊的測試程序,片內(nèi)片外運(yùn)行成功。
硬件改造歸納如下: 1、找一個現(xiàn)成的應(yīng)用板,AT89C51帶片外數(shù)據(jù)存儲器,帶串口轉(zhuǎn)換接口。 2、連接AT89C51的PSEN(29腳)和RD(17腳)。 3、編程運(yùn)行轉(zhuǎn)換開關(guān),單刀雙擲,中間是AT89C51的EA(31腳),一邊接電源+極,一邊接地。
下段要編寫兩個程序,一是PC機(jī)發(fā)送HEX文件,一邊是AT89C51接收處理HEX文件數(shù)據(jù),并寫到片外數(shù)據(jù)存儲器。
51hei圖片20200414215203.png (90.21 KB, 下載次數(shù): 61)
下載附件
2020-4-14 21:07 上傳
#include<AT89x51.H>
unsigned char code *pic; //讀程序區(qū) unsigned char xdata *pid; //寫外存數(shù)據(jù) void code_xdata() { char x; pic=0x0000; pid=0x8000;
for(x=0;x<0x60;x++) { *(pid+x)=*(pic+x); } } //////////////////////////////// void main() { char x,y; P1=0X05; code_xdata(); while(1) { for(x=240;x>0;x--) for(y=210;y>0;y--);
P1^=0x0f; }
}
全部程序51hei下載地址:
試驗.zip
(4.16 KB, 下載次數(shù): 19)
2020-4-14 21:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|