Also ich habe das jetzt so gelöst:Code:#include <inttypes.h> #include <avr/io.h> #include <avr/signal.h> #include <string.h> #define F_CPU 16000000 #define UART_BAUD_RATE 9600 #define UART_BAUD_SELECT (uint16_t)(F_CPU/(UART_BAUD_RATE*16l)-1) void USART_Init (unsigned int baud) { /* Set baud rate */ //UBRR0H = (unsigned char)(baud>>8); //UBRR0L = (unsigned char)baud; UBRR0H = UART_BAUD_SELECT >> 8; UBRR0L = UART_BAUD_SELECT; /* Enable reciever and transmitter */ UCSR0B = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit*/ UCSR0C = (1<<USBS)|(3<<UCSZ0); } void USART_Transmit (unsigned char data) { /* Wait for empty transmit buffer */ while(!(UCSR0A & (1<<UDRE))) ; /* Put data into buffer, sends the data */ UDR0 = data; } //------------------------------------------------------ void send_string(char wort[]) { unsigned int index=0; while(wort[index] != '\0') { USART_Transmit(wort[index]); index++; } return; } //---------------------------------------------------------- unsigned char USART_Recieve(void) { /* Wait for data to be recieved */ while (!(UCSR0A & (1<<RXC))) ; /* Get and return recieved data from buffer */ return UDR0; } long i; int main(void) { DDRC = 0xff; //USART aktivieren mit einer Baudrate von 9600 Baud USART_Init(9600); //Endlosschleife for(;;) { PORTC=0x01; for(i=0 ; i<160000 ; i++){} PORTC=0x00; for(i=0 ; i<160000 ; i++){} //2 über USART verschicken send_string("Hallo"); USART_Transmit(3); } }
Ich meinte das man zb für UBRRH -> UBRR0H schreiben muss das steht nirgendwo ausser in diesem thread. Ich denke das es für nen anfänger irgendwie zu schwer ist mit deiner variante wobei sie sicherlich gut ist. Sie ist nur nicht speziell genug
aber man kann das ja auch nicht für jeden controller schreiben.
Jetzt habe ich nur noch ein problem, ich möchte das nachjedem sende zyklus eine neue reihe begonnen wird.
mfg danielsan
Lesezeichen