亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

组件与材料

所需工具

软件与在线服务

项目简介

本教程将演示如何使用 Arduino Uno 将十六进制文件烧录到 AT89C52 单片机中。通过将 AT89C52 与 Arduino Uno 连接,并接入 LED 指示灯,仅需几个简单步骤即可完成编程。

步骤 1:准备材料

请准备上述组件清单中的所有元件。

步骤 2:连接单片机

按以下引脚对应关系将 AT89C52 与 Arduino Uno 连接:

AT89C52 引脚Arduino Uno 引脚
Pin 6Pin 5
Pin 7Pin 4
Pin 8Pin 3
Pin 9Pin 2

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

步骤 3:连接晶振

将 12MHz 晶振连接在 AT89C52 的 Pin 18 和 Pin 19 之间,并分别从这两个引脚接 33pF 电容到地。完整电路图请参考原理图部分。

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

步骤 4:连接电源与地

将 Arduino Uno 的 5V 引脚连接到 AT89C52 的第 40 脚(VCC),GND 引脚连接到第 20 脚(GND)。

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

步骤 5:接入 LED 指示灯

根据原理图部分提供的电路图连接 LED,用于指示编程状态。

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

步骤 6:软件准备与烧录

使用“8051 SPI Programmer”软件将十六进制文件烧录到 AT89C52。软件下载链接见上文“软件与在线服务”部分。将提供的 Arduino 代码上传至 Arduino Uno,即可将其转变为编程器。

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

Arduino 编程器代码

#define dummyData 0xAA
#define RDY 75
#define NRDY 76
const int _MISO = 4;
const int _MOSI = 5;
const int _CLK = 3;
const int RST = 2;

byte data;
byte AL, AH; // 16位地址
byte lockByte; // 锁定位
byte SigH, SigL; // 签名字节

void setup() {
  pinMode(_MISO, INPUT);
  pinMode(_MOSI, OUTPUT);
  pinMode(_CLK, OUTPUT);
  pinMode(RST, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  while (!Serial.available());
  if (Serial.available() > 0) switch (Serial.read()) {
    case 'p': Serial.write(progEnable()); break;
    case 'r': readProgmem(); Serial.write(data); break;
    case 'a': while(!Serial.available()); AL = Serial.read(); break;
    case 'A': while(!Serial.available()); AH = Serial.read(); break;
    case 'd': while(!Serial.available()); data = Serial.read(); break;
    case 'S': AH = 0; AL = 0; SigH = readSign(); Serial.write(SigH); break;
    case 's': AH = 2; AL = 0; SigL = readSign(); Serial.write(SigL); AH = 1; AL = 0; SigL = readSign(); Serial.write(SigL); break;
    case 'o': digitalWrite(RST,1); break;
    case 'c': digitalWrite(RST,0); break;
    case 'e': eraseChip(); Serial.write(RDY); break;
    case 'j': break;
    case 'w': writeProgmem(); break;
  }
}

unsigned char SendSPI(unsigned char data) {
  uint8_t retval = 0;
  uint8_t intData = data;
  int t;
  for (int ctr = 0; ctr < 7; ctr++) {
    if (intData & 0x80) digitalWrite(_MOSI,1); else digitalWrite(_MOSI,0);
    digitalWrite(_CLK,1); delayMicroseconds(1);
    t = digitalRead(_MISO);
    digitalWrite(_CLK,0);
    if (t) retval |= 1; else retval &= 0xFE;
    retval <<= 1; intData <<= 1; delayMicroseconds(1);
  }
  if (intData & 0x80) digitalWrite(_MOSI,1); else digitalWrite(_MOSI,0);
  digitalWrite(_CLK,1); delayMicroseconds(1);
  t = digitalRead(_MISO);
  digitalWrite(_CLK,0);
  if (t) retval |= 1; else retval &= 0xFE;
  return retval;
}

byte progEnable() {
  SendSPI(0xAC); SendSPI(0x53); SendSPI(dummyData); return SendSPI(dummyData);
}
void eraseChip() {
  SendSPI(0xAC); SendSPI(0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520);
}
void readProgmem() {
  SendSPI(0x20); SendSPI(AH); SendSPI(AL); data = SendSPI(dummyData);
}
void writeProgmem() {
  SendSPI(0x40); SendSPI(AH); SendSPI(AL); SendSPI(data);
}
void writeLockBits() {
  SendSPI(0xAC); SendSPI(lockByte); SendSPI(dummyData); SendSPI(dummyData);
}
void readLockBits() {
  SendSPI(0x24); SendSPI(dummyData); SendSPI(dummyData); lockByte = SendSPI(dummyData);
}
byte readSign() {
  SendSPI(0x28); SendSPI(AH); SendSPI(AL); return SendSPI(dummyData);
}

原理图

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南

制造工艺

  1. 使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南
  2. Arduino 解码遥控接收机 PPM 信号——分步指南
  3. Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
  4. ThimbleKrox:基于 Arduino Micro 与 MPU-6050 的指戴式鼠标控制器
  5. Intel Curie 加速度计驱动的体感触发灯光系统
  6. 无线Arduino编程盾:HC-05蓝牙模块实现免USB线烧录
  7. Arduino 门磁传感器:PHPoC WiFi Shield 经 IFTTT 推送 Messenger 实时告警
  8. 基于 Arduino 的智能温室监测与自动灌溉系统
  9. Arduino DIY 计算器:1602 LCD + 4×4 矩阵键盘完整教程
  10. Arduino驱动WS2812智能LED蜡烛灯:自然摇曳光效的全屋部署实战
  11. Arduino 网页控制灯泡:PHPoC Shield 实现 WebSocket 实时控制
  12. Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试