Circuit microcontroleur 8051
De MicElectroLinGenMet.
Sommaire |
Description
(Voir le 8051 sur Wikipedia)
Brochage
Circuits compatibles
8052 AH Basic Philips
Manuel du language BASIC 8052AH: ManuelIntel8052ahBasic (Pages htmls compressées)
Voir page sur la Carte Scalp 8052AH Basic Elektor.
80C32
DataSheet 80C32.pdf
Voir Carte Scalp2 uC 80C32
AT89C1051 / AT89C2051 / AT89C4051
Les micro-controleurs de chez Atmel ont un core compatible avec le 8051 et possédent une mémoire programme flash de 1ko(1051), 2ko (2051) et 4ko pour la version 4051.
DataSheet AT89C2051.pdf et AT89C4051.pdf
Fonctions du 89C2051:
- Compatible avec les produit MCS-51™
- 1K,2K,4K octets de mémoire Flash
- Jusqu'à 1000 cycles d'effacement/écriture
- Tension de fonctionnement 2.7V à 6V
- Fréquence possible de 0 Hz to 24 MHz
- Deux niveaux de protection du code
- 128 x 8-bit RAM interne
- 15 Entrées/sorties programmables
- 2 compteurs/horloges 16 bits
- 6 sources d'interruption
- 1 port série programmable
- Connexion LED en direct possible en sortie
- Comparateur analogique intégré
- Mode veille et faible consommation
Voir ci-dessous montages personnels à base de 89C2051.
89C51 / 80C52
DataSheet 80C51-52.pdf
80C652
DataSheet 80C652.pdf
Voir Carte personnelle à 80C652
80C552
DataSheet 80C552.pdf
80C750/80C751
DataSheet 87c750.pdf et Fichier:87c751.pdf.
Note d'application: Pilotage d'un afficheur LCD avec un 87C751
Note d'application: Connecting a PC keyboard to a i2c bus with a 87C751
Documentations
Site incontournable sur la famille 8051: The 8052 Online Resource
Guide de programmation: 8051 program guide
Note d'application AN425 Interfacing the PCD8584 controller to 80C51 family.pdf
Outils de développement 8051 maison sous Linux
Utilisation de la carte Carte Scalp 8052AH Basic pour la mise au point de programmes assembleurs.
Cette carte est prévu pour écrire des programmes Basics mais peut aussi exécuter du code machine.
La seul contrainte consiste à placer ce code dans un zone de RAM exécutable. Le 8052 faisant une différence entre les zones mémoires de code et de données.
- Adaptations matériels pour excution de code machine en RAM.
- Suppression seconde RAM 8ko pour reprendre signal WR.
- EPROM remplacer par une RAM 8ko
Cette RAM va stocker les programmes assembleur (RAM pilotée par le signal PSEN, signale actif lors d'execution de code).
Transfert de programme BASIC
La carte SCALP se relie au PC par le port série et permet de rentrer des programmes en direct dans une console série comme minicom sous Linux.
senbas.c permet de transférer directement un prgramme Basic sur le scalp.
Le source BASIC ne necessitera pas de numéro de ligne. Ceux-ci sont remplacé par des labels pour les sauts.
Le programme sendbas renumerotera automatique les lignes en fonction de ces labels utilisés.
$ ./sendbas Usage: ./sendbas /dev/ttySx NomFichierBas [run] => /dev/ttySxx : Port série relié au Scalp. => NomFichierBas : Source BASIC modifié à transférer. => run : Si mis, le programme BASIC est exécuté aprés transfert.
Exemple:
$ ./sendbas /dev/ttyS1 dumpram.bas ------------------------------------------------------------------------------- Transfère Scalp fichier BAS 'dumpram.bas' sur '/dev/scalp' à 19200 bps: > ram READY > new > --- 10 input a > 20 for i=a to a+0ffh step 16 > 30 ph1.i, > 40 for j=0 to 15 > 50 ph0.xby(i+j), > 60 next j > 70 print > 80 next i > 90 goto 10 Transfert terminé ! -------------------------------------------------------------------------------
Exemple du programme Basic SCALP dumpram.bas sans n° de ligne (Remplacer par des labels):
' 10 INPUT "Adresse de debut ? ",a FOR i=a TO a+0ffh STEP 16 ph1.i, FOR j=0 TO 15 ph0.cby(i+j), NEXT j PRINT NEXT i GOTO °10
Assembleur
Cross-Assembleur utilisé sous Linux: tpasm
$ tpasm -h tpasm version 1.4 Copyright (C) 1999-2005 Core Technologies. Cross Assembler Usage: tpasm [opts] sourceFile [opts] Assembly Options: -h Output this help message -o type fileName Output 'type' data to fileName Multiple -o options are allowed, all will be processed No output is generated by default -I dir Append dir to the list of directories searched by include -d label value Define a label to the given value -P processor Choose initial processor to assemble for -n passes Set maximum number of passes (default = 32) -l listName Create listing to listName -w Do not report warnings -p Print diagnostic messages to stderr Information Options: --show_procs Dump the supported processor list --show_types Dump the output file types list
Utilisation pour le uControleur 8051:
tpasm -P 8052 -o intel fichierhex -l fichierlst fichierasm
Transfert de code Assembleur
Le programme permet de transférer des fichiers Intel HEX (fichiers ACSII représentant les codes binaires assembleur 8051) généré par tpasm sur le SCALP.
Exemple de fichier HEX:
$ cat receatm.hex :1080500011E011A511E011D711E0743E119D1177C7 :10806000B4580201FC9082BBF8C0E01177F0A3D8AD :10807000FAD0E011B1015AC083C08290000079109B :1082A000F122C29700D2960000000000C29622D2AE :0C82B00097D2960000000000C296220049 :00000001FF
Le programme sendhex utilise le programme sendbas pour envoyer un programme basic servant à recevoir les codes Intel Hex et a les copier en RAM programme à l'adresse 0x9000.
$ ./sendhex Usage: ./sendhex /dev/ttySx NomFichierHex
$ ./sendhex /dev/ttyS1 test.hex ------------------------------------------------------------------------------- Transfère Scalp fichier HEX 'Test.hex' sur '/dev/scalp' à 19200 bps: > ph0.xby(8000h) 00H > RECEHEX.ASM non installé ! Transfert de RECEHEX ... ------------------------------------------------------------------------------- Transfère Scalp fichier BAS 'recehex.bas' sur '/dev/scalp' à 19200 bps: > ram READY > new > --- 10 mtop=0FFFh > 20 > 30 > 40 restore > 50 for i=0 to 78-1 > 60 read c > 70 xby(8000h+i)=c > 80 next > 90 end > 100 DATA 074h,03Eh,011h,046h,011h,01Bh,0B4h,058h,001h,022h,0F8h > 110 DATA 011h,01Bh,0F5h,083h,011h > 120 DATA 01Bh,0F5h,082h,011h,01Bh,0F0h,0A3h,0D8h,0FAh,080h,0E5h,0C0h > 130 DATA 083h,0C0h,082h,090h > 140 DATA 000h,000h,079h,010h,020h,098h,016h,0D9h,0FBh,0A3h,0E5h,083h > 150 DATA 045h,082h,070h,0F2h > 160 DATA 0D0h,082h,0D0h,083h,0D0h,0E0h,0D0h,0E0h,074h,054h,011h,046h > 170 DATA 022h,0D0h,082h,0D0h > 180 DATA 083h,0C2h,098h,0E5h,099h,022h,030h,099h,0FDh,0C2h,099h,0F5h > 190 DATA 099h,022h > Transfert terminé ! Execute programme Basic ... run READY > ------------------------------------------------------------------------------- Transfère Scalp fichier HEX 'Test.hex' sur '/dev/scalp' à 19200 bps: > ph0.xby(8000h) 74H > dby(62)=80h > mtop=0FFFh > call 8000h > :10900000110D11D311DF11EC312B111B227978785E > :1090100008901008E6F0A308D9FA22797878089029 > :109020001008E0F6A308D9FA2212909575F0007B9B > :10903000087A10E5F012906A742D129054A8F0E6A8 > :1090400012906A7C0A1290B305F0DAF1129095DB67 > :10905000E0119522C299F5993099FD22309809E5E1 > :1090600099C298B42002D322C322C0E011767420A2 > :10907000129054D0E022C0E0C0E0C4540F1188D058 > :10908000E0540F1188D0E022B40A004002240724E3 > :109090003012905422C0E0740D129054740A129051 > :1090A00054D0E022DCFE22C0E07F000FEFB4FFFBD3 > :1090B000D0E0221290A7DCFB22C0E07E007D040EEF > :1090C0001290A7EE70F91DED70F5D0E0221290B964 > :1090D000DCFB2253D0E7E82AF8E93BF9A2D222537D > :1090E000D0E7E8C39AF8E99BF9A2D222C0F0C08287 > :1090F000E88AF0A4C0E0C0F0E88BF0A4D00028F823 > :10910000E435F0F582EA89F0A428F8E58235F0F537 > :1091100082E43400C0E0EB89F0A42582FAD0E03587 > :10912000F0FBA900D000D082D0F0227F007E007535 > :10913000F010C3E833F8E933F9EE33FEEF33FFEE16 > :10914000C39AF582EF9BF583B35004AF83AE82ECF4 > :1091500033FCED33FDD5F0DAEDF9ECF8EFFBEEFA88 > :0191600022EC > Transfert terminé ! -------------------------------------------------------------------------------
Autres commandes
- sendcmd
Permet d'envoyer une commande BASIC sur le SCALP
$ ./sendcmd Usage: ./sendcmd /dev/ttySx commande
$ ./sendcmd /dev/ttyS1 "call 9000h"
- sendeprom
Programmation fichier HEX sur EPROM (EPROM à placer sur support "insertion nulle", necessiite une "haute" tension de programmation.)
- sendatm
Programmation fichier HEX sur 89C2051 (necessite une interface maison reliée au Scalp)
- sendemul
Transfert fichier HEX sur Emulateur EPROM Elektor
- Convertisseur fichier asm TASM => TPASM
TASM est un Cross-Assembleur sous Windows utilisant une syntaxe différente de TPASM dans les fichiers sources ASM.
Ce script permet de convertir d'un format TASM vers TPASM.
$ cat Tasm2Tpasm.sh
# Convertisseur fichier Tasm en fichier Tpasm. # 8051_equ.asm modifié. # include nomfichier ou .include nomfichier => include "nomfichier" # #define ROUTINE => ROUTINE equ 1 # #ifdef => ifdef # #endif => endif # label equ Px.y => label equ Px_y # Les Retour chariot sont supprimés. # if [ "$1" = "" ] then echo "Manque fichier assembleur en paramètre 1 !" exit 1 fi tasm_file=$1 tpasm_file=`basename $1` echo "Conversion fichier assembleur TASM '$tasm_file' en fichier TPASM $tpasm_file ..." flip -ub $1 sed 's/^[ ]*#define[ ]*\(.*\)$/\1 equ 1/' $tasm_file | \ sed 's/^[ .]*include[ ]*\(.*\)$/ include "\1"/' | \ sed 's/#ifdef/ifdef/' | \ sed 's/#endif/endif/' | \ sed 's/^\(.*\)\.\([0-9].*\)$/\1_\2/' > $tpasm_file exit 0
- Sysdev51
Script servant d'interface pour exécuter les différents programmes ci-dessus.
$ ./SysDev51.sh
Système de développement 8051: ------------------------------------------------------------------- - f - Choix du fichier ASM: - e - Edition fichier ASM, - a - Assembler fichier, - t - Assemble et transfert fichier ASM, - x - Assemble, transfert et execute fichier ASM, - p - Assemble, programmation 89C2051 fichier ASM, - P - Assemble, programmation EPROM fichier ASM sur Scalp, - l - Assemble, transfert fichier ASM sur emulateur Elektor, ------------------------------------------------------------------- - 1 - Choix du fichier BAS: - 2 - Edition fichier BAS, - 3 - Transferer fichier BAS, - 4 - Transferer et executer fichier BAS, ------------------------------------------------------------------- - m - Minicom -> Scalp - q - Quitter
Sources des programmes
Scripts et programmes C: SysDev51.tgz
(Sous windows: Ne pas ouvrir le fichier tgz en direct, le técharger avant !)
Librairies personnelles assembleur 8051
- i2c
i2c.lib 24c65.lib ds1621.lib max128.lib pcf8570.lib pcf8574.lib pcf8582.lib pcf8583.lib pcf8591.lib saa1064.lib saa5246.lib lcdi2c4b.lib lcdi2c.lib
- lcd
lcd4bits.lib lcd8bits.lib lcdi2c4b.lib lcdi2c.lib
- série
term.lib serial-bitbanging.lib
- calcul
math16.lib
- divers
utils.lib servos.lib delai.lib
Montages personnels à base de CI 8051
- Carte Scalp2 uC 80C32
- Bus i2C sur 8051: Lcd 4 bits I2C pour 8051
- Carte interface i2c pour 8051 avec horloge + eeprom
- Carte personnelle à 80C652
- Programmateur uC Atmel 89C2051
- Affichage Temperature exterieure et Pression atmospherique sur LCD
- Interface afficheurs matrice 5 x 7
- Interface IDE sur uC 8051 - Scalp
- Horloge temps reel pour Scalp
- Mémoire programme pour INT sur Scalp
- Synthetiseur vocal MEA8000 pour Scalp
- Interface serial-i2c
- Interface rs485-i2c
- Lcd compatible matrix-orbital pour Linux
- Sondes i2c X10-RF
- Mini serveur web i2c sur AT89C2051