Previous Page Table Of Contents Next Page


Bitte beachte die Copyrighthinweise.

La12-ww2

Interfacetechnik

1 Aufgabenstellung

Folgende Aufgabe ist mittels eines Computerprogramms und einer PC-Steckkarte mit den entsprechenden Bausteinen zu lösen:

· Ansteuerung des Parallel-Interfacebausteins PIO 8255 (als Lauflicht)

· Aufbau eines Reaktionstesters mittels des PIO 8255 und des Counter-Timers CT 8253

Weiter mögliche Aufgaben: Umkodierer, Ansteuerung einer 7-Seg.-Anzeige etc.

2 Allgemeines

Beim 8255 handelt es sich um einen 24Bit Parallel Ein-/Ausgabebaustein. Die Basisadresse der verwendeten PC-Steckkarte war 1B0h.

Es sind drei Ports mit je 8 Bit vorhanden, die auf Basisadresse bis Basisadresse +2 liegen. Port C ist in die unteren und oberen 4 Bit unterteilbar (PCHigh/PCLow). Die Ein-/Ausgänge sind TTL-kompatibel. Zusätzlich ist ein 8Bit Steuerregister auf Basisadresse +3 vorhanden.

2.1 Steuerregister

Die oberen 4 Bit geben den Modus des Bausteins an, hier wurde nur der Modus 0 mit 1000bin verwendet. Die unteren 4 Bit geben an, ob die Ports als Ein- oder Ausgang geschaltet sind. Die Reihenfolge der Bits entspricht PA, PCHigh, PB, PCLow.

 

Steuerwort

   

Ports

 

Modus (obere 4 Bit)

I/O (untere 4 Bit)

· Hex-Zahl

PA

PCH

PB

PCL

1000

0000

80h

O

O

O

O

1000

0001

81h

O

O

O

I

1000

0010

82h

O

O

I

O

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1000

1111

8Fh

I

I

I

I

2.2 Ansteuerung der Ports unter DOS

Pascal: Schreiben: Port[$1B0]:=var; Portw[$1B0]:=var;

Lesen: var:=Port[$1B0]

C: Schreiben mit outport, outportb oder outp, outpw

Lesen mit inport, inportb oder inp, inpw

3 Lauflicht

3.1 Funktionsweise des Programms

Zuerst werden alle Ports auf Ausgabe geschaltet (80h).

Die Variable Byte wird mit 1 (00000001bin) initialisiert. Durch Multiplikation mit 2 wird das gesetzte Bit jeweils um eine Stelle nach links geschoben, sobald es nach links hinausfällt, wird die Variable mittels einer if-Anweisung wieder auf 1 gesetzt.

/*************************************************************************

/* Editor: Florian Rosenauer @ HTBLA Karlstein, Austria-3830 Waidhofen/Th.

/* Datum: 23/Jan/1997 Klasse/Gruppe/Kat.Nr : IV-EA/-/--

/*************************************************************************

/* Sprache : Turbo C 2.0 DOS

/* Programm Nr. : 16a

/* Kurzbeschreibung : 4EA Labor 12 - Interfacetechnik mit PIO 8255

/* Lauflicht am Port A

/*************************************************************************

*/

const float VERSION = 1.00;

/************************************************************************/

#include <stdio.h>

#include <conio.h>

#include <dos.h>

const int BASEPORT = 0x1B0;

void main()

{ unsigned char byte = 1;

printf ("\n\n-------------------------------\n");

printf ("Interfacetechnik, Version %4.2f\n", VERSION);

printf ("Baustein PIO 8255\n");

printf ("Sende Steuerwort...\n");

outportb (BASEPORT+3,0x80);

printf ("Lauflicht laufe!? Abbruch mit Taste\n");

do

{ gotoxy (1, wherey());

printf ("Sende: %3u (%#4x)",byte,byte);

outportb (BASEPORT+0, byte);

byte *= 2; /* ShiftLeft, d.h mit 2 multiplizieren */

delay(100);

if (!byte)

byte = 1; /* falls Ueberlauf auf 1 ruecksetzen */

}

while ( !kbhit() );

}

La12a.c:

Das Programm funktionierte einwandfrei. Die LEDs konnten sowohl auf der Steckkarte (nur Port A) als auch mit einer externen Platine, an die das Flachbandkabel der Steckkarte angeschlossen wurde, beobachtet werden.

Durch einen Hardwarefehler leuchtete eine LED von Port A nicht auf.

Statt dieser Seite Struktogramm La16a.sp ausdrucken!

4 Reaktionstester

Mithilfe eines Tasters soll ein Reaktionstester aufgebaut werden.

4.1 Schaltung

4.2 Funktionsweise

Auf der Computersteckkarte befanden sich auch noch Counter-Timer Bausteine CT 8253, die zusammen mit dem 8255er verwendet wurden.

CT0 gibt ein 100Hz/10ms Rechtecksignal aus. Nach einer bestimmten, zufällig ermittelten Zeit wird am Port PA0 High ausgegeben. Dadurch leuchtet die LED auf und über das Gate von CT1 wird dieser freigeschaltet und beginnt die Impulse zu zählen, bis der Taster S1 gedrückt und CT1 somit wieder gestoppt wird. Das Programm erkennt diesen Zustand über PC0, der als Eingang geschaltet ist und liest die gezählten Impulse von CT1 aus.

CT0 wird mit dem internen Systemtakt gesteuert, während CT1 einen externen Zähltakt erhält. Hierfür musste auf der Steckkarte (DIP-Schalter) Switch3 auf ON (CT0 intern) und Switch2 auf OFF (CT1 extern) gestellt werden.

Da es sich um TTL-Bausteine handelt, konnte das Gate von CT0 offengelassen werden, es ging selbständig auf High.

Der Widerstand Rs ist notwendig, dass PA0 nicht kurzgeschlossen wird.

4.3 Programm

CT0 wird als 100Hz-Rechteckgenerator betrieben. Hierzu wird im Programm folgendes Steuerwort in das 8Bit Steuerregister von CT0 auf 1BBh geschrieben: 00110110 = 36h:

D7

D6

D5

D4

D3

D2

D1

D0

0

0

1

1

X (= 0)

1

1

0

Steuerwort gilt für CT0

nach dem Steuerwort folgt niederwertiges und höherwertiges Byte ins READ/WRITE - Port

Modus 3 (Rechteckgenerator) setzen

Binär zählen

Der Timer zählt danach ständig von einer 16Bit Zahl bis auf null und erzeugt dabei ein Rechtecksignal am Ausgang. Dieses 16Bit Wort wird in das niederwertige und höherwertige Byte aufgeteilt und in dieser Reihenfolge in das 8Bit READ/WRITE Port geschrieben.

Der Systemtakt sollte eigentlich bei 1,19MHz liegen, mit dem Oszilloskop wurden jedoch 2MHz gemessen. Geteilt durch 20000 = 4E20h ergibt sich ein 100Hz Signal. Deshalb wurden nacheinander 20h und 4Eh auf das READ/WRITE Port 1B8h geschrieben.

Danach wird im Programm über das Steuerport des 8255er PA mittels des Werts 81h auf OUTPUT, PCLow auf INPUT gesetzt.

Nachdem PA gelöscht wurde (00h, LED dunkel), wartet das Programm eine bestimmte, zufällig ermittelte Zeit ab und setzt PA wieder auf 1 (FFh, LED leuchtet auf). Es kann irgendeiner der 8 Ausgänge von PA verwendet werden.

Aus Zeitgründen könnte das Programm nicht mehr weiter geschrieben werden. Das 100Hz-Signal sowie das für eine zufällige Zeit vorhandene Low-Signal auf PA0 wurden mit dem Oszilloskop P1 überprüft und funktionierten.

Es müsste nun noch Port PC0 überwacht werden, sobald dieser auf Low geht, muss CT1 (der noch nicht initialisiert ist) ausgelesen werden.

La12b.c:

/*************************************************************************

/* Editor: Florian Rosenauer @ HTBLA Karlstein, Austria-3830 Waidhofen/Th.

/* Datum: 23/Jan/1997 Klasse/Gruppe/Kat.Nr : IV-EA/-/--

/*************************************************************************

/* Sprache : Turbo C 2.0 DOS

/* Programm Nr. : 16b

/* Kurzbeschreibung : 4EA Labor 12 - Interfacetechnik mit PIO 8255

/* Reaktionstester

/*************************************************************************

*/

const float VERSION = 1.00;

/************************************************************************/

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <time.h>

#include <stdlib.h>

const int BASEPORT = 0x1B0;

void main()

{ unsigned char byte = 1;

printf ("\n\n-------------------------------\n");

printf ("Interfacetechnik, Version %4.2f\n", VERSION);

printf ("Baustein PIO 8255\n");

printf ("Reaktionstester\n");

printf ("Sende Steuerwort...\n");

outportb (0x1BB,0x36); /*Counter-Timer CT0 init 0011X110b*/

outportb (0x1B8,0x20); /*least significant byte*/

outportb (0x1B8,0x4E); /*most significant byte*/

/*d.h. CT0 zählt von 16bit herunter*/

outportb (BASEPORT+3,0x81); /*Steuerwort port PA output, PClow INPUT*/

outportb (BASEPORT+0,0x00); /*PA0 bis PA7 auf 0 setzen*/

randomize();

delay (random(10000)); /*random*/

outportb (BASEPORT+0,0xFF); /*PA0 bis PA7 auf 1 setzen*/

/*Hier sollte der Rest des Programms stehen*/

printf ("Abbruch mit Taste\n");

getch();

}

5 Interpretation der Messergebnisse

Die Schnittstellen-/Timerbausteine stellen eine einfache Möglichkeit zur Kommunikation des PCs mit seiner Umwelt dar. Mittels einfacher DOS-Programme können schnell kleine Aufgaben gelöst werden.


Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Österreich Lizenz.
[http://www.FLR.at/]
Letztes Update vom 25. Jul. 1999 von Florian Rosenauer

Previous PageTop Of Page Next Page

Powered by Transit