槫林です。
何処がLEDの表示かわかりませんが(たぶん*P5bかな?)、
timerがint型だからじゃないでしょうか?
int型の最大は32768だと思うので、その辺から崩れているでわ?
あと、ポートはvolatileで宣言した方が良いかと。
違ったら、どなたか私にツッコミを入れてください。
でわ
K.Mekata wrote:
> はじめましてK.Mekataです。
>
> 秋月電子のAKI-H80 と、マザーボード AE-H8MB
> コンパイラは秋月電子の物を使用しています。
>
> インタバルタイマで、LEDをちかちかさせようと考えているのですが
> 動作しない理由がいま1つわかりません。
>
> 自分で「これはやった」とおもっているのは、
> アセンブラにより、割り込みベクタ 050Hを乗っ取る
> WDTをインターバルタイマとして使用するように設定。
> 割り込みを有効に。
>
> というかんじなのですが、LEDは点灯してくれません。
> どうか解決方法を教えていただけませんか?
>
> ----resetv.mar
>
> .CPU 300HA
> .IMPORT _timer1INT
> .SECTION A,DATA,LOCATE=H'000000
> .IMPORT _main
>
> .DATA.L H'00100 ;リセットベクトル
>
> .ORG H'000050 ;IMIA1
> .DATA.L _timer1INT
>
> .ORG H'000100
> MOV.L #H'FFF10,ER7 ;スタックポインタ設定
> jmp @_main
>
> .END
>
>
> --mytest.c
>
> int timer;
>
> void main (void)
> {
>
> char *P4a = (char *) 0xfffc5;
> char *P4b = (char *) 0xfffc7;
> char *P4c = (char *) 0xfffda;
>
> char *P5a = (char *) 0xfffc8;
> char *P5b = (char *) 0xfffca;
> char *P5c = (char *) 0xfffdb;
>
> char *wdta = (char *) 0xfffa8;
> char *wdtb = (char *) 0xfffa8;
> char *wdtc = (char *) 0xfffaa;
>
> unsigned int data;
>
> *P4c = 0xff;
> *P4a = 0x00;
>
> *P5a = 0xff;
>
> *wdta = 0x05a27; /* 0010 0111 */
> *wdtb = 0x0a500;
>
>
> timer=0;
>
> while (1) {
> if ( (*P4b & 16) == 0 ) {
> *P5b = 0xff;
> } else {
> /* *P5b = 0x00;
> */
> }
>
> if ( timer == 32768 ) {
> *P5b = 0xff;
> }
> if ( timer == 0 ) {
> *P5b = 0x00;
> }
>
>
> }
>
> }
>
> #pragma interrupt(timer1INT)
> void timer1INT(void)
> {
> char *wdta = (char *) 0xfffa8;
> char *wdtb = (char *) 0xfffa8;
> char *wdtc = (char *) 0xfffaa;
>
> char *P5a = (char *) 0xfffc8;
> char *P5b = (char *) 0xfffca;
> char *P5c = (char *) 0xfffdb;
>
> int dummy;
> dummy = *wdta;
> dummy &= 0x7f;
> *wdta = dummy;
>
>
> *P5a = 0xff;
> *P5b = 0xff;
>
> timer++;
> if ( timer > 65536 ) { timer = 0; }
>
> }
>
>
>
>