關(guān)鍵字:AT89C51,編程器電路圖
89c51芯片的編程器,圖片有些小,湊合看吧,附帶程序
程序:
#include "at89x52.h"
#include "stdio.h"
#include "intrins.h"
#include "ctype.h"
#include "stdio.h"
#include "intrins.h"
#include "ctype.h"
sbit rdy=P3^2;
sbit vpp=P3^3;
sbit p26=P3^4;
sbit p27=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit prog=P2^7;
sbit vpp=P3^3;
sbit p26=P3^4;
sbit p27=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit prog=P2^7;
void init_serial()
{
SCON=0x50; /*mode 1*/
TMOD=0x20;
TH1=0xfd;
PCON=0x80; /*38400bps*/
TR1=1; /*load tmr1*/
TI=1;
ES=1;}
{
SCON=0x50; /*mode 1*/
TMOD=0x20;
TH1=0xfd;
PCON=0x80; /*38400bps*/
TR1=1; /*load tmr1*/
TI=1;
ES=1;}
void init_pro()
{
p26=0;
p27=0;
p36=0;
p37=0;
vpp=1;
prog=1;
}
{
p26=0;
p27=0;
p36=0;
p37=0;
vpp=1;
prog=1;
}
void sendbyte(unsigned char da) /*send a byte*/
{
while(!TI);
TI=0;
SBUF=da;}
unsigned char IntToAscii(unsigned char a) /*change DEC to ASCII HEX code*/
{
if(a<10) return a+48;
if(a>9) return a+55;}
{
while(!TI);
TI=0;
SBUF=da;}
unsigned char IntToAscii(unsigned char a) /*change DEC to ASCII HEX code*/
{
if(a<10) return a+48;
if(a>9) return a+55;}
unsigned int getadr() /*get 5 diti DEC adr*/
{
unsigned char i,a[5];
for(i=0;i<5;i++)
{
while(!RI);
RI=0;
a[i]=SBUF-48;
}
return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}
{
unsigned char i,a[5];
for(i=0;i<5;i++)
{
while(!RI);
RI=0;
a[i]=SBUF-48;
}
return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}
unsigned char getdata() /*get 2 diti HEX data*/
{
unsigned char d1,d2;
while(!RI);
RI=0;
d1=toint(SBUF);
while(!RI);
RI=0;
d2=toint(SBUF);
return d1*16+d2;}
unsigned int detchip(int adr)
{
P0=0xff;
P1=adr%256;P2=adr/256;
init_pro();
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
return P0;}
void read()
{
unsigned int adr,maxadr;
unsigned char h,l;
P0=0xff;
maxadr=getadr();
for(adr=0;adr{
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
h=IntToAscii(P0/16);
sendbyte(h);
l=IntToAscii(P0%16);
sendbyte(l);}
init_pro();}
{
unsigned char d1,d2;
while(!RI);
RI=0;
d1=toint(SBUF);
while(!RI);
RI=0;
d2=toint(SBUF);
return d1*16+d2;}
unsigned int detchip(int adr)
{
P0=0xff;
P1=adr%256;P2=adr/256;
init_pro();
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
return P0;}
void read()
{
unsigned int adr,maxadr;
unsigned char h,l;
P0=0xff;
maxadr=getadr();
for(adr=0;adr
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
h=IntToAscii(P0/16);
sendbyte(h);
l=IntToAscii(P0%16);
sendbyte(l);}
init_pro();}
unsigned int test(unsigned int nn)
{
unsigned int adr,counter=0;
P0=0xff;
for(adr=0;adr{
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
if(P0!=0xff) counter++;}
init_pro();
return counter;}
{
unsigned int adr,counter=0;
P0=0xff;
for(adr=0;adr
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
if(P0!=0xff) counter++;}
init_pro();
return counter;}
unsigned char erase(unsigned int nn,unsigned int p)
{
unsigned int i;
P0=0xff;
p26=1;
p27=0;
p36=0;
p37=0;
vpp=0;
prog=1;
for(i=0;i<50000;i++) _nop_();
switch(p)
{
case 0 : prog=0;
prog=1;
break;
case 1 : prog=0;
_nop_();
prog=1;
break;
case 2 : prog=0;
_nop_();_nop_();
prog=1;
break;
case 3 : prog=0;
_nop_();_nop_();_nop_();
prog=1;
break;
case 4 : prog=0;
_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 5 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
{
unsigned int i;
P0=0xff;
p26=1;
p27=0;
p36=0;
p37=0;
vpp=0;
prog=1;
for(i=0;i<50000;i++) _nop_();
switch(p)
{
case 0 : prog=0;
prog=1;
break;
case 1 : prog=0;
_nop_();
prog=1;
break;
case 2 : prog=0;
_nop_();_nop_();
prog=1;
break;
case 3 : prog=0;
_nop_();_nop_();_nop_();
prog=1;
break;
case 4 : prog=0;
_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 5 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 6 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 7 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 8 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
default: prog=0;
for(i=0;i
break;
case 6 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 7 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 8 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
default: prog=0;
for(i=0;i
prog=1;
break;}
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
vpp=1;
for(i=0;i
if(test(nn)==0) return 's';
else return 'f';}
unsigned char write()
{
unsigned int adr,d,i;
p26=0;
p27=1;
p36=1;
p37=1;
vpp=0;
prog=1;
for(i=0;i<4000;i++) _nop_();
adr=getadr();
d=getdata();
while(1)
{
if(adr>50000) break;
P1=adr%256;P2=(adr/256)|0x80;
P0=d;
TI=0;
SBUF='s';
prog=0;
_nop_();_nop_();_nop_();
prog=1;
adr=getadr();
d=getdata();
while(!rdy);}
init_pro();
return 'f';}
{
unsigned int adr,d,i;
p26=0;
p27=1;
p36=1;
p37=1;
vpp=0;
prog=1;
for(i=0;i<4000;i++) _nop_();
adr=getadr();
d=getdata();
while(1)
{
if(adr>50000) break;
P1=adr%256;P2=(adr/256)|0x80;
P0=d;
TI=0;
SBUF='s';
prog=0;
_nop_();_nop_();_nop_();
prog=1;
adr=getadr();
d=getdata();
while(!rdy);}
init_pro();
return 'f';}
unsigned char lock(unsigned char level)
{
unsigned int i;
vpp=0;
if(level==1) {p26=1;p27=1;p36=1;p37=1;}
if(level==2) {p26=1;p27=1;p36=0;p37=0;}
if(level==3) {p26=1;p27=0;p36=1;p37=0;}
for(i=0;i<4000;i++) _nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
while(!rdy);
init_pro();
return 'o';}
{
unsigned int i;
vpp=0;
if(level==1) {p26=1;p27=1;p36=1;p37=1;}
if(level==2) {p26=1;p27=1;p36=0;p37=0;}
if(level==3) {p26=1;p27=0;p36=1;p37=0;}
for(i=0;i<4000;i++) _nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
while(!rdy);
init_pro();
return 'o';}
void main()
{
unsigned char data c;
unsigned int data adr,l,dx;
init_pro();
init_serial();
while(1)
{
init_pro();
scanf("%c",&c);
switch(c)
{
case 'c' : printf("%c",'o');
break;
case 'd' : scanf("%x",&adr);
printf("%x",detchip(adr));
break;
case 't' : scanf("%u",&dx);
printf("%u",test(dx));
break;
case 'r' : read();
break;
case 'e' : scanf("%u,%u",&adr,&dx);
printf("%c",erase(adr,dx));
break;
case 'w' : printf("%c",write());
break;
case 'l' : scanf("%u",&l);
printf("%c",lock(l));
break;
case 'h' : printf("**********Er6y Programmer Help Window***********\n");
break;
default : break;}
}
}
{
unsigned char data c;
unsigned int data adr,l,dx;
init_pro();
init_serial();
while(1)
{
init_pro();
scanf("%c",&c);
switch(c)
{
case 'c' : printf("%c",'o');
break;
case 'd' : scanf("%x",&adr);
printf("%x",detchip(adr));
break;
case 't' : scanf("%u",&dx);
printf("%u",test(dx));
break;
case 'r' : read();
break;
case 'e' : scanf("%u,%u",&adr,&dx);
printf("%c",erase(adr,dx));
break;
case 'w' : printf("%c",write());
break;
case 'l' : scanf("%u",&l);
printf("%c",lock(l));
break;
case 'h' : printf("**********Er6y Programmer Help Window***********\n");
break;
default : break;}
}
}
原理圖:

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
AT89LS51:低電壓高性能8位微控制器的全方位解析
AT89LS51:低電壓高性能8位微控制器的全方位解析 在嵌入式控制應(yīng)用領(lǐng)域,AT89LS51這款低電壓、高性能的CMOS 8位微控制器備受關(guān)注。它憑借豐富的特性和強(qiáng)大的功能,為眾多嵌
解讀AT89LP51RD2/ED2/ID2:高性能8位微控制器的卓越之選
解讀AT89LP51RD2/ED2/ID2:高性能8位微控制器的卓越之選 電子工程師在設(shè)計(jì)過(guò)程中,常常要為項(xiàng)目挑選一款合適的微控制器,來(lái)滿足性能、功耗、功能等多方面的需求。今天,我們就來(lái)深入探討
深入剖析LM89溫度傳感器:功能、應(yīng)用與設(shè)計(jì)要點(diǎn)
,我們就來(lái)深入探討一下LM89的相關(guān)特性、應(yīng)用場(chǎng)景以及設(shè)計(jì)過(guò)程中的注意事項(xiàng)。 文件下載: lm89.pdf 一、LM89簡(jiǎn)介 (一)主要特性 LM89是一款具備±0.75°
深度剖析LMT89溫度傳感器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
深度剖析LMT89溫度傳感器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn) 在電子設(shè)計(jì)領(lǐng)域,溫度傳感器是至關(guān)重要的組件,廣泛應(yīng)用于各種場(chǎng)景。今天我們要深入探討的是德州儀器(TI)的LMT89溫度傳感
AT89LP51/52微控制器:高效能與低功耗的完美融合
AT89LP51/52微控制器:高效能與低功耗的完美融合 在電子工程師的設(shè)計(jì)世界里,尋找一款性能卓越、功能豐富且功耗合理的微控制器是一項(xiàng)關(guān)鍵任務(wù)。AT89LP51/52微控制
51 AVR 編程器USBASP下載器驅(qū)動(dòng)安裝及程序下載
支持AT89S51/52單片機(jī)AVR所有ASP芯片。輸出端口為ATMEL標(biāo)準(zhǔn)端口。有USB取電和支持目標(biāo)板電壓5V,可通過(guò)跳線帽連接選擇。可AUTOSPEED自動(dòng)調(diào)速固件,下載器會(huì)自動(dòng)跟蹤要編程的芯片頻率,自動(dòng)改變速度,達(dá)到自動(dòng)
學(xué)習(xí)單片機(jī)快速方法
的80C51系列單片機(jī)主要產(chǎn)品有:Intel的80C31、80C51、87C51,80C32、80C52、87
發(fā)表于 01-14 07:42
單片機(jī)分類及應(yīng)用
)、MASK片內(nèi)掩模ROM型(典型芯片為8051)、片內(nèi)Flash型(典型芯片為89C51)等類型。
按用途可分為通用型和專用型;根據(jù)數(shù)據(jù)總線的寬度和一次可處理的數(shù)據(jù)字節(jié)長(zhǎng)度可分為8、16、32位
發(fā)表于 01-13 08:25
深度剖析DS89C21:差分CMOS線驅(qū)動(dòng)器與接收器對(duì)
深度剖析DS89C21:差分CMOS線驅(qū)動(dòng)器與接收器對(duì) 在電子設(shè)計(jì)領(lǐng)域,選擇合適的驅(qū)動(dòng)器和接收器對(duì)對(duì)于確保信號(hào)的高效傳輸和處理至關(guān)重要。今天
請(qǐng)問(wèn)如何在 Keil C51 中對(duì) SPROM 進(jìn)行編程?
如何在 Keil C51 中對(duì) SPROM 進(jìn)行編程?
發(fā)表于 08-20 06:12
AT89C51 單片機(jī)中文資料
電子發(fā)燒友網(wǎng)站提供《AT89C51 單片機(jī)中文資料.pdf》資料免費(fèi)下載
發(fā)表于 06-24 15:29
?1次下載
賽元C51核95F8617B中文手冊(cè)
電子發(fā)燒友網(wǎng)站提供《賽元C51核95F8617B中文手冊(cè).pdf》資料免費(fèi)下載
發(fā)表于 06-16 17:35
?2次下載
aP89W24 USB語(yǔ)音芯片燒錄器中文手冊(cè)
)和aP89010(10秒OTP芯片) ap89085 ?ap89170 ?ap89341 ?AP89W24USB是該開(kāi)發(fā)系統(tǒng)的一部分,它是一個(gè)基于USB的編程器,旨在用于Windows 系統(tǒng)的計(jì)算機(jī)上。該編程器連接到計(jì)算機(jī)后,
發(fā)表于 04-02 17:34
?5次下載
89C51編程器,89C51 programmer
評(píng)論