Circuit microcontroleur 8051

De MicElectroLinGenMet.

Sommaire

Description

(Voir le 8051 sur Wikipedia)



Brochage


Image:8051_DIP40_Brochage.png


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

Image:89C2051.png

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.

Carte Scalp Elektor

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).

Détail des modifications



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

8051_lib.tgz

  • 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