Intel D8751H 遇上現代的 ARDUINO


https://goo.gl/ZZXjPC

有一堆過氣的產品廢料,安了一些IC, 原來是INTEL出品,1980年的8751MCU,那種用陶瓷封裝,有個透明窗口的IC,這是第一次看到這些產品,反正不要錢,撿來,有啥用呢?

intel_8751h

有個幾個模擬器,沒有買新的89S51,也就是沒有CPU在上面,用這個8751如何?

首先,據説要用波長2537 Anmstrong紫外光燈,距離一英寸,照射那個IC上的透明的窗口,據説要30分鐘,把ERPOM裏面記載的程序清空,才可以把新的程序燒進去,據説曬太陽也可以,要一個星期的時間,或者用日光燈曬三年。INTEL的DATASHEET有些説明,http://www.datasheetcatalog.com/datasheets_pdf/8/7/5/1/8751H.shtml

第二步,就是找個燒錄器,把程序燒進去。需要用到21V和5V電壓,因爲這個產品據説當年的技術就是 8051 MCU 加上 2764之類的的 4K x 8bit EPROM 組在同一芯片誕生的,很好奇,也終于看到芯片的實際模樣。

這兩樣,都是有難度的,花錢就可以,但是又不想花這個錢來玩,所以用了一個比較笨的方法,自己做燒錄工具,選用手邊有的ARDUINO作爲燒錄器。

GOOGLE到一些現成的東西,不過還要改一大段才能達到目標,那先來讀出EPROM的内容作爲開始吧。

人家的作品 http://www.nycresistor.com/2012/07/07/stick-a-straw-in-its-brain-and-suck-how-to-read-a-rom/

人家的源碼 ,https://github.com/phooky/PROM/blob/master/tools/eeprom_read/eeprom_read.pde



#include <stdint.h>

// Set MAX_ADDR to the largest address you need
// to read. For example, for the 27C512 chips,
// you'll want to use a MAX_ADDR of 65536.
// (That's 512 * 1024 / 8.)
// A 27C256 would be 256 kilobits, or 256 * 1024 / 8 =
// 32768.
#define MAX_ADDR 65536L

// On my board, I've connected pins 26-41
// to the A0-A15 lines, and pins 2-10 to the
// Q0-Q7 lines. You'll want to change these
// pin choices to match your setup.
#define A0 26
#define Q0 2

// When you're all wired up, hit the reset button
// to start dumping the hex codes.

void setup() {
  for (int i = A0; i < A0+16; i++) {
    digitalWrite(i,LOW);
    pinMode(i, OUTPUT);
  }
  for (int i = Q0; i < Q0+8; i++) {
    digitalWrite(i,HIGH);
    pinMode(i, INPUT);
  }
  Serial.begin(115200);
}

void writeAddr(uint32_t addr) {
  uint32_t mask = 0x01;
  for (int i = A0; i < A0+16; i++) {
    if ((mask & addr) != 0) {
      digitalWrite(i,HIGH);
    } else { 
      digitalWrite(i,LOW);
    }
    mask = mask << 1;
  }
}


uint8_t readByte() {
  uint8_t data = 0;
  uint8_t mask = 0x1;
  for (int i = Q0; i < Q0+8; i++) {
    if (digitalRead(i) == HIGH) {
      data |= mask;
    }
    mask = mask << 1;
  }
  return data;
}

void loop() {
  uint32_t addr = 0;
  while (addr < MAX_ADDR) {
    for (int i = 0; i < 16; i++) {
      writeAddr(addr);
      uint8_t b = readByte();
      Serial.print(b, HEX);
      Serial.print(" ");
      addr++;
    }
    Serial.println("");
  }
  while (1) {}
}

ref :
http://dsaprojects.orgfree.com/electronics/8031-ah/e8031-ah.html

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s