zwei Byte übertragen AT89C51CC03 (8051)

OP #3906197
Lesenswert?
• ▲
▼
Hallo,

ich sollte zwei Byte an den AT90C51CC03 übertragen. Die Schnittstelle 
funktioniert soweit auch. Auf alle zu lesenden Parameter kann ich 
zugreifen. Leider habe ich ein Problem mit den zu schreibenden Werten.

Byte 1 = Steuerzeichen
Byte 2 = Wert für einen Port

Ich empfange einen Wert. In em Fall 0xF8. Danach folgt das nächste Byte 
dies soll den in dem Fall den PORT0 ansteuern.

Mit dem jetztigen Quellcode kann ich derzeit kein zweites Steuerzeichen 
empfangen. Im Register SUBF steht leider nur das erste Byte. Das 
Register SBUF kann ich auch nicht zurück setzen. Aus dem Datenblatt 
werde ich auch nicht so richig schlau. Bei vielen anderen MC-Typen habe 
ich ein Empfangs- und Senderegister. Gibt es da einen Trick?


Grüße
Ingo

1
//*******************************************************************
2
// Header und C-Unterprogramme einbinden
3
//*******************************************************************
4

5
#include <AT89C51CC03.h>
6
#include <stdio.h>
7
#include "Warten_MS.C"
8
#include "USART.C"
9
#include "Info.C"
10
#include "ADW_Config.C"
11

12
//*******************************************************************
13
// Definitionen
14
//*******************************************************************
15

16
#define True 1
17
#define False 0
18

19
//*******************************************************************
20
// Hauptprogramm
21
//*******************************************************************
22

23
void main (void)
24
{
25
    unsigned char unc_RS232;
26
    unsigned short int uint_ADW;  
27
    unsigned short int uint_P0;  
28
    unsigned short int uint_P2;
29
  
30
    P0 = 0x00;
31
    P2 = 0x00;
32
    Init_USART(usi_Baud);
33
    Init_ADW();
34

35

36
    while(1)                    // Endlosschleife
37
    {
38
      unc_RS232 = Get_Char();
39
      
40
      switch (unc_RS232){
41
      
42
      
43
          case 0xF8:
44
                SBUF = 0x00;  
45
                P0 = Get_Char();
46
                uint_P0 = P0;
47
                printf("%.4u", uint_P0);
48
            break;
49
            
50
            case 0xF9:  
51
                  uint_P0 = P0;
52
                  printf("%.4u", uint_P0);
53
                  break;
54
            
55
            default:   printf("NO COMMAND");
56
            break;       
57
      }
58
     
59
      printf("\r\n");
60
      Warten_MS(1); 
61
    }
62
}
Angehängte Dateien:
Gast #3906225
Lesenswert?
• ▲
▼
SBUF ist gleichzeitig Sende und Empfangsregister, je nachdem ob man 
liest oder schreibt.
SBUF wird nicht zurückgesetzt. Es wird beim nächsten Empfang einfach 
überschrieben, egal ob man es gelesen hat oder nicht.
Das RX-Bit, das nach dem Empfang gesetzt wird, muß man manuell löschen 
(aus meiner Erinnerung. Bitte nicht schlagen, wenn das Bit anderst 
heißt)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.