Automatisieren und Vernetzen mit Industrie-PC :: Stand :: 17.04.2004  
 
Impressum :: Feedback :: Forum :: Newsletter ::  
zurück zur letzten SeiteHome
 Pfad ::: Home / Mikrocontroller / MyFirstProject



2.3. Programme mit Keil C51 / Philips LPC900

2.3.3. MyFirstProject

    Hinweis: Alle Seitenangaben beziehen sich auf das Buch "Keil C51 / Philips LPC900 von Michael Baldischweiler
 

  1. Bereiten Sie das Projekt "MyFirstProject" vor (S. 48 - 52). Bei S. 50 oben: kein Startup Code hinzufügen!
     
  2. Erstellen Sie das Programm "FirstModul.a51" (S. 54 - 58 mitte).

    - Simulieren  Sie das Programm Befehl für Befehl (F10 bzw. F11) und erforschen Sie die Veränderungen des
       Programmcounters (PC), der States (Zeit in Maschinentakten)

    - Blenden Sie das Memory Window ein,  (C:0) eingeben!!!, und vergleichen Sie den Hexadezimalcode mit
       den Anweisungen im Quelltext


    Nachfolgend ist der Quelltext zu Ihrer Einarbeitung ausführlich kommentiert worden:

CSEG AT 0              ; Information für den Assembler, an welcher Adresse im Codebereich das Programm
                              ; beginnen soll.

                              ; Ein Befehl besteht im Falle eines 8-Bit-Rechners aus einer Kombination von
                              ; acht Nullen bis zu acht Einsen (256 Kombinationen). Somit ergeben sich 255
                              ; mögliche Befehle und ein Reservebefehl für den 8051-Core (dt. Kern, meint
                              ; die CPU). Eine solche Kombination gelangt in den Befehlsdecoder der CPU, die
                              ; daraufhin den Controller zu ganz bestimmten Aktionen veranlasst.
                              ; Die Kombination für den folgenden Befehl "ljmp" ist binar: 0000 0010 bzw.
                              ; hex: 02h auch als 0x02 geschrieben (das x steht für hexadezimal)

ljmp main               ; Springe zum Hauptprogramm "main", (long jump dt. langer Sprung)
                              ; ljmp hex: 02h (0x02) binär: 0000 0010 Länge: 3 Byte Zeit: 2 Maschinentakte
                              ; Unbedingter Sprung zur adressierten Stelle, indem der Programmzähler mit dem
                              ; zweiten und dritten Byte des Befehls geladen wird.

main:                      ; Anfang von main, "main:" ist ein so genanntes Label, wie Textmarke in MS Word :-)

     mov A, #0x34   ; Lade die Konstante hex: 0x34 binar: 0011 0100 in den Akku,
                              ; mov A     hex: 74h (0x74) binar: 0111 0100 Länge: 2 Byte Zeit: 1 Maschinentakt
                              ; Der Akkumulator oder Akku ist ein 8-Bit Register (1 Byte) und ist ein Bestandteil
                              ; der CPU (Central Prozessing Unit). Der Akku ist eng mit der ALU (Arithmetisch-
                              ; logische Einheit) verbunden und wird bei sehr vielen Befehlen verwendet.

     INC A                ; Erhöhe den Akku um 1; bin: 0011 0100 + 1 = 0011 0101 hex: 0x34 + 1 = 0x35
                              ; INC A     hex: 04h (0x04) binär: 0000 0100 Länge: 1 Byte Zeit: 1 Maschinentakt

     CLR C                ; Lösche das Carry-Flag (Ein Bit im PSW = Programmstatuswort)
                              ; Das Carry-Bit wird im Allgemeinen durch eine vorausgegangene mathematische
                              ; Operation
                              ; geändert. Das Carry ist ferner der boolesche Akku, über den viele Bitoperationen
                              ; laufen.
                              ; CLR C    hex: C3h (0xC3) binär: 1100 0011 Länge: 1 Byte Zeit: 1 Maschinentakt

     SJMP $              ; Mit SJMP (short jump dt. kurzer Sprung) wird wieder zu einem Label gesprungen,
                              ; hier das Dollarzeichen, das die Startadresse das SJMP-Befehls repräsentiert.
                              ; Also ein Sprung zu sich selbst und somit eine Endlosschleife.
                              ; Es soll verhindert werden, dass der Controller weitere Speicheradressen im ROM, hier
                              ; Flash-ROM ausliest und eventuell Datenmüll als Befehl ausführt.
                              ; SJMP $   hex: 80h (0x80) binär: 1000 0000 Länge: 2 Byte Zeit: 2 Maschinentakte
end                        ; hex: FEh (0xFE) binär: 1111 1110, gehört noch zum SJMP $ -Befehl

 


 

  
  
 
          Beratender Fachlehrer: