Hallo, wollte mit einem PIC eine Verbindung über USB aufbauen indem ich
über ein Terminal ein Zeichen sende und dann eine Antwort bekomme.
Allerdings will die Übertragung nicht so recht funktionieren, dass heißt
bei einer Aufforderung im Terminal funktioniert die Antwort nur
sporadisch. Ich muss dazu sagen dass ich in diesem Bereich noch neu bin,
was habe ich falsch gemacht?
void serialInit()
{
// Das SYNC-Bit auf 0 gesetzt, weil hier der SCI-Modus nicht benötigt
wird
sync = 0;
// Mit dem BRGH-Bit wird der Baudratenbereich ausgewählt, sollte es
gesetzt
// sein wird der High Speed Bereich aktiviert
brgh = 1;
spbrg = 129; // 9600 BAUD bei 20MHz Taktfrequenz
// Durch das SPEN-Bit wird der Serial Port aktiviert, damit können die
Pins
// der USART-Schnittstelle konfiguriert werden
spen = 1;
txen = 1; // Der Datentransfer wird aktiviert
cren = 1; // Der Datenempfang wird aktiviert(kontinuierlich)
rcie = 1; //Für Interrupt rcif
}
char ser_getchar(long waittime)
{
do
{
// Wurden Daten empfangen, wird das RCIF-Bit gesetzt
if (rcif)
{
// Empfangene Daten werden vom RCREG-Register geholt und zurückgegeben
return(RCREG);
}
waittime--;
} while(waittime==0); // Wartezeit wird abgezogen
return(0xff); // Wenn Timeout, dann wird 0xff zurückgegeben
}
void ser_char(char zeichen)
{
//int n = 250;
// Wenn der Buffer leer ist und Daten gesendet werden dürfen
while(!trmt )//&& n==0
{
// --n;
delay_us(10);
}
TXREG = zeichen;
putc(TXREG);
// Daten werden in das TXREG-Register gespeichert,dann automatisch
gesendet
}
void main()
{
set_tris_a(0b11111111);
set_tris_b(0b11111111);
set_tris_c(0b11111100); // Hier wird RC7 und RC6 als Eingang definiert
(RCV-Pin)
port_b_pullups(FALSE);
serialInit(); // Initialisierung der RS232-Schnittstelle
while (1)
{
char startwert;
startwert = ser_getchar(100);
delay_ms(500);
switch(startwert)
{
case 0x30:ser_char( '!'); break;//Ascii 0
default: ser_getchar(100); break;
}
}
}