Assemblerproramme zur Nutzung der LEDs oder 7 segment Anzeige am SFR_LED Register
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)); }