Forum: Mikrocontroller und Digitale Elektronik Einfaches Programm für Card12 mit HC12


von J. R. (cia_man)


Lesenswert?

Hallo!

Ich habe folgendes Programm für einen HC12 Controller:

#include <hcs12dp256.h>
void delay(void) {
volatile unsigned n = 0;
while(--n) ;
}
void main(void) {
DDRH |= 0x80;
while(1) {
PTH ^= 0x80;
delay();
}
}

wenn ich dies jetzt in ICC12 kompiliere dann geht das zwar, jedoch 
blinkt die Led auf dem MC912DG128A nicht wie sie soll? Ich bin jetzt 
momentan etwas ratlos, da ich ein Anfänger in dem Bereich bin. Ich 
vermute das Problem besteht darin, dass 
http://elmicro.com/files/elmicro/dev12_tutorial.pdf dieses Tutorial für 
eine andere Card geschrieben ist wie ich habe!
Vlt kann mir ja jmd von euch Tipps geben, bzw ein Programm das geht... 
:)

Ich bin für jede Hilfe dankbar!

THX!

Ich habe auch das Hochladen auf die Card12 richtig ausgeführt.... soweit 
ich weiß, da in dem Speicherbereich das Programm angezeigt wird!

von J. R. (cia_man)


Lesenswert?

Weiß niemand was??? :(

von Fix (Gast)


Lesenswert?

Wahrscheinlich sind alle Profis dafür gerade im Augenblick beim Pinkeln. 
Wenn Du noch 30 Sekunden wartest, antworten sie alle gleichzeitig!

von J. R. (cia_man)


Lesenswert?

Fix schrieb:
> Wahrscheinlich sind alle Profis dafür gerade im Augenblick beim Pinkeln.
> Wenn Du noch 30 Sekunden wartest, antworten sie alle gleichzeitig!

schön wärs ;)

von Karl M. (movex)


Lesenswert?

> #include <hcs12dp256.h>

Also da sollte es doch klingeln. Das ist ein ganz anderes Derivat.
Ein Blick in das Reference Manual von MC912DG128A sagt, dass PORTH I/O 
Register auf Adresse 0x29 liegt. Das Headerfile vom S12DP256 zeigt auf 
0x260 für PORTH. Die Register liegen anders. Also richtige Dateien 
einbinden, dann sollte es klappen.


Jochen R. schrieb:
> Weiß niemand was??? :(

RTFM.

von Timmo H. (masterfx)


Lesenswert?

Ist denn kein Header-File für deinen Controller dabei? Die Addressen 
z.B. für die Ports sind natürlich unterschiedlich. Beim HC12 ist DDRH 
0x002B beim HCS12 ist es 0x0262.
Vermutlich würde sowas gehen
1
void delay(void) {
2
  volatile unsigned n = 0;
3
  while(--n) ;
4
}
5
void main(void) {
6
  *(unsigned char volatile *)(0x2B) |= 0x80;
7
  while(1) {
8
   *(unsigned char volatile *)(0x29) ^= 0x80;
9
   delay();
10
  }
11
}

von J. R. (cia_man)


Lesenswert?

Timmo H. schrieb:
> Ist denn kein Header-File für deinen Controller dabei? Die Addressen
> z.B. für die Ports sind natürlich unterschiedlich. Beim HC12 ist DDRH
> 0x002B beim HCS12 ist es 0x0262.
> Vermutlich würde sowas gehen
>
1
> void delay(void) {
2
>   volatile unsigned n = 0;
3
>   while(--n) ;
4
> }
5
> void main(void) {
6
>   *(unsigned char volatile *)(0x2B) |= 0x80;
7
>   while(1) {
8
>    *(unsigned char volatile *)(0x29) ^= 0x80;
9
>    delay();
10
>   }
11
> }
12
>

ist des des richtige? -> mc912d128.h

Hoffe doch?

von J. R. (cia_man)


Lesenswert?

Timmo H. schrieb:
> Ist denn kein Header-File für deinen Controller dabei? Die Addressen
> z.B. für die Ports sind natürlich unterschiedlich. Beim HC12 ist DDRH
> 0x002B beim HCS12 ist es 0x0262.
> Vermutlich würde sowas gehen
>
1
> void delay(void) {
2
>   volatile unsigned n = 0;
3
>   while(--n) ;
4
> }
5
> void main(void) {
6
>   *(unsigned char volatile *)(0x2B) |= 0x80;
7
>   while(1) {
8
>    *(unsigned char volatile *)(0x29) ^= 0x80;
9
>    delay();
10
>   }
11
> }
12
>

Kannst du mir das Programm noch ein wenig erklären? Es geht nämlich! ;)

°Freu°

THX!

von J. R. (cia_man)


Lesenswert?

So nun geht meins auch ;)

#include <mc912d128.h>

void delay(void) {
  volatile unsigned n = 0;
  while(--n) ;
  }

void main(void) {

  DDRH |= 0x80;
  while(1) {
    DDRH ^= 0x80;
    delay();
    }
  }

Schön... das wäre geschafft! :) Bloß ich wäre wirklich für eine kleine 
Erklärung des Programmes sehr dankbar!

THX!

von Timmo H. (masterfx)


Lesenswert?

Jochen R. schrieb:
>     DDRH ^= 0x80;
Da solltest du lieber mit dem Port wackeln anstatt ständig das Direction 
Register wieder auf Tristate zu schalten.

von J. R. (cia_man)


Lesenswert?

Hey!

Kennt jmd von euch auch noch gute Unterlagen aus dem Inet wenn ich 
diesen Controller jetzt mit C programmieren will? Weil für Assembler 
habe ich eigentlich doch schon relativ viel gefunden... aber halt net so 
viel für C!

THX!

von Sebastian (Gast)


Lesenswert?

In C? Schön wär's, aber C Compiler für den HC12 sind richtig teuer, 
soweit ich weiß. Jedenfalls nichts für Hobbyzwecke. In einer Firma mag 
das anders aussehen. Angeblich soll HC11-GCC auch für den HC12 gehen, 
aber über die Include-Dateien kann ich nichts sagen.

von J. R. (cia_man)


Lesenswert?

Sebastian schrieb:
> In C? Schön wär's, aber C Compiler für den HC12 sind richtig teuer,
> soweit ich weiß. Jedenfalls nichts für Hobbyzwecke. In einer Firma mag
> das anders aussehen. Angeblich soll HC11-GCC auch für den HC12 gehen,
> aber über die Include-Dateien kann ich nichts sagen.

Es gibt doch ICC12 :) des net so teuer! ;)

von Eckhard (Gast)


Lesenswert?

Hallo,


also erstmal gibt es die Codewarrior Special Edition, die immerhin bis 
zu 32 KB Code erzeugen kann, denke mal das es noch ein langer weg ist 
bis Du so große Programme schreibst. Ansonsten gibt es noch den GCC für 
den HC12.

Was nicht ganz klar ist, wie du das Ding programmierst. Nutzt Du den 
Twin Peeks Monitor ? Da wirds schwer mit Unterstützung. Sonst such Dir 
ein geeignetes BDM Tool. Ich weiss aber nicht welches von GCC/GDB 
unterstützt wird.

Hier die GNU Toolchain : 
http://www.gnu.org/software/m68hc11/m68hc11_port.html

Eckhard

von J. R. (cia_man)


Lesenswert?

Eckhard schrieb:
> Hallo,
>
>
> also erstmal gibt es die Codewarrior Special Edition, die immerhin bis
> zu 32 KB Code erzeugen kann, denke mal das es noch ein langer weg ist
> bis Du so große Programme schreibst. Ansonsten gibt es noch den GCC für
> den HC12.
>
> Was nicht ganz klar ist, wie du das Ding programmierst. Nutzt Du den
> Twin Peeks Monitor ? Da wirds schwer mit Unterstützung. Sonst such Dir
> ein geeignetes BDM Tool. Ich weiss aber nicht welches von GCC/GDB
> unterstützt wird.
>
> Hier die GNU Toolchain :
> http://www.gnu.org/software/m68hc11/m68hc11_port.html
>
> Eckhard

Warum so kompliziert -> http://elmicro.com/de/icc12.html ist ein gutes 
Tool für den Anfang ... und als BDM-Tool nehme ich:
http://elmicro.com/de/compod12.html

Meine Frage war aber eigentlich: ne Doku für C zu bekommen mit Befehlen 
für den HC12 :)

von Sebastian (Gast)


Lesenswert?

Doku sollte bei einem kommerziellen C-Compiler aber dabei sein. Kein 
Handbuch, nicht mal digital in der Hilfe?
Sicher, C ist C, aber jeder Compiler für Mikrocontroller kennt 
irgendwelche spezifischen Konstrukte. Für die Namen der Register und 
Peripheriefunktionen allerdings muß man das Datenblatt des verwendeten 
Mikros bemühen. CodeWarrior ist hier eine Ausnahme, der hat 
Bibliotheken/Assistenten für die Peripherie.

von J. R. (cia_man)


Lesenswert?

Sebastian schrieb:
> Doku sollte bei einem kommerziellen C-Compiler aber dabei sein. Kein
> Handbuch, nicht mal digital in der Hilfe?
> Sicher, C ist C, aber jeder Compiler für Mikrocontroller kennt
> irgendwelche spezifischen Konstrukte. Für die Namen der Register und
> Peripheriefunktionen allerdings muß man das Datenblatt des verwendeten
> Mikros bemühen. CodeWarrior ist hier eine Ausnahme, der hat
> Bibliotheken/Assistenten für die Peripherie.

Stimmt! ^^ Sehe auch gerade das reicht erstmal an Doku! Aber trotzdem 
Thx! ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.