Assemblerproramme zur Nutzung der LEDs oder 7 segment Anzeige am SFR_LED Register

Diese Seite wurden für den LCC erstellt. Die Funktionen können auch unter dem GCC angewendet werden. Zur Nutzung muss im Programm ein Aufruf von #include <led7.h> eingebunden sein. Die Programme selbst sind in C unter Benutzung von Inline-Assembler geschrieben.

Funktionen des Assembler Include mit dem C Aufruf #include <led7.h>


Zuordnung der Datenbits zu den Segmeten auf dem Memec 3SLC Board.
;
          00000
         5     1
         5     1
         5     1
          66666
         4     2
         4     2
         4     2
          33333
;


1. led7_set(wert);

Die unteren 7 Bit eines Wertes werden an die 7 segment Anzeige gesendet.
//
        int wert = 0x3f;
        led7_set(wert);     // Eine 0 wird angezeigt
//


2. led7_get();

Zurücklesen des Wertes, der zuletzt an die Anzeige gesendet wurde. Das Register speichert nur 7 Bit es können also nur Werte von 0x00 bis !0x7f gelesen werden.
//
        int wert;
        wert = led7_get();
//


3. led7_hex(wert);

Anzeige der Werte 0 bis 15 als 0 ... 9 A b C d E F auf der 7 segment Anzeige. Für Werte größer 15 wird die Anzeige gelöscht.
//
        int wert = 10;
        led7_hex(wert);    // Ein A wird angezeigt.
//


Diese Funktionen für den GCC in C

__asm__("\n.include \"const.s\"");

void led7_set(int i){
        __asm__("MOVI2S SFR_LEDS, %0"::"r"(i));
}
int led7_get(){
        int i; 
        __asm__("MOVS2I %0,     SFR_LEDS":"=r"(i));
        return i;
}

/*
                 00000
                5     1
                5     1
                5     1
                 66666
                4     2
                4     2
                4     2
                 33333
*/
// Ziffern                        0    1    2    3    4    5    6    7    8    9    A    b    c    d    E    F
const unsigned char led7[16] ={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x58,0x5E,0x79,0x71};      

void led7_hex(int i){
        unsigned char out;     
        if(i <=15) {
                out = led7[i];
        } else {
                out = 0;
        }
        __asm__("MOVI2S SFR_LEDS, %0"::"r"(out));
}


SpartanMC