Hallo Zusammen!
Meine Funktion getch() soll ein Zeichen über die UART-Schnittstellte einlesen. Jedoch passiert nichts.
Die Funktion putch() zum senden eines Zeichen geht einwandfrei.
Kann den Fehler einfach nicht finden. Vielleicht hat ja einer von euch eine Idee?
Vielen Dank!
Code:#define TAKT 16000000UL #define BAUD 9600UL #define US1 0xE0 #define IRM 0 #define IRR 1 #define IRL 2 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include "Motor/motor.h" #include "IR/irmessung.c" #include "US/usmessung.c" //----------------------------Fuktionen-----------------------------------------------------------------// //------------UART-Konfig---------------------// void initusart (void){ unsigned char x; UBRRL = (TAKT / (16UL * BAUD)) -1; UCSRB |= (1 << TXEN) | (1 << RXEN); UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); x = UDR; } //------------Char senden---------------------// void putch (unsigned char x){ while ( ! (UCSRA & (1 << UDRE))); UDR = x; } //------------Char emfangen---------------------// unsigned char getch(void){ while (!(UCSRA & (1 << RXC))); return UDR; } //------------Befehl einlesen---------------------// void befehleinlesen (unsigned char *pbefehl, unsigned int anz){ unsigned char zwbef=0; unsigned char zwerg=0; zwbef=0xFF; *pbefehl = zwbef >> 7; //Motorbefehl if(*pbefehl == 0x01){ zwerg=zwbef; zwerg= zwerg & 0x60; *(pbefehl+1)= zwerg >> 5; zwerg=zwbef; zwerg=zwerg & 0x10; *(pbefehl+2)= zwerg >> 4; zwerg=zwbef; zwerg=zwerg & 0x0F; *(pbefehl+3)= zwerg; zwbef=0xFF; *(pbefehl+4)= zwbef; } //Sensorbefehl if(*pbefehl == 0x00){ zwerg=zwbef; zwerg= zwerg & 0x70; *(pbefehl+1)= zwerg >> 4; } } //----------------------------Hauptprogramm-------------------------------------------------------------// int main (void){ // Variablen unsigned char i=0; unsigned char vor=1; //Motorrichtung unsigned char rck=0; //Motorrichtung unsigned char wert=0; //IR Messwert unsigned char befehl[5]; //Befehlsspeicher unsigned char empfang // Programmstart initusart(); while(1){ empfang=getch(); getch(); befehleinlesen(befehl,5); _delay_loop_2 (6000); _delay_loop_2 (6000); for(i=0;i<=4;i++) putch(befehl[i]); /* //IR-Messen wert=irmessung(1); putch(wert); _delay_loop_2 (6000); */ } return 0; }







Zitieren

Lesezeichen