Habs mal mit 38400 Baud getestet funktioniert wunderbar....
mal gucken wie sowas mit ctc aussieht.....Code:#include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> #include "init.h" #include "lcd.h" //SoftUART PINS #define RXPIN 2 #define RXINT INT0 #define UARTDDR DDRD #define UARTPIN PIND #define UARTPORT PORTD #define T0REL 204 #define T0WAIT 48 char iOut[20]; unsigned char sFlag = 0; unsigned char bitCnt = 0; unsigned char udr = 0; void cfgInt0(void) { MCUCR |= (1<<ISC01); //INT0 falling edge GICR |= (1<<INT0); //INT0 interrupt enable } void cfgTimer0(void) { TCNT0 = T0WAIT; TCCR0 = 1; //pre = 1 //TIMSK |=(1<<TOIE0); } void cfgSoftUart(void) { UARTDDR &=~ (1<<RXPIN); //RX Pin als Input UARTPORT &=~ (1<<RXPIN); //RX Pin auf 0 cfgInt0(); //Software UART Interrupt cfgTimer0(); //Software UART Timer } int main(void) { cfgPorts(); cfgSoftUart(); cfgLcd(LCD_ON_CURSOR_OFF); lcdCls(); enableInterrupts(); _delay_ms(200); lcdPrint("Software Uart",1,1); while(1) { itoa(udr,iOut,10); lcdPrint(" ",1,3); lcdPrint(iOut,1,3); itoa(udr,iOut,2); lcdPrint(iOut,5,3); _delay_ms(1000); } return 0; } ISR(INT0_vect) { GICR &=~ (1<<INT0); TCNT0 = T0WAIT; TCCR0 = 1; TIFR |= (1<<TOV0); TIMSK |=(1<<TOIE0); } ISR(TIMER0_OVF_vect) { TCNT0 = T0REL; if(sFlag == 0) { sFlag = 1; TCCR0 = 2; }else { if(!(PIND & (1 << PD2))) { udr &=~ (1<<bitCnt++); }else { udr |= (1<<bitCnt++); } } if(bitCnt == 8) { bitCnt = 0; sFlag = 0; TIMSK &=~(1<<TOIE0); GIFR |= (1<<INTF0); GICR |= (1<<INT0); } }
noch mal super herzlichen dank !
mfg Fugitivus







Zitieren

Lesezeichen