日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
自己動手制作單片機編程器
自己動手制作單片機編程器
 更新時間:2008-7-27 16:34:15  點擊數(shù):3
【字體: 字體顏色

#include <dos.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "..\ch\ctc.ci"
#define ROMSIZE 2048

// 378 :  A7..A0
// 37A :  P34 RST XLAT1 P32
// for programming: Rst=1, P33|P34=1, Vpp=12V
// Read:  O37A 2A I378
// RESET: O37A 2E O37A 2A
// SKIP:  O37A 28 O37A 2A
// WRITE: O37A 2 O378 data [DELAY] O37A 3 O37A 2A
void writeByte(char data, int addr)
{
   outportb(0x37a, 0x2e);               // reset address
   outportb(0x37a, 0x2a);
   ctcdelay(10);

   for (int i=0; i<addr; i++)
   {
      outportb(0x37a, 0x28);
      outportb(0x37a, 0x2a);
   }
   outportb(0x37a, 2);
   outportb(0x378, data);
   outportb(0x378, data);
   outportb(0x37a, 3);
   ctcdelay(2);
   outportb(0x37a, 2);
   ctcdelay(2);
   for (int n=0; n<1000; n++) if ((inportb(0x379)&0x40)!=0) break;
   outportb(0x37a, 0x2A);
}
void writeData(char *buf, int count)
{
   outportb(0x37a, 0x2e);               // reset address
   outportb(0x37a, 0x2a);
   ctcdelay(10);

   for (int i=0; i<count; i++)
   {
      int dat=buf[i];
      outportb(0x37a, 2);
      outportb(0x378, dat);
      outportb(0x378, dat);
      outportb(0x37a, 3);
      ctcdelay(2);
      outportb(0x37a, 2);
      ctcdelay(2);
      for (int n=0; n<1000; n++) if ((inportb(0x379)&0x40)!=0) break;
      outportb(0x37a, 0);
   }
   outportb(0x37a, 0x2A);
}

int readByte(int addr)
{
   outportb(0x37a, 0x2e);               // reset address
   outportb(0x37a, 0x2a);
   ctcdelay(10);

   for (int i=0; i<addr; i++)
   {
      outportb(0x37a, 0x28);
      outportb(0x37a, 0x2a);
   }
   ctcdelay(5);
   return inportb(0x378);
}
void readData(char *buf, int count)
{
   outportb(0x37a, 0x2e);               // reset address
   outportb(0x37a, 0x2a);
   delay(10);

   for (int i=0; i<count; i++)
   {
      ctcdelay(5);
      buf[i]=inportb(0x378);
      outportb(0x37a, 0x28);
      outportb(0x37a, 0x2a);
   }
}

void eraseData()
{
   outportb(0x37a, 0x2a); ctcdelay(10);
   outportb(0x37a, 0x2b); delay(15);
   outportb(0x37a, 0x2a);
}

void hideData()
{
   writeByte(0, 0);
}

void main(int argc, char *argv[])
{
   unsigned char buf[ROMSIZE];
   unsigned char buf2[ROMSIZE];
   memset(buf, 255, ROMSIZE);
   memset(buf2, 255, ROMSIZE);
   unsigned t0, tt;
   FILE *fp;
   initctc();

   if (argc<2)
   {
      puts("AT89C2051 Programming Tools V1.00, (c)Freeman Tse, Tipware Workgroup, 98-08-11.");
      puts("Usage: P2051 Read|Write|Erase|Lock [file]  { G|P|T [adr] [dat]}\n");
      puts("       For Read/Write,  hardware set P33=0, P35=P37=1");
      puts("       For Erase/Lock2, hardware set P33=1, P35=P37=0");
      puts("       For Lock1,       hardware set P33=1, P35=P37=1");
   }

   if (argv[1][0]=='E') { eraseData(); return; }
   if (argv[1][0]=='L') { hideData(); return; }

   if (argv[1][0]=='R')
   {
      t0=getclk();
      readData(buf, ROMSIZE);
      tt=getclk();
      printf("\nRD_Time=%i ms\n", (tt-t0)*256L/1193);

      for (int k=0; k<127; k++)
         printf("%02hX   ", buf[k] );
      printf("\n");

      readData(buf2, ROMSIZE);
      for (int i=0, err=0; i<ROMSIZE; i++) if (buf[i]!=buf2[i]) err=1;
      if (err) printf("\nRead_error!\7");
      else printf("\nRead_Ok!");

      if (argc<=2) return;
      fp=fopen(argv[2], "wb"); if (fp==NULL) return;
      fwrite(buf, ROMSIZE, 1, fp);
      fclose(fp);
   }

   if (argv[1][0]=='T')
   {
      int data=0xff;
      sscanf(argv[2], "%02X", &data);
      for (int i=0; i<ROMSIZE; i++) buf[i]=data;
      writeData(buf, ROMSIZE);
   }
   if (argv[1][0]=='t')
   {
      int data=0xff;
      sscanf(argv[2], "%02X", &data);
      for (int i=0; i<ROMSIZE; i++) buf[i]=i;
      writeData(buf, ROMSIZE);
   }
   if (argv[1][0]=='W')
   {
      if (argc<=2) return;
      fp=fopen(argv[2], "rb"); if (fp==NULL) return;
      fread(buf, ROMSIZE, 1, fp);
      fclose(fp);
      t0=getclk();
      writeData(buf, ROMSIZE);
      tt=getclk();
      printf("\nWR_Time=%i ms\n", (tt-t0)*256L/1193);
      readData(buf2, ROMSIZE);
      for (int i=0, err=0; i<ROMSIZE; i++) if (buf[i]!=buf2[i]) err=1;
      if (err) printf("\nWrite_error!\7");
      else printf("\nWrite_Ok!");
   }
   if (argv[1][0]=='G')
   {
      int addr=0;
      sscanf(argv[2], "%02X", &addr);
      printf("\n[%04X]=%02X \n", addr, readByte(addr));
   }
   if (argv[1][0]=='P')
   {
      int addr=0;
      int data=0xff;
      sscanf(argv[2], "%02X", &addr);
      sscanf(argv[3], "%02X", &data);
      writeByte(data, addr);
   }
}


/*

文章請見《電子報》2000年第27期

  • 上一篇: 實用的PIC編程囂的設計方法
  • 下一篇: 51仿真器自制(仿真芯片為SST89E5516)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1