89C51编程器,89C51 programmer

89c51编程器,89c51 programmer
关键字: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(a9) 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;i50000) 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;}
}
}
原理图:

用555定时器构成的一击三呼电子门铃电路
电磁辐射会对生物体产生什么影响
分析雷电接口:普及程度不高的原因
人工智能正在学习量子力学以此来设计新分子
干货 | LS1028A 如何输出PWM方波?
89C51编程器,89C51 programmer
调速电机和伺服电机的区别
三星GalaxyS22系列邂逅春日美景,轻松拍摄质感大片
克服端口顺序影响,使用PCAN实现固定设备ID/通道分配
振动变送器安装方式
24V转5V降压芯片FS2455,PCB布局图册
华为nova5 Pro首销火爆 人像超级夜景自拍功能引爆市场创纪录
led护眼灯真的护眼吗
低压配电系统的构成和接地形式
NP2016 20v n沟道增强型MOSFET概述
Diodes公司为汽车应用推出了多种封包切换器
创维彩电29TF9000图象中有黑故障维修
如何用FPGA并行高速运算实现实时的引导滤波算法
黄曲霉检测仪的产品性能如何,它有哪些特点
格林精密首次IPO大客户并提升和加强精密结构件及模具的性能