DAs Mach ich es funktioniert doch noch nicht;
es ist nur noch die serielle routine dabei, da ich etwas über rs232
einlese
/**** Angabe der Include Dateien ****/
#include <ADUC831.H>
#include <stdio.h>
#include <string.h>
#include "LCD_DOGM_SPI.h"
//Globale Variablen//
char c, buffer [21] , empfangswort[10]="AAAAA", sendewort[10];
char daten;
char daten_aus = 0xAB;
char buf[6];
bit fertig = 0;
char empf[10]; // Hier wird ein Stringarray definiert (zum empfangen
von ganzen Wörtern),(10 Stellen)
int
empfzeiger=0, //Definieren eines Zeigers, der später weiß, wie
viele Buchstaben das empfangene Wort hat
empfangen=0, // Empfangsflag auf Null setzen
zeitschicken=0,
i=0;
void ini_ser1() // Initialisierung der seriellen Schnittstelle 1
{
T3CON = 0x085; T3FD = 0x08; SCON = 0x052; //Baudratengenerierung
auf Seiten 56-58 im ADUC831.pdf
}
void RS232() interrupt 4 //siehe Seite 60 bei RI und dann erhält man
mit (23-3)/8 die Interruptnummer 4
// beim calc achten, dass auf hex eingestellt ist
{
if (RI)
{
empf[empfzeiger]=SBUF;//Hier werden nacheinander alle 8 bit aus dem
Empfangsbuffer auf den string empf geschrieben (Seite 55)
empfzeiger=empfzeiger+1;
// Rücksetzzeiger wird erhöht
if (empfzeiger == 5 ) // Solange nicht alle 5 Zeichen (Zeit)
empfangen wurden wird dieser erhöht
{
empf[empfzeiger]='\0';
strcpy(empfangswort, empf); //steht der Empfangszeiger auf 5 dh,
wurden alle 5 bytes empfangen wird der empf string auf
empfzeiger=0;
empfangen=1; //das empfangswort kopiert und ist nun für
Georg's Modul abholbar
}
RI=0; // RI mit der Resetmaske rücksetzen
}
}
/*
void SPIINTERRUPT () interrupt 7
{
if(SPIDAT==0xA2 && zeitschicken==0)
{
print_lcd(1,1,"empfangen");
i=0;
zeitschicken=1;
strcpy(sendewort, empfangswort);
SPIDAT = sendewort[1+i];
i++;
}
if (zeitschicken==1)
{
SPIDAT = sendewort[1+i];
i++;
if(i==5)
{
zeitschicken=0;
}
}
}
*/
void SPIINTERRUPT () interrupt 7
{
ISPI = 0;
daten = SPIDAT; // SPI_Daten auf daten schreiben
SPIDAT = daten_aus; // Slave Daten auf SPIDAT schicken um
zu senden
fertig = 1;
// sprintf(buffer,"%x",daten);
// print_lcd(2,1,buffer);
}
main()
{
P1 = 0xFF;
SPICON= 0x23; // Konfiguration SLAVE SPI
init_lcd(); // LCD initialisieren
blank_lcd(); // LCD Bildschirm löschen
ini_ser1(); // Serielle Schnittstelle 1 initialisieren
fertig = 0;
ES=1; // UART Serial Port Interrupt Enable
IEIP2 = IEIP2|0x01; //für SPI Schnittstelle (Interrupt Enable)
EX0=1; //Enable External Interrupt von GPS Modul
EA = 1; // Befehl dass Interupts allgemein erlaubt werden
empf[0]='\0';
empfangswort[0]='\0';
while(1)
{
if(fertig)
{
// sprintf(buf,"%d",i);
// print_lcd(2,6,buf);
i++;
// daten_aus = daten_aus + 1;
// print_lcd(1,1,"empfangen");
fertig = 0;
}
if(empfangen) //Prüfen ob etwas empfangen wurde
{
empfangen=0;
}
}
}