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

          新聞中心

          89C51編程程序

          作者: 時(shí)間:2012-12-05 來源:網(wǎng)絡(luò) 收藏

          #include at89x52.h
          #include stdio.h
          #include intrins.h
          #include ctype.h

          本文引用地址:http://www.ex-cimer.com/article/170668.htm

          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(a10) return a+48;
          if(a>9) return a+55;}

          unsigned int getadr() /*get 5 ditiDEC adr*/
          {
          unsigned char i,a[5];
          for(i=0;i5;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 ditiHEX 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;adrmaxadr;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;adrnn;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;i50000;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;ip;i++) _nop_();
          prog=1;
          break;}
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          vpp=1;
          for(i=0;ip;i++) _nop_();
          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;i4000;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;i4000;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;}


          }
          }



          關(guān)鍵詞: 程序 編程 89C51

          評(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); })();