- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 16

Thema: Asuro und printf("\nHallo Welt!!!");

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Benutzer Stammmitglied
    Registriert seit
    25.08.2005
    Ort
    Berlin
    Beiträge
    53
    Auf der Suche nach dem guten alten printf() bin ich über fdevopen() gestolpert.

    Jetzt mal ne ganz andere Frage die IR-Schnittstelle ist ja Interruptfähig. Ich vermute, dass durch Einstreuung beim Senden auch etwas empfangen wird und immer wieder das gesendet im Empfangspuffer landet. Sollte das so sein ist es schwierig eine Eingabe zu realisieren das oben drein noch Interruptfähig funktioniert.

    Die infos habe ich aus:

    http://www.nongnu.org/avr-libc/user-manual/index.html

    Code:
    #include "asuro.h"
    #include <inttypes.h> 
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h> 
    
    #define Pin1 0 
    #define Pin2 1 
    #define Pin3 2 
    #define Pin4 3 
    #define Pin5 4 
    #define Pin6 5 
    #define Pin7 6 
    #define Pin8 7 
    
    #define READ  1 
    #define WRITE 2 
    
    #define F_CPU 				8000000 
    #define USART_BAUD_RATE 	2400 
    #define USART_BAUD_SELECT 	(F_CPU/(USART_BAUD_RATE*16l)-1) 
    
    //static unsigned char 	changed	= 0;
    //static unsigned char 	data	= 0;
    //volatile unsigned char 	changed	= 0;
    volatile unsigned char 	data	= 0;
    
    void usart_init(int Enable, int Interupts) 
    { 
    	if (Enable & READ)         		UCSRB = (1<<RXEN); 
    	if (Enable & WRITE)        		UCSRB |= (1<<TXEN); 
    
        if (Interupts & READ)         	UCSRB |= (1<<RXCIE); 
    	if (Interupts & WRITE)        	UCSRB |= (1<<TXCIE); 
        UBRRL = (unsigned char) USART_BAUD_SELECT; 
    } 
    
    void usart_writeChar(unsigned char c) 
    { 
     //unsigned char hilfsregister;
     //hilfsregister = UCSRB;
     //UCSRB &= ~(1<<RXCIE);			//interrupt flag disable
     while (!(UCSRA & (1<<UDRE)));
     UDR = c; 
     while(!(UCSRA & (1<<TXC))); 
     //UCSRB = hilfsregister;
    } 
    
    unsigned char usart_readChar(void) 
    { 
        //while(!(UCSRA & (1<<RXC))); 
        //return UDR; 
    	return data;
    } 
    
    void usart_writeString(unsigned char *string) { 
        unsigned char hilfsregister;
    	hilfsregister = UCSRB;
    	UCSRB &= ~(1<<RXCIE);			//interrupt flag disable
    	while (!(UCSRA & (1<<UDRE)));
    	while ( *string)
    	{
         while (!(UCSRA & (1<<UDRE)));
         usart_writeChar(*string++);	
        } 
    	UCSRB = hilfsregister;
    } 
    
    SIGNAL (SIG_UART_RECV) 
    {       
       data = UDR; 
       //changed = 1;
        
       //usart_writeChar('['); 
       usart_writeChar(data); 
       //usart_writeChar(']'); 
    } 
    
    int main (void) 
    { 
    	//int a=0;
    	unsigned char zeichen;
    	Init();
    	usart_init( (READ + WRITE) , READ); 
    	//changed = 0; 
    	//usart_writeString("\nTest");
        //for(a = 0; a<3000;a++)	Sleep(72);	//3 Sekunden warten
    	sei(); 
      
      
    	while (1) 
    	{
         zeichen = usart_readChar();
         //for(a = 0; a<3000;a++)	Sleep(72);	//1 Sekunden warten
    	 usart_writeString("das Zeichen-->");
    	 usart_writeChar(zeichen);
    	 usart_writeString("<--\n");
    	} // endlosschleife
    	
    
    }
    Angehängte Dateien Angehängte Dateien

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress