ASCII-Ausgabe und HEX-Umwandlung

von Michael Moske

Elektronik-Labor  Projekte  Mikrocontroller  TLSASCII-Ausgabe und HEX-Umwandlung cript  




Download (CH32V003): ASCII-Erweiterung.zip

Die TLScript Firmware ist dafür vorbereitet, dass man relativ leicht eigene Befehle hinzufügen kann. Es handelt sich dann um Befehlserweiterungen, die keine eigene Schaltfläche in der IDE haben, sondern mit Call (vormals mit Gosub) wie ein Unterprogramm aufgerufen werden. In der Hilfe für die einzelnen Controller ist jeweils ersichtlich, welche erweiterten Befehle bereits existieren. Für alle gibt es diese Erweiterungen:


Siehe auch 10.3.25: PicoBasic Funktions-Erweiterungen

Die Unterprogramme werden mit Call L240 bis Call L255 aufgerufen, wobei einige Adressen ab 247 noch für eigene Erweiterungen frei sind. L247 habe ich schon verwendet, um einen Zeichensatz für ein OLED zu laden.

Jetzt kam der Wunsch auf, dass man nicht nur Bytes als Dezimalzahlen mit dem normalen Print-Befehl ausgeben kann, sondern auch beliebige andere Zeichen. Mit einer kleinen Erweiterung geht das nun mit dem CH32V003. Für die anderen Controller lässt es sich leicht ergänzen. Das in A übergebene Byte wird als ASCII-Zeichen ausgegeben.

void extensions(void){  
 
if (dat==240)

 
if (dat==248){          
   
printf("%c\r\n",a); // Print char  
  }
 
if (dat==249){}

Dieses kleine Testprogramm liefert eine aufsteigende Zeichenfolge:

              Rem ASCII
              L1:
0x0141  A = 65
              L2:
0x21F8  Call L248:
0x19FA  Delay ms = 250
0x2800  A = A + 1
0x0280  B = 128
0x2401  If A<B JMP L2:
0x2000  Jmp L1:


Hexumwandlung

Mit dieser Erweiterung können nun auch Hexadezimalzahlen dargestellt werden.  Das folgende kleine Programm kann verwendet werden, um beliebige Bytes in Hexzahlen umzuwandeln und dabei den Umgang mit diesen Zahlensystemen zu trainieren.

              Rem *****************
              Rem DEC to HEX
              Rem *****************
              L1:
              Rem *****************
              Rem Loop entry
              Rem *****************
0x0200  B = 0
              L10:
0x0100  A = 0
0x4100  Input A
0x2201  If A=B Jmp L10:
              Rem *****************
              Rem Print number
              Rem *****************
0x3600  C = A
0x0120  A = 32
0x21F8  Call L248:
0x013D  A = 61
0x21F8  Call L248:
0x0120  A = 32
0x21F8  Call L248:
0x0100  A = 0
0x4200  Print A
0x0178  A = 120
0x21F8  Call L248:
0x3700  A = C
0x0210  B = 16
0x2D00  A = A / B
              Rem *****************
              Rem Save upper nibble
              Rem *****************
0x3800  D = A
0x2C00  A = A * B
0x3400  B = A
0x3700  A = C
0x2B00  A = A - B
              Rem *****************
              Rem Save lowerr nibble
              Rem *****************
0x3600  C = A
              Rem *****************
              Rem Print upper nibble
              Rem *****************
0x3900  A = D
0x020A  B = 10
0x241F  If A<B Jmp L2:
0x0237  B = 55
0x2A00  A = A + B
0x21F8  Call L248:
0x2020  Jmp L3:
              L2:
0x4200  Print A
              L3:
              Rem *****************
              Rem Print lowerr nibble
              Rem *****************
0x3700  A = C
0x020A  B = 10
0x2427  If A<B Jmp L4:
0x0237  B = 55
0x2A00  A = A + B
0x21F8  Call L248:
0x2028  Jmp L5:
              L4:
0x4200  Print A
              L5:
0x0120  A = 32
0x21F8  Call L248:
0x017C  A = 124
0x21F8  Call L248:
0x0120  A = 32
0x21F8  Call L248:
              Rem *****************
              Rem Repeat
              Rem *****************
0x2000  Jmp L1:


Elektronik-Labor  Projekte  Mikrocontroller  TLScript