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

Thema: 16-bit int in 2 8-bit int zerlegen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    13

    Unglücklich

    Hallo Community,

    ich weiß, dass der Thread >6 Jahre alt ist, aber warum einen neuen eröffnen wenn mein Problem hier 100% liegt.

    mein Vorhaben ganz simpel: eine Zahl (16bit) soll auch wie hier in 2x(8bit) zerlegt werden und via UART auf einen zweiten µC gesendet und auf einer 7-Segment LED-Anzeige ausgegeben werden.
    Mit einer 8-bit Zahl habe ich die Ansteuerung des 7-Segment Displays getestet um dies schonmal abzuhaken in seiner Funktion.

    Problem ist, wenn ich eine 16-bit Zahl (hier 6789) sende, gibt die LED-Anzeige lauter Zufallszahlen aus und wechselt hin- und her.

    Ich stehe mit meiner Programmiererfahrung noch ziemlich am Anfang und habe versucht eine Lösung zu finde, jedoch ohne Erfolg. Ich poste die wichtigen Ausschnitte meines Codes (unwichtiges rausgelöscht) was das Senden und Empfangen angeht, wäre nett wenn mir einer helfen kann (ist ja bestimmt nichts großes)

    SENDEN
    Code:
    .
    .
    .
    .
    uint16_t zahl=6789;
    
    uint8_t HByte;
    uint8_t LByte;
    
    
    void daten_senden (uint8_t data)
    {
    	while (!(UCSRA & (1<<UDRE))){} //warten bis senden möglich ist
    	
    	UDR = data; //Zeichen in den Ausgabepuffer schreiben
    }
    
    void usart_init (void)
    {
    	UCSRB |= (1<<TXEN); //Daten senden
    	UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);  // Asynchron 8N1
    	UBRRH = UBRR_VAL >> 8;
    	UBRRL = UBRR_VAL & 0xFF;
    }
    
    
    int main(void)
    {
        usart_init();
    
        while (1) 
        {
    		
    		HByte = (zahl >> 8);
    		LByte = zahl & 0xff;		
    
    		daten_senden(HByte);
    		daten_senden(LByte);		
        }
    }


    EMPFANGEN

    Code:
    .
    .
    .
    
    
    uint16_t zahl;
    uint8_t usart_empfang; 
    
    void usart_init (void)
    {
    	UCSRB |= (1<<RXEN) |(1<<RXCIE) ; //Daten empfangen und Interrupt für Datenempfang enable
    	UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);  // Asynchron 8N1
    	UBRRH = UBRR_VAL >> 8;
    	UBRRL = UBRR_VAL & 0xFF;
    }
    
    
    ISR(USART_RXC_vect)
    {
    	usart_empfang = UDR;	
    }
    
    
    int main(void)
    {	
    	usart_init();
    	
    	sei();
    	
        while (1) 
        {
    		
    		uint8_t HByte = usart_empfang;
    		uint8_t LByte = usart_empfang;
    			
    		zahl = (((uint16_t) HByte) << 8 ) | LByte;
    		
    		zahl_ausgeben(zahl);	
    		
    		
        }
    }
    Geändert von opc (15.04.2016 um 14:20 Uhr)

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress