-         

Ergebnis 1 bis 6 von 6

Thema: Bitweise und und oder

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58

    Bitweise und und oder

    Anzeige

    Hi,

    könnte mir bitte einer sagen was dort gemacht wird?

    Code:
    #define SED1335_A0				(1 << PD4)
    #define SED1335_WR				(1 << PD5)
    #define SED1335_RD				(1 << PD6)
    #define SED1335_CS				(1 << PD3)
    #define SED1335_RES				(1 << PD2)
    
    
    
    SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
    asm("nop");
    asm("nop");
    SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);

    Danke.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
    hier werden SED1335_CS, SED1335_A0, SED1335_WR auf Low gesetzt, d.h. 0
    und bei
    SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
    werden sie wieder auf High also 1 gesetzt

    in Bits
    XXXXXXXX & 11000111 = XX000XXX
    ...
    XX000XXX | 00111000 = XX111XXX

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Hi,

    eigentlich fehlt da noch was:
    Erst wird das WriteCommand angesprochen, danach das WriteData.
    Stimmt dann das von vorher noch?
    Danke.

    Code:
    #define SED1335_DATA_PORT		PORTA
    #define SED1335_DATA_DIR		DDRA
    #define SED1335_DATA_PIN		PINA
    
    #define SED1335_CONTROL_PORT	PORTD
    #define SED1335_CONTROL_DIR		DDRD
    #define	SED1335_CONTROL_PIN		PIND
    
    #define SED1335_A0				(1 << PD4)
    #define SED1335_WR				(1 << PD5)
    #define SED1335_RD				(1 << PD6)
    #define SED1335_CS				(1 << PD3)
    #define SED1335_RES				(1 << PD2)
    //-------------------------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------
    void GLCD_InitializePorts(void)
    {
    SED1335_DATA_DIR = 0xFF;
    SED1335_CONTROL_PORT |= (SED1335_A0 | SED1335_WR | SED1335_RD | SED1335_CS | SED1335_RES); 
    SED1335_CONTROL_DIR |= (SED1335_A0 | SED1335_WR | SED1335_RD | SED1335_CS | SED1335_RES); 
    }
    //-------------------------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteData(unsigned char dataToWrite)
    {
    SED1335_DATA_PORT = dataToWrite;
    SED1335_DATA_DIR = 0xFF;
    SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
    asm("nop");
    asm("nop");
    SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
    }
    //-------------------------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteCommand(unsigned char commandToWrite)
    {
    SED1335_DATA_PORT = commandToWrite;
    SED1335_DATA_DIR = 0xFF;
    SED1335_CONTROL_PORT &= ~(SED1335_CS |SED1335_WR);
    asm("nop");
    asm("nop");
    
    SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_WR);
    }
    //-------------------------------------------------------------------------------------------------

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Das Wissen, das ich versucht habe zu vermitteln, darfst du gern auch auf die anderen Programmzeilen sinngemäß anwenden.

    Zum Verständnis der Ansteuerung des GLCD wirst du die beste Hilfe sicher im dazugehörigen Datenblatt finden.

    Die Bezeichner wie zB _CS, _RD, _WR usw sind doch recht aussagekräftig. Finde ich zumindestens.

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Hi,

    ja das ist mir klar.
    Ich habe meinen Bascom Code schon Teils in Assembler umgebaut.
    Als Refenz habe ich nur den C Code und ich bin mir nicht sicher was da gemacht wird, da ich mich mit C nicht auskenne. Habe auch schon einiges durchsucht im Netzt, aber nicht ganz das Richtige gefunden.

    Nach meinem Wissen sollte bei WriteData
    SED1335_CS =0
    SED1335_A0 = 0
    SED1335_WR = 0
    sein
    und dann nach den NOP
    SED1335_WR = 1
    SED1335_A0 = 0
    SED1335_CS = 0 (kann auch 1 sein - egal)

    bei WriteCommand
    SED1335_CS =0 (wenn vorher 1 war)
    SED1335_A0 = 1
    SED1335_WR = 0
    sein
    und dann nach den NOP
    SED1335_WR = 1
    SED1335_A0 = 0
    SED1335_CS = 0 (kann auch 1 sein - egal)

    Das funktioniert so, aber es ist anscheinend hier anders.

    Also:
    SED1335_WR muss 0 werden, dann werden die Daten(Data) in das Display geschrieben.
    Wenn SED1335_A0 1 wird, dann wird das Command geschrieben wenn SED1335_WR = 0 wird.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    So jetzt hast du es geschafft, dass ich mir doch mal die Infos zum 1335 etwas genauer ansehe. Command- und Datawrite unterscheiden sich nur im A0 Bit. Dh ist A0 High dann ist es ein Kommando ansonsten ein Datum.

    Es ist nicht egal ob CS nun 1 oder 0 ist.

    Nach dem Schreiben eines Datums ist es dafür aber erst einmal egal ob nun A0 auf 1 oder 0 steht. Das interessiert erst wieder bei der nächsten Aktion. Ist das ein Kommando dann kann das A0 auf 1 bleiben und wird somit gar nicht angefasst. Ist es ein Datawrite dann wird A0 auf 0 gesetzt. Nachdem Schreiben wird das A0 wieder auf 1 gesetzt und muss somit beim nächsten Kommando nicht erst gesetzt werden. Ob man das nun so macht oder andersherum ist vermutlich Geschmackssache.

    Auf jeden Fall bleibt die Abarbeitung in Bezug auf CS und WR immer gleich. Nur A0 muss halt bei einem Kommando auf High sein und bei Daten auf Low.

    sast

    雅思特史特芬
    开发及研究

Berechtigungen

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