Danke Thorsten,
hab selber auch schon was gemacht ( aus dem Blackout wurde ein whitein)![]()
( Codetag eingefügt, Kjion )Code:#include <avr/io.h> #include <stdlib.h> #define ms 10 #define SYSCLK 12000000 int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } void uart_puts(const char *s) { char c; while ((c = *s++) != '\0') uart_putchar(c); } int init_usart(void) { UBRRL=78; // bei 12MHz outp(_BV(TXEN),UCSRB); } int usartprintnl(void) /* print new line */ { while (! (UCSRA & _BV(UDRE)) ) ; UDR = 10; /* LF */ while (! (UCSRA & _BV(UDRE)) ) ; UDR = 13; /* CR */ return 2; } int usartprintcr(void) { while (! (UCSRA & _BV(UDRE)) ) ; UDR = 13; /* CR */ return 2; } int usartprint(int buf) { int i; //for (i=0;i<8;i++) { /* if the UDRE bit is set this means that the UDR buffer is * empty. New data can be transmitted */ while ( !(UCSRA & _BV(UDRE)) ) ; UDR = buf; //} } void wait(unsigned int multiplier50us) { unsigned int i; for(i=0;i<multiplier50us;i++) { asm volatile( "ldi r16, 125" "\n\t" "L_%=:dec r16" "\n\t" //1 "tst r16" "\n\t" //1 "brne L_%=" "\n\t" //2 :::"r16"); } } int init_ausgang(void) { /*outp(0xFF, DDRC); // Alle Ports von C als Output setzen outp(0xFF, PORTC); // Alle LEDs aus */ DDRC=(1<<DDC0); PORTC=(1<<DDC0); } int ausgabe_on(void) { PORTC=(0<<DDC0); } int ausgabe_off(void) { PORTC=(1<<DDC0); } int init_eingang(void) { DDRA = 0x00; } int main(void) { unsigned int keys; unsigned char i; unsigned int x; unsigned char ledout[10]; init_ausgang(); init_eingang(); init_usart(); i=0; x=0; //itoa(x, ledout, 10); //uart_puts("Ist doch ein stück weiter\n"); for (;;) { keys = PINA; if ( !(PINA & (1<<0)) & i==0 ) { ausgabe_on(); i=1; wait(500*ms); x++; usartprintnl(); usartprintcr(); uart_puts(itoa(x, ledout, 10)); } if ( !(PINA & (1<<0)) & i==1 ) { ausgabe_off(); i=0; wait(500*ms); x++; usartprintnl(); usartprintcr(); uart_puts(itoa(x, ledout, 10)); } } return 0; }







Zitieren

Lesezeichen