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;
}
Lesezeichen