télécharger 41.74 Kb.
|
INSFP SBA MICROPROCESSUER MOTOROLA 6809 CHAP :06 L’INTERFACE PIA 6821
Le microprocesseur ne travaille pas uniquement avec ses accumulateurs, ses registres et sa mémoire, il lui faut communiquer avec l'extérieur. Pour cela, on utilise des unités d'échange pour assurer le dialogue entre le microprocesseur et la périphérie. Ces échanges étant assurés par l'intermédiaire des bus de données, de contrôle et d'adresses. Ces unités d'échange (appelées interfaces) occupent un certain nombre de cases mémoires dans le champ mémoire du microprocesseur. Ils sont programmables pour s'adapter aux périphériques connectés.
L’interface PIA Parallel Interface Adapter (Adaptateur d’Interface parallèle) est un circuit qui permet au système (Microprocesseur Motorola 6809) de communiquer avec d’autres composants ou dispositifs (clavier, décodeur + afficheur 7 segments au plus simple, ou un clavier, un écran, une imprimante ou un autre ordinateur au plus complexe...) ![]() Fig 01 : Architecture du système à base du Microprocesseur Motorola 6809 Le PIA 6821 est un circuit d'interfaçage parallèle de 2 fois 8 lignes bidirectionnelles. Il dispose de 6 registres internes adressables par 4 adresses différentes:
Exemple:
Il s'agit de deux registres de 8 bits respectivement affectés au port A et au port d'entrée/sortie B. Chaque bit de ces registres défini le sens de transfert des données. Si le bit est à 1, le bit correspondant en ORA ou ORB sera positionné en sortie, s'il est à 0 le bit correspondant de l'ORA ou l’ORBest en entrée. Exemple :Si DDRA contient la donnée $F0, les 4 bits de poids faible du port A seront des entrées et les 4 bits de poids fort seront des sorties.
Les registres d'entrée/sorties permettent d'affecter des états logiques en sortie du PIA ou de lire les états logiques présents sur les lignes du PIA. Cela se fait évidemment en cohérence avec le contenu du DDRA ou du DDRB. Exemple 01 : Si le DDRB contient la valeur $F0, le fait de mettre $FF dans le ORB aura pour effet de positionner les 4 lignes de poids fort du port B au niveau logique "1" (les autres lignes restent inchangées). Le fait de lire le contenu de ORB reviendra à avoir les 4 bits de poids fort à 1(en raison de ce qui s'est fait précédemment) tandis que les 4 bits de poids faible possèderont l'état logique affectés sur ces lignes. Exemple 02: Si le DDRB contient la valeur $FF , le fait de mettre $FF dans le ORB , que peut-on avoir sur le port B ? Si le DDRB contient la valeur $FF ( 8 bits du port B seront des sorties.) le fait de mettre $FF dans le ORB aura pour effet de positionner les 8 lignes du port B au niveau logique "1" .
Ces deux registres ont un fonctionnement plus complexe. Pour résumer leur fonctionnement on dira que : Pour avoir accès au registre DDRA on doit mettre 0 dans le bit 2 du registre CRA Pour avoir accès au registre DDRB on doit mettre0 dans le bit 2 du registre CRB
On commence par mettre la valeur 0 dans le bit 2 du CRB par les instructions : LDA #$00 STA $8003 (adresse du CRB) Ou tout simplement CLR $8003 On vient donc de charger tous les bits du registre de commande par la valeur 0. En mettant 0 dans le bit 2 du registre CRB on a accès au DDRB.
Si on souhaite déclarer un bit du port B en sortie, il faudra mettre un 1 dans ce bit ; inversement, si on veut déclarer un bit en entrée, il faudra mettre un 0 dans cebit. Exemple 01 : Supposons que l’on veuille déclarer les 3 bits de poids faibles en entrée et les 5autres en sortie, il suffira de charger le DDRB par la valeur 1111 1000=$8F Ceci se fera à l’aide des instructions suivantes : LDA #$F8 STA DDRB Exemple 02 : Rappelons que l’adresse du DDRB est 8002. Su on veut tout le port B en sortie, on écrira : LDA #$FF STA $8002
Selon l’exemple 02 tous les bits du port B sont déclarés en sortie : c’est-à-dire, l’information ira du PIA vers l’extérieur. Reste à sortir les valeurs voulues ; il nous faudra avoir accès à l’ORB. Pour cela il faut mettre la valeur 1 dans le bit 2 du CRB (registre de commande du port B) par les instructions : LDA #$04 STA $8003 Ceci étant fait, on a aces à l’ORB. Supposons qu’on veuille allumer les 3 leds de poids forts et éteindre les 5 leds de poids faibles. On écrira alors, LDA #$E0 STA $8002 D’où le programme final :
RESUMER EXEMPLE : Pour afficher E0 sur le port B c’est-à-dire (1110 0000) allumé les 3 Leds de poids fort et éteindre les 5 Leds de poids faible, on procède comme suite :
CLR $8003 (bit 2 du CRB mis à 0) ce qui veut dire que l’adresse $8002 est attribuée au registre DDRB (Adresse DDRB = $8002)
LDA #$E0 STA $8002 (DDRB : 3bits de poids fort déclarer en sorties et 5 bits de poids faible déclaré en entrées)
LDA #$04 STA $8003(bit 2 du CRB mis à 1) ce qui veut dire que l’adresse $8002 est attribuéemaintenant au registre ORB(Adresse ORB = $8002).
LDA #$E0 STA $8002 Page MR : HALAILI MED |
![]() | ... |