hallo.
ich habe mein programm, welches tastendrücke bis 7 zählen und dann binär auf leds ausgeben soll (dies funktioniert), jetzt um UART-ansteuerung erweitert. jetzt soll es beim zählvorgang bzw. beim betätigen des tasters "Eins", "Zwei", "Drei" u.s.w. zu HyperTerminal ausgeben. es funktioniert leider nicht. leute könnt ihr mir helfen. ach noch was was muss man bei HyperTerminal alles einstellen oder gibt es eine bessere alternative. ich hatte baudrate:9600, datenbits:8, parität:keine, stopbits:1, .
hier mein code:
( Codetag eingebaut, damit werden auch die Smilies wieder zu 8ten, Kjion [Moderator])Code:#include <inttypes.h> #include <avr/io.h> #include <avr/delay.h> // definiert _delay_ms() #include <stdint.h> #ifndef F_CPU #define F_CPU 8000000 /* Oszillator-Frequenz in Hz */ #endif #define UART_BAUD_RATE 9600 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1) int main(void) { DDRD=0x00;// defeniert portD als Eingänge DDRB=0x07;// defeniert portB0 bis portB2 als Ausgänge PORTD=0x04;// bit 2 auf portD wird gesetzt PullUp int i=0; // Definition der Laufvariable UCSRB |= (1<<TXEN); //UART TX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1 UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit while(1){ if(!(PIND & (1<<PIND2))){ // Abfrage von pinD2 ob da eine 0 anliegt bzw. pinD2 wird mit dem Taster auf masse gezogen d.h. Taster wurde betätigt _delay_ms(100); // Tastenentprellung if((PIND & (1<<PIND2))){ // Abfrage von pinD2 ob da eine 1 anliegt bzw. Taster losgelassen wurde _delay_ms(100);// Zeit zum Loslassen i=i+1; //Zählvorgang } } if(i==0){ // wenn i=0 ist soll PORTB=0x00; // an portB nichts ausgegeben werden } if(i==1){ // wenn i=1 ist soll PORTB=0x01;// an portB0 eine eins ausgegeben werden while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Eins___\n"); } if(i==2){ // wenn i=2 ist soll PORTB=0x02; // an portB1 eine eins ausgegeben werden while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Zwei___\n"); } if(i==3){ // wenn i=3 ist soll PORTB=0x03; // an portB1 und portB0 eine eins ausgegeben werden while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Drei___\n"); } if(i==4){ // und PORTB=0x04; while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Vier___\n"); } if(i==5){ //so PORTB=0x05; while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Fünf___\n"); } if(i==6){ //weiter PORTB=0x06; while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Sechs___\n"); } if(i==7){ PORTB=0x07; while (!(UCSRA & (1<<UDRE))); //warten bis Senden möglich printf("%s: stdout Sieben___\n"); } if(i==8){ //wenn i=8 ist i=0; // i 0 setzen } } }







Zitieren

Lesezeichen