0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HC908で上級Lチカ

Last updated at Posted at 2025-04-15

HC908が販売されていた当時はCodeWarriorなどの製品のコンパイラーが使われていました。SDCCも2.0くらいで、現在のものとずいぶん仕様が違いました。

タイマー割り込みでLチカするコードを現在のSDCC 4で書いてみます。

timer.c
/* HC908JB8 sample code with sdcc 4 */

#include <mc68hc908jb8.h>

void overflow_inth(void) __interrupt 6
{
        PTD ^= 0x01;
        TRST = 1;
        TOF = 0;
}

void main() {
        CONFIG = 0x01; // Disable COP
        DDRD |= 0x01;
        PTD = 1;

        TSTOP = 1;
        TRST = 1;
        TMODH = 0xff;
        TMODL = 0xff;
        PS2 = 1;        /* Internal Bus Clock devide 16 */
        TOF = 0;
        TOIE = 1;       /* Interrupt Enable */

        __asm cli __endasm;

        TSTOP = 0;      /* start timer */

        for (;;) ;
}
% sdcc -mhc08 --stack-loc 0x013F --code-loc 0xDC00 timer.c

焼いてみます。

$ ./bl08 -c /dev/cu.usbserial-DA00WSMM -b 9600 -r 10 -t jb8 -x 12 -g reset timer.s19 
bl08 - MC68HC908 Bootloader - version 1.0.0.0
Reading S-records
Line ignored: S9030000FC

S-record data address 00FFF2 size 000002
S-record data address 00FFFE size 000002
S-record data address 00DC00 size 00005E

Mass erase
Program FFF2 - FFF3 
Program FFFE - FFFF 
Program DC00 - DC3F ....
Program DC40 - DC5D .
Execute code from DC00

FFF2がオーバフロー割り込みアドレスになります。

image.png

__interrupt 0はリセットベクターに予約されていて__interrupt 1がFFFCで__interrupt 2がFFFAになります。

下のプロジェクトはCodeWarriorとSDCC 2で作られていたようです。無理やりSDCC 4でビルドしてみましたが、動きませんでした。SDCC 4はSDCC 2よりもCodeWarriorに近いかもです。

SDCCでは当初レジスタの定義がなかったのか、defineで定義するのが一般的でした。ところがSDCCのヘッダーにレジスタが入り、同じ名前でビットフィールドで定義されてます。このためコンパイルは通るけど、まったく違う処理になってしまいます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?