0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

89C51編程器,89C51 programmer

454398 ? 2018-09-20 19:46 ? 次閱讀

89C51編程器,89C51 programmer

關(guān)鍵字:AT89C51,編程器電路圖

89c51芯片的編程器,圖片有些小,湊合看吧,附帶程序
程序:
#include "at89x52.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;
void init_serial()
{
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;
}
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;}
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 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 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 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_();
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

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 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';}
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;}


}
}
原理圖:
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評論

    相關(guān)推薦

    80C51單片機(jī)和89C51單片機(jī)具體有什么不同?

    80C51單片機(jī)和89C51單片機(jī)具體有什么不同
    發(fā)表于 11-01 08:01

    89c51芯片下如何實(shí)現(xiàn)串口通訊時同時發(fā)送多組數(shù)據(jù)?

    89c51芯片下如何實(shí)現(xiàn)串口通訊時同時發(fā)送多組數(shù)據(jù)?
    發(fā)表于 10-31 07:47

    請問AT89c51和AT89S52有什么區(qū)別?

    AT89C51和AT89S52都是51系單片機(jī)它們有什么區(qū)別?
    發(fā)表于 10-28 07:47

    基于89C51的數(shù)字化汽車儀表硬件電路設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于89C51的數(shù)字化汽車儀表硬件電路設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-27 09:06 ?1次下載
    基于<b class='flag-5'>89C51</b>的數(shù)字化汽車儀表硬件電路設(shè)計(jì)

    89C51片內(nèi)的RAM的空間是怎樣分配的?

    89C51片內(nèi)有256 B內(nèi)存,這內(nèi)存是怎樣分配?
    發(fā)表于 10-27 08:21

    請問89C51單片機(jī)內(nèi)包含哪些主要邏輯功能部件?

    單片機(jī)89C51單片機(jī)內(nèi)包含哪些主要邏輯功能部件?
    發(fā)表于 10-27 08:11

    89c51 pwm模擬原理是啥意思 ?

    89c51的pwm,那個模擬原理是啥意思
    發(fā)表于 10-27 07:13

    89c51單片機(jī)有那些信號需要芯片引腳以第二功能方式提供?

    89c51單片機(jī)有那些信號需要芯片引腳以第二功能方式提供?
    發(fā)表于 10-26 08:27

    基于AT89C51單片機(jī)的點(diǎn)擊轉(zhuǎn)速測量

    電子發(fā)燒友網(wǎng)站提供《基于AT89C51單片機(jī)的點(diǎn)擊轉(zhuǎn)速測量.pdf》資料免費(fèi)下載
    發(fā)表于 10-20 11:39 ?1次下載
    基于AT<b class='flag-5'>89C51</b>單片機(jī)的點(diǎn)擊轉(zhuǎn)速測量

    基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)

    電子發(fā)燒友網(wǎng)站提供《基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn) .pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:23 ?8次下載
    基于AT<b class='flag-5'>89C</b>2051/4051單片機(jī)<b class='flag-5'>編程器</b>的實(shí)驗(yàn)

    基于AT89C51單片機(jī)的全數(shù)字觸發(fā)的設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于AT89C51單片機(jī)的全數(shù)字觸發(fā)的設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:01 ?1次下載
    基于AT<b class='flag-5'>89C51</b>單片機(jī)的全數(shù)字觸發(fā)<b class='flag-5'>器</b>的設(shè)計(jì)

    基于89C51RD的腸營養(yǎng)液輸液系統(tǒng)原理圖

    電子發(fā)燒友網(wǎng)站提供《基于89C51RD的腸營養(yǎng)液輸液系統(tǒng)原理圖.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 10:39 ?0次下載
    基于<b class='flag-5'>89C51</b>RD的腸營養(yǎng)液輸液系統(tǒng)原理圖

    基于AT89C51單片機(jī)的語音播報(bào)的設(shè)計(jì)方案

    電子發(fā)燒友網(wǎng)站提供《基于AT89C51單片機(jī)的語音播報(bào)的設(shè)計(jì)方案.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 09:21 ?2次下載
    基于AT<b class='flag-5'>89C51</b>單片機(jī)的語音播報(bào)<b class='flag-5'>器</b>的設(shè)計(jì)方案

    基于AT89C51的防貪睡鬧鐘設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于AT89C51的防貪睡鬧鐘設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-08 10:50 ?1次下載
    基于AT<b class='flag-5'>89C51</b>的防貪睡鬧鐘設(shè)計(jì)

    80c31單片機(jī)可以用89c51直接代替嗎?

    有一個電路板用的是80c31單片機(jī)現(xiàn)在壞了可以用89c51直接代替嗎
    發(fā)表于 10-07 06:18