0000 ; 0000 ; KBC−Z05サンプルプログラム (1) 0000 ; CTCの割込みを使い、PIOに接続した 0000 ; LEDを点滅させる 0000 0000 ;******* I/Oアドレス 0000 0010 CTC0 EQU 10H ;CTCチャネル0 001C PIOAD EQU 1CH ;PIO Aポート データ 001D PIOAC EQU 1DH ;PIO Aポート コマンド 0000 0000 ;******* ワークエリアと定数 0000 8000 COUNT EQU 8000H ;割込み回数カウント用エリア 0028 SPEED EQU 40 ;点滅スピード定数 0000 0000 ;******* プログラム本体 0000 0000 ORG 0 0000 0000 310000 LD SP,0000H ;スタックポインタ設定 0003 3E01 LD A,INTTBL/256 ;CTCの割込みテーブル上位を 0005 ED47 LD I,A ;Iレジスタに入れる 0007 ED5E IM 2 ;割込みモード2に設定 0009 0009 ;******* CTCの初期化 0009 0009 3E00 LD A,INTTBL AND 0FFH ;CTCに割込みベクタを 000B D310 OUT (CTC0),A ;書き込む 000D 3EB7 LD A,10110111B ;CTCをタイマモードに設定 000F D310 OUT (CTC0),A 0011 AF XOR A ;タイムコンスタント 0012 D310 OUT (CTC0),A ;約8.9ミリ秒ごとに割り込む 0014 0014 ;******* PIO Aポート初期化(モード3出力) 0014 0014 3ECF LD A,11001111B ;モード制御語 0016 D31D OUT (PIOAC),A 0018 3E00 LD A,00000000B ;データ入出力制御語(0=出力) 001A D31D OUT (PIOAC),A 001C 3E07 LD A,00000111B ;割り込み制御語 001E D31D OUT (PIOAC),A 0020 0020 ;******* PIO Aポートにデータを出力する 0020 0020 3E01 LD A,00000001B ;LED が点灯(Lレベル) 0022 D31C OUT (PIOAD),A 0024 3E28 LD A,SPEED ;割込み回数カウンタに初期値をセット 0026 320080 LD (COUNT),A 0029 0029 FB EI ;割込み許可 002A 18FE LOOP: JR LOOP ;CTCの割込みを待つ 002C 002C ;******* 割込み処理ルーチン 002C 002C F5 INT: PUSH AF 002D 3A0080 LD A,(COUNT) ;割込み回数カウンタ 0030 3D DEC A ;0か 0031 2008 JR NZ,SKIP ;No,そのままリターン 0033 DB1C IN A,(PIOAD) ;PIO Aポートを読む 0035 EE03 XOR 00000011B ;LEDの点滅状態を反転 0037 D31C OUT (PIOAD),A ;Aポートに書き戻す 0039 3E28 LD A,SPEED ;割込み回数カウンタ再設定 003B 320080 SKIP: LD (COUNT),A 003E F1 POP AF 003F FB EI 0040 ED4D RETI 0042 0042 ;*******割込みベクタテーブル 0042 0042 ORG 100H 0100 2C00 INTTBL: DW INT 0102 END