Programmation de la série Atmel AT89 via Arduino
Composants et fournitures
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Outils et machines nécessaires
![]() |
|
Applications et services en ligne
![]() |
| |||
|
À propos de ce projet
Dans ce didacticiel, je vais vous montrer comment graver votre fichier hexadécimal sur AT89c52 à l'aide d'Arduino Uno en quelques étapes simples. Pour cela, nous devons interfacer AT89c52 à Arduino Uno et lui donner des indications LED via une LED d'interfaçage à At89c52.
Étape 1 :Nomenclature
- Arduino UNO
- Microcontrôleur AT89C52
- Condensateur 10uF
- Cavaliers
- Résistance de 8,2 kohms
- Condensateur 510 ohms
- LED
- Cristal 12 MHz
- 2 condensateurs 33pF
Étape 2 : Connecter le microcontrôleur

Connectez le microcontrôleur comme indiqué ci-dessous :
- At89c52 Arduino Uno
- Broche 6 Broche 5
- Broche 7 Broche 4
- Broche 8 Broche 3
- Broche 9 Broche 2
Étape 3 :Cristal

Connectez un cristal sur les broches 18 et 19 d'Atmel, puis connectez deux condensateurs 33pf des broches 18 et 19 à la terre d'Atmel. Voir la section Schémas pour le schéma de circuit complet.
Étape 4 :VCC et GND

Connectez la broche 5v d'Arduino Uno à la 40e broche d'Atmel et la broche GND à la 20e broche d'Atmel.
Étape 5 : Interface LED


LED d'interface à l'aide du schéma de circuit fourni dans la section Schémas.
Étape 6 :Logiciel

Nous avons besoin du programmeur 8051 SPI pour graver un fichier hexadécimal sur 89c52. Le lien est fourni dans la section Logiciel. Téléchargez le code fourni à Arduino UNO et votre programmeur est prêt.
Code
- Fichier sans titre
Fichier sans titreC/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;/* Bloc de définition de variable */byte data;byte AL ,AH; // addressbyte 16 bits lockByte; // incorporer les bits de verrouillage ici SigH,SigL; // Signature Bytesvoid setup(){pinMode(_MISO, INPUT);pinMode(_MOSI, OUTPUT);pinMode(_CLK, OUTPUT);pinMode(RST, OUTPUT);Serial.begin(115200); // dépend de la configuration du PC hôte}void loop(){ while (!Serial.available()); // attend le caractère if (Serial.available()> 0) switch (Serial.read()) { case 'p':Serial.write(progEnable()); Pause; cas 'r' :readProgmem(); Serial.write(données); Pause; cas 'a' :while(!Serial.available()); AL =Serial.read(); Pause; cas 'A' :while(!Serial.available()); AH =Serial.read(); Pause; case 'd' :while(!Serial.available()); data =Serial.read(); Pause; cas 'S' :AH =0; AL =0 ; SigH =readSign(); Serial.write(SigH); Pause; cas « s » : AH =2 ; AL =0 ; SigL =readSign(); Serial.write(SigL); AH =1 ; AL =0 ; SigL =readSign(); Serial.write(SigL); Pause; // lecture de la casse SigL 'o' :digitalWrite(RST,1) ;break ; case 'c':digitalWrite(RST,0);break; cas 'e' : effacerChip(); Serial.write(RDY); Pause; cas « j » :pause ; cas « w » : writeProgmem(); Pause; }}char non signé SendSPI (données de char non signées){ uint8_t retval =0 ; uint8_t intData =données ; entier t; for (int ctr =0; ctr <7; ctr++) { if (intData &0x80) digitalWrite(_MOSI,1) ; else digitalWrite(_MOSI,0) ; écriture numérique(_CLK,1) ; délaiMicrosecondes(1) ; t =digitalRead(_MISO); digitalWrite(_CLK,0) ; si (t) retval |=1; sinon retval &=0xFE; retval<<=1; intDonnées<<=1; délaiMicrosecondes(1) ; } if (intData &0x80) digitalWrite(_MOSI,1) ; else digitalWrite(_MOSI,0) ; écriture numérique(_CLK,1) ; délaiMicrosecondes(1) ; t =digitalRead(_MISO); digitalWrite(_CLK,0) ; si (t) retval |=1; sinon retval &=0xFE; retour retour; }octet progEnable(){ SendSPI(0xAC); EnvoyerSPI (0x53); SendSPI(dummyData); return SendSPI(dummyData);}void effacerChip(){ SendSPI(0xAC); EnvoyerSPI (0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520);}void readProgmem(){ SendSPI(0x20); EnvoyerSPI(AH); EnvoyerSPI(AL); data =SendSPI(dummyData);}void writeProgmem(){ SendSPI(0x40); EnvoyerSPI(AH); EnvoyerSPI(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); EnvoyerSPI(AH); EnvoyerSPI(AL); return SendSPI(dummyData);}
Schémas


Processus de fabrication
- Programmation de la série Atmel AT89 via Arduino
- Lecture du signal PPM du récepteur RC à l'aide d'Arduino
- Arduino - Envoyer la température au Web via série
- Dé à coudre - Contrôle de la souris avec vos doigts
- Contrôle de circuit sensible aux mouvements via Intel Curie
- BLUE_P :Bouclier de programmation Arduino sans fil
- Arduino - Surveillance de l'ouverture de la porte via Facebook Messenger
- Arduino - Dessin via le Web à l'aide d'un contrôleur de moteur pas à pas
- Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno