C-Control Programmierung mit Assembler

Software und Quellcodes für Microcontroller

Software und Quellcodes für Microcontroller

Moderator: Moderatorengruppe

C-Control Programmierung mit Assembler

Neuer Beitragvon Thomas am Montag 12. September 2005, 19:55

Noch ein Tipp:

Die C-Control Unit kann auch direkt mit Assembler programmiert werden!

Höhere Programmiersprachen wie BASIC haben einen entscheidenden Nachteil: Sie erreichen niemals die volle Leistungsfähigkeit eines Systems. Gerade bei Mikrocontrollern kann es aber sinnvoll sein hardwarenahe Applikationen zu schreiben. Die einzige Lösung bietet Assembler.

Mit CCASM sind Sie in der Lage Standart Freescale™ Assembler für die C-Control I Controller und alle kompatiblen Prozessortypen zu schreiben. Sie sind sogar in der Lage geschützte Systemtreiber für die C-Control M Unit 2.0 und Micro zu entwickeln.

CCASM erstellt dabei Freescale (früher Motorola) Maschinencode. Die Syntax entspricht weitestgehend den Freescale Konventionen und ist um einige Sprachelemente zur Strukturierung des Codes erweitert worden.

Quelle: http://www.fdos.de


Hier geht's zur CCASM Referenz:
http://www.fdos.de/ccasm/ccasm.pdf
Benutzeravatar
Thomas
Threadstarter
14161
Forengründer
 
Beiträge: 854
Registriert: Mittwoch 26. Juni 2002, 17:24
Postleitzahl: 00000
Land: Germany / Deutschland

Neuer Beitragvon tappi84 am Dienstag 4. Oktober 2005, 21:24

Hallo,

ich wollte kurz mitteilen, dass CCASM nun auch die Index-Adressierung untersützt. Mit dem folgendem Beispiel kann man auch Pointer auf der M Unit 2.01 verwenden (die 2.02 kann ja sowieso auf 2.03 aktualisiert werden). Das müsste auch auf der Micro laufen.

Code: Alles auswählen
; --------------------------
;
; Projekt: M Unit 2.01 Tools
;
; Beschreibung:
; Enthält einige Tools für
; die M Unit 2.01 und Micro
;
;
; ---------------------------


USERV1    .EQU    $00C0    ; Basic Variable 1
USERV2    .EQU    $00C1   ; Basic Variable 2

.code

; ---------------------------
;
; BytePointerLoad
;
; Inhalt einer Speicherstelle über BYTE[1] laden
; und in BYTE[1] speichern
;
; ---------------------------


BytePointerLoad:
   BSR ConvertByteOffset
   LDA ,X
   STA USERV1
   RTS

; ---------------------------
;
; BytePointerWrite
;
; BYTE[2] in Speicherstelle über den
; Index BYTE[1] speichern
;
; ---------------------------

BytePointerWrite:
   BSR ConvertByteOffset
   LDA USERV2
   STA ,X
   RTS

; ---------------------------
;
; ConvertByteOffset
;
; Umrechnung von BASIC Byte
; nach physik. Byte Offset
;
; ---------------------------

ConvertByteOffset:
   LDA USERV1
   DECA
   ADD #$00C0
   TAX
   RTS

; ---------------------------
;
; GetCCR
;
; Hole Daten aus dem CCR Reg-
; ister und speichere diese
; in BYTE[1]
;
; ---------------------------

;
;  Das CCR Register
;
;  +---+---+---+---+---+---+---+---+
;  | V | 1 | 1 | H | I | N | Z | C |
;  +---+---+---+---+---+---+---+---+
;    |           |   |   |   |   |
;    |           |   |   |   |   +-- Carry
;    |           |   |   |   +------ Zero
;    |           |   |   +---------- Negative
;    |           |   +-------------- Interrup Mask
;    |           +------------------ Half Carry
;    +------------------------------ Overflow
;
;

GetCCR:
   TPA
   STA USERV1
   RTS

; ---------------------------
;
; SaveCCR
;
; Speichere Inhalt von BYTE[1]
; im CCR Register
;
; ---------------------------

;
;  Das CCR Register
;
;  +---+---+---+---+---+---+---+---+
;  | V | 1 | 1 | H | I | N | Z | C |
;  +---+---+---+---+---+---+---+---+
;    |           |   |   |   |   |
;    |           |   |   |   |   +-- Carry
;    |           |   |   |   +------ Zero
;    |           |   |   +---------- Negative
;    |           |   +-------------- Interrup Mask
;    |           +------------------ Half Carry
;    +------------------------------ Overflow
;
;

SaveCCR:
   LDA USERV1
   TAP
   RTS

.end


Ansteuerung in BASIC++

Code: Alles auswählen
define b1 as byte[1]
define b2 as byte[2]
define b5 as byte[5]

b5 = 123

b1 = 5 ' Byte Offset, aus dem gelesen werden soll
sys FD09h

print b1 ' hier müsste jetzt 123 stehen

b1 = 5
b2 = 55
sys FD0Fh

print b5 ' hier müsste nun 55 stehen


Gruß,

Stefan
http://www.fdos.de
BASIC++ Programmiersprache und CCASM
tappi84
14731
 
Beiträge: 5
Registriert: Sonntag 11. September 2005, 14:54
Wohnort: Aachen


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste