Search
ホーム > 記事サポート > 2008年 > 08月号 特集「USBマイコンによるI/O制御入門」 > FAQ004:割り込みを使うとハングアップしてしまう場合がある
 

FAQ004:割り込みを使うとハングアップしてしまう場合がある

割り込み使用すると,ハングアップすることがあります.
具体的にはポインタや配列を使うと,ほぼ確実に誤動作します.
この問題は,トラ技BIOSが,ユーザ定義割り込み処理ルーチンを呼び出す際に,DEレジスタを保存していないため起こります.
この問題を回避するには,割り込み処理ルーチンの先頭と最後で,push de と pop deのコードを埋め込んでください.具体的には次のようにします.

void intsrv_tim(void) {

    __asm("push de ");

    unsigned char delta;

    delta = (dac_in & 0x3f);
    if(sigma >= 0x40) delta |= 0xc0;
    sigma = delta;
    if(sigma >= 0x40) P1.3 = 1;
    else              P1.3 = 0;
    if(sigma >= 0x40) P1.4 = 1;
    else              P1.4 = 0;

    ・・・・・
    ・・・・・
    ・・・・・
    ・・・・・

    // タイマ割り込みフラグをクリア
    IF0H.6 = 0;

    if(count == 0x10){
        count = 0;
        dac_in = sintable[dac_pos];
        dac_pos = freq;
    }

    __asm("pop de ");

}


 2009/04/24 公開
Copyright (C) 2008. Tokushu Denshi Kairo Inc. All Rights Reserved.
Copyright (C) 2008. CQ Publishing Co., Ltd. All Rights Reserved.

セミナ案内/イベント情報

特設ページ

基本電子部品大事典

トランジスタ技術SPECIAL

MOTORエレクトロニクス

特設ページ「お手本! トランジスタ&定番IC 回路見本市」へのリンク

オンライン・サービス

メール・マガジン「トラ技便り」配信登録 オンライン・サポート・サイト CQ connect

雑誌/書籍のご購入

CQ出版WebShop 定期刊行物の年間予約購読