• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

LCD-Anzeige Initialisieren

RoXX-Nr1

Anfänger/in
Registriert
31.05.2005
Beiträge
52
Reaktionspunkte
0
Hallo
bin hier gerade in der Arbeit und versuche auch schon seit ein paar Tagen ein Anag Vision AV2020 Display anzusteuern. bzw. zuersteinmal initialisieren damit es 2 Zeilen bekommt. Aber ich weiß einfach nicht weiter.

Habe mit ein paar Beispielprogrammen (welche allerdings auch nicht funktionieren) und dem Datenblatt mein eigenes Programm zusammengebastelt.

#include <dos.h>
#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include "TCPIPAPI.H"//für Warteschleidr API_SLEEP

static union REGS rein;//für Softwareinterrupts werden Datensätze benötigt,
static union REGS raus;//die später die Register des Prozessors beeinflussen
//die beiden Datensätze rein und raus werden
//hier definiert

#define TCPIPVECT0xAC //definiert einen Softwareinterrupt
#define Ausgang0x600//0X600 ist die Hardwareadresse der Ausgabekanäle

void warte(int ms);//kündigt ein Unterprogramm "Warteschleife" an


int main()


{
// Damit man folgendes Programm nachvollziehen kann, muss man die Wertigkeit
// der einzelen Bits am LCD-Display kennen. Das LCD-Display soll im Beispiel im
// 4-Bit-Daten-Modus betrieben werden.
// Die Bedeutung der einzelnen Bits im Betriebsartenmodus können in der Unterlage
// "Hardwarenahme Schnittstellenprogrammierung" (s.Seiten 25-27) nachgelesen werden

//Ausgänge initialisieren // Damit wird über den PCS6(Programable Chip Select)
rein.h.ah=0x83; // der "Ein- Ausgabe-Baustein" freischaltet
rein.x.dx=0x40; //
int86(0xA2,&rein,&raus);

warte(15);
// outportb(0x600, 0x31);
// warte(5);
outportb(0x600, 0x3);

// warte(5);
// outportb(0x600, 0x31);
warte(5);
outportb(0x600, 0x3);

// warte(5);
// outportb(0x600, 0x31);
warte(5);
outportb(0x600, 0x3);

warte(5);
outportb(0x600, 0x21);
warte(5);
outportb(0x600, 0x20);

warte(5);
outportb(0x600, 0x21);
warte(5);
outportb(0x600, 0x20);

warte(5);
outportb(0x600, 0x81);
warte(5);
outportb(0x600, 0x80);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);

warte(5);
outportb(0x600, 0xC1);
warte(5);
outportb(0x600, 0xC0);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);

warte(5);
outportb(0x600, 0x11);
warte(5);
outportb(0x600, 0x10);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);
warte(5);
outportb(0x600, 0x41);
warte(5);
outportb(0x600, 0x40);
warte(5);


outportb(0x600, 0x45);
warte(5);
outportb(0x600, 0x44);
warte(5);
outportb(0x600, 0x15);
warte(5);
outportb(0x600, 0x14);

return 0;
}



//Unterprogramm(e)

//Programm für Wartezeit

void warte(int ms) //Warteschleifenprogramm ist ein Softwareinterrupt
//und wird hier eigentlich nur initialisiert
{
rein.h.ah = API_SLEEP;
rein.x.bx = ms;//Zeitangabe in ms
int86(TCPIPVECT,&rein,&raus);
}


ist sehr viel falsch oder warum geht nichts?
 
Zurück