Programação da série Atmel AT89 via Arduino
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Ferramentas e máquinas necessárias
![]() |
|
Aplicativos e serviços online
![]() |
| |||
|
Sobre este projeto
Neste tutorial, mostrarei como gravar seu arquivo hexadecimal em AT89c52 usando o Arduino Uno em apenas algumas etapas fáceis. Para isso temos que fazer a interface do AT89c52 com o Arduino Uno e dar a ele indicações de led via LED de interface para o At89c52.
Etapa 1:lista de materiais
- Arduino UNO
- Microcontrolador AT89C52
- Capacitor 10uF
- Fios de jumpers
- Resistor de 8,2 kohm
- Capacitor de 510 ohm
- LED
- Cristal de 12 MHz
- 2 x 33pF capacitor
Etapa 2:Conectando o microcontrolador

Conecte o microcontrolador conforme mencionado abaixo:
- At89c52 Arduino Uno
- pino 6 pino 5
- pino 7 pino 4
- pino 8 pino 3
- pino 9 pino 2
Etapa 3:Cristal

Conecte um cristal nos pinos 18 e 19 do Atmel e, em seguida, conecte dois capacitores 33pf dos pinos 18 e 19 ao aterramento do Atmel. Consulte a seção de esquemáticos para obter o diagrama completo do circuito.
Etapa 4:VCC e GND

Conecte o pino 5v do Arduino Uno ao 40º pino do Atmel e o pino GND ao 20º pino do Atmel.
Etapa 5:interface de LED


LED de interface com a ajuda do diagrama de circuito fornecido na seção esquemática.
Etapa 6:Software

Precisamos do 8051 SPI Programmer para gravar o arquivo hexadecimal em 89c52. O link é fornecido na seção de software. Carregue o código fornecido ao Arduino UNO e seu programador está pronto.
Código
- Arquivo sem título
Arquivo sem título C / C ++
#define dummyData 0xAA # define RDY 75 # define NRDY 76const int _MISO =4; const int _MOSI =5; const int _CLK =3; const int RST =2; / * Bloco de definição de variável * / dados de byte; byte AL , AH; // addressbyte de 16 bits lockByte; // incorpora bits de bloqueio aqui SigH, SigL; // Assinatura Bytesvoid setup () {pinMode (_MISO, INPUT); pinMode (_MOSI, OUTPUT); pinMode (_CLK, OUTPUT); pinMode (RST, OUTPUT); Serial.begin (115200); // depende da configuração do PC host} void loop () {while (! Serial.available ()); // espera pelo caractere if (Serial.available ()> 0) switch (Serial.read ()) {case 'p':Serial.write (progEnable ()); pausa; case 'r':readProgmem (); Serial.write (dados); pausa; case 'a':while (! Serial.available ()); AL =Serial.read (); pausa; case 'A':while (! Serial.available ()); AH =Serial.read (); pausa; case 'd':while (! Serial.available ()); dados =Serial.read (); pausa; caso 'S':AH =0; AL =0; SigH =readSign (); Serial.write (SigH); pausa; case 's':AH =2; AL =0; SigL =readSign (); Serial.write (SigL); AH =1; AL =0; SigL =readSign (); Serial.write (SigL); pausa; // lê o caso SigL 'o':digitalWrite (RST, 1); caso 'c':digitalWrite (RST, 0); pausa; case 'e':eraseChip (); Serial.write (RDY); pausa; caso 'j':quebra; case 'w':writeProgmem (); pausa; }} SendSPI de char não assinado (dados de char não assinados) {uint8_t retval =0; uint8_t intData =data; int t; para (int ctr =0; ctr <7; ctr ++) {if (intData &0x80) digitalWrite (_MOSI, 1); senão digitalWrite (_MOSI, 0); digitalWrite (_CLK, 1); atrasoMicrosegundos (1); t =digitalRead (_MISO); digitalWrite (_CLK, 0); if (t) retval | =1; senão retval &=0xFE; retval <<=1; intData <<=1; atrasoMicrosegundos (1); } if (intData &0x80) digitalWrite (_MOSI, 1); senão digitalWrite (_MOSI, 0); digitalWrite (_CLK, 1); atrasoMicrosegundos (1); t =digitalRead (_MISO); digitalWrite (_CLK, 0); if (t) retval | =1; senão retval &=0xFE; return retval; } byte progEnable () {SendSPI (0xAC); SendSPI (0x53); SendSPI (dummyData); retornar SendSPI (dummyData);} void eraseChip () {SendSPI (0xAC); SendSPI (0x9F); SendSPI (dummyData); SendSPI (dummyData); atraso (520);} void readProgmem () {SendSPI (0x20); SendSPI (AH); SendSPI (AL); dados =SendSPI (dummyData);} void writeProgmem () {SendSPI (0x40); SendSPI (AH); SendSPI (AL); SendSPI (dados);} 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); retornar SendSPI (dummyData);}
Esquemas


Processo de manufatura
- Programação da série Atmel AT89 via Arduino
- Leitura do sinal PPM do receptor RC usando Arduino
- Arduino - Enviar temperatura para a Web via serial
- ThimbleKrox - Controle do mouse com os dedos
- Controle de circuito sensível a movimento via Intel Curie
- BLUE_P:Wireless Arduino Programming Shield
- Arduino - Monitorando a porta aberta via Facebook Messenger
- Arduino - Desenho via Web usando o controlador de motor de passo
- Calculadora Arduino
- Controle de ventilador PWM de 4 pinos de 25 kHz com Arduino Uno