Z86E04/08 P00-P02 ALL INPUT OR ALL OUTPUT(全部入力か,全部出力) P20-P27 BIT PROGRAMABLE(ビット毎に入出力設定可能) P31-P33 ALL INPUT(常に入力のみ) ANALOG(P247=P3M D1=1) P31 IRQ 2?,TIN P32 IRQ0,IRQ3(INVERT) P33 REFERENCE DIGITAL(P247=P3M D1=0) P31 IRQ 2?,TIN P32 IRQ0(↓),IRQ3(↑) P33 IRQ1 ROM VECTOR(割り込みベクタ) 0 2 IRQ0 AN2(P32) ↓エッジ 2 2 IRQ1 REF(P33) ↓エッジ 4 2 IRQ2 AN1(P31) ↓エッジ 6 2 IRQ3 AN2(P32) ↑エッジ 8 2 IRQ4 T0 A 2 IRQ5 T1 C リセット時には,このアドレスからプログラムが実行 REGISTER(レジスタセット) FF SPL STACK POINTER FE 汎用 FD RP REGISITER POINTER(ld rp,r1 とかはできない!!) FC FLAGS PROGRAM CONTROL FLAGS FB IMR INTERRUPT MASK REGISTER FA IRQ INTERRUPT REQUEST REGISTER F9 IPR INTERRUPT PRIORITY REGISTER F8 P01M PORTS 0-1 MODE F7 P3M PORT 3 MODE F6 P2M PORT 2 MODE F5 PRE0 T0 PRESCALER F4 T0 TIMER/COUNTER 0 F3 PRE1 T1 PRESCALER F2 T1 TIMER/COUNTER 1 F1 TMR TIMER MODE F0 . 使用不可 80 7F . 汎用 04 03 P3 PORT 3 02 P2 PORT 2 01 使用不可 00 P0 PORT 0 各レジスタは8ビットでダイレクトにアドレッシング可能 RP(REGISITER POINTER)を使う事によって,4BIT での短形式アドレッシングも 可能となる.(r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15) (rr0,rr2,rr4,rr6,rr8,rr10,rr12,rr14:2byte reg) RP の 上位4ビットによって 0~FF を 16 にわけたブロックの1つを指定する. 短形式アドレッシングモードを使った時には,RP の 上位4ビットと, 短形式アドレッシングの4ビットによりレジスタがポイントされる. 一種のレジスタバンク切り替えのようにも使用可能 ただし、RP に値を設定するときに、ld rp,r? などと、レジスタセット の値を入れてはいけない。もちろん、ld rp,4 などであれば、問題はない TIMER(タイマ機能) 8BIT のタイマ T0,T1 を持っている. T0,T1 はそれぞれプリスケーラ(6 BIT)をもっている.(PRE0,PRE1) PRE1 は,CPU OR 外部クロック(P31)をそのソースとできる. P31 の入力は,RETRIGGERABLE/NOT RETRIGGERABLE に設定できる. PRE0 は,CPUクロックがそのソースとなる. CPUクロックは,プリスケーラに入る前に 1/4 にされている. T0 は,IRQ4 を発生する. T1 は,IRQ5 を発生する. T0,T1 は以下の動作モードを持っている SINGLE PASS(タイマの値がリロードされない) MODULO-N CONTINUOUS MODE(タイマの値がリロードされる) INTERRUPTS(割り込み) 6個の割り込みは,マスク可能で,かつプライオリティを付ける事ができる. P31(AN1),P33(REF) は,↓エッジで,割り込みを発生する. P32(AN2)は↓↑両エッジで,割り込みを発生する. SOURCE IRQ 条件 AN2(P32) 0 ↓エッジ REF(P33) 1 ↓エッジ AN1(P31) 2 ↓エッジ AN2(P32) 3 ↑エッジ T0 4 内部 T1 5 内部 CLOCK(クロックジェネレータ) HALT CPU クロックは停止するが,発振は停止しない. カウンタ・タイマ,IRQ0~3 はアクティブ STOP CPU クロック発振ともに停止する. P27 が LOW になると STOP モードが解除される. HALT/STOP 命令の前には,CPU のパイプラインをクリアするための NOP 命令を入れる必要がある. STOP の場合には,さらに,P27 を使う関係で P2M の操作も必要になる. LD P2M,#1xxxxxxxB NOP STOP WATCH DOG TIMER(今回は使用しない) WDT RESET 後の,最初の WDT 命令で,WATCH DOG が有効になる. WATCH DOG カウンタをクリアする命令 この命令は,フラグを次のように変化させる Z=1,S=0,V=0 WATCH DOG カウンタは STOP モードの時には働かない. WDH WATCH DOG カウンタ を HALT の最中もアクティブにする. この命令は,WDT の後でなければ意味がない. ROM PROTECT LDC,LDCI 命令を禁止し,ROM の内容が読めないようにする. 各レジスタの説明 TMR(R/W) タイマモードレジスタ D7 D6 D5 D4 D3 D2 D1 D0 ─── ─┬─ │ │ │ │ 0:NO FUNCTION 0 0 │ │ │ │ └─ 1:LOAD T0 │ │ │ │ │ │ │ │ 0:DISABLE T0 COUNT │ │ │ └─── 1:ENABLE T0 COUNT │ │ │ │ │ │ 0:NO FUNCTION │ │ └───── 1:LOAD T1 │ │ │ │ 0:DISABLE T1 COUNT │ └─────── 1:ENABLE T1 COUNT │ │ T IN MODES └────────── 00:EXTERNAL CLOCK INPUT 01:GATE INPUT 10:TRIGGER INPUT(NON RETRIGER) 10:TRIGGER INPUT(RETRIGER) PRE1(W) プリスケーラ1レジスタ D7 D6 D5 D4 D3 D2 D1 D0 ─────┬───── │ │ COUNTER MODE │ │ └─ 0:T1 SINGLE PASS PRESCALER │ 1:T1 MODULO │ │ CLOCK SOURCE └─── 0:T1 EXTERNAL 1:INTERNAL PRE0(W) プリスケーラ0レジスタ D7 D6 D5 D4 D3 D2 D1 D0 ─────┬───── 0 │ COUNTER MODE │ └─ 0:T0 SINGLE PASS PRESCALER 1:T0 MODULO P2M(W) P2モードレジスタ P27~P20 I/O 1-INPUT 0-OUTPUT P3M(W) P3モードレジスタ D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 │ │ 0:PORT2 PULLUP OPENDRAIN │ └─ 1:PORT2 PULLUP ACTIVE │ │ 0:PORT3 INPUTS DIGITAL └─── 1:PORT3 INPUTS ANALOG P01M(W) P0モードレジスタ D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 1 ─┬─ │ │ 00:P00~P03 OUTPUT │ └── 01:P00~P03 INPUT └───── 1:STACK INNER (スタックを内部にとる) IPR(W) 割り込み優先順位レジスタ D7 D6 D5 D4 D3 D2 D1 D0 0 0 │ ─┬─ │ │ ┬ │ │ │ │ │ INTERRUPT GROUP PRIORITY │ └──┼─┼─┴─ 000 RESERVED │ │ │ 001 C>A>B │ │ │ 010 A>B>C │ │ │ 011 A>C>B │ │ │ 100 B>C>A │ │ │ 101 C>B>A │ │ │ 110 B>A>C │ │ │ 111 RESERVED │ │ │ │ │ │ GROUP C │ │ └─── 0:IRQ1>IRQ4 │ │ 1:IRQ4>IRQ1 │ │ │ │ GROUP B │ └───── 0:IRQ2>IRQ0 │ 1:IRQ0>IRQ2 │ │ GROUP A └─────────── 0:IRQ5>IRQ3 1:IRQ3>IRQ5 IRQ(R/W)割り込みレジスタ このレジスタのビットを立てると割り込みが発生する. 通常,このレジスタにアクセスする必要はない. D7 D6 D5 D4 D3 D2 D1 D0 0 0 │ │ │ │ │ │ │ │ │ │ │ └─ IRQ0 P32 ↓ │ │ │ │ └─── IRQ1 P33 ↓ │ │ │ └───── IRQ2 P31 ↓ │ │ └─────── IRQ3 P32 ↑ │ └───────── T0 └─────────── T1 IMR(W) 割り込みマスクレジスタ D7 D6 D5 D4 D3 D2 D1 D0 │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 1:ENABLE IRQ0 │ │ │ │ │ └─── 1:ENABLE IRQ1 │ │ │ │ └───── 1:ENABLE IRQ2 │ │ │ └─────── 1:ENABLE IRQ3 │ │ └───────── 1:ENABLE IRQ4 │ └─────────── 1:ENABLE IRQ5 └─────────────── 1:ENABLE INTERRUPT FLAGS(R/W) フラグレジスタ D7 D6 D5 D4 D3 D2 D1 D0 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ USER FLAG F1 │ │ │ │ │ │ └─── USER FLAG F2 │ │ │ │ │ └───── HALF CARRY FLAG │ │ │ │ └─────── DECIMAL ADJUST FLAG │ │ │ └───────── OVERFLOW FLAG │ │ └─────────── SIGN FLAG │ └───────────── ZERO FLAG └─────────────── CARRY FLAG RP(R/W) レジスタポインタレジスタ D7 D6 D5 D4 D3 D2 D1 D0 ───┬─── 0 0 0 0 └──────────── REGISTER POINTER ただし、RP に値を設定するときに、ld rp,r? などと、レジスタセット の値を入れてはいけない。結果が不定になってしまう。 もちろん、ld rp,4 などであれば、問題はない アクセスモード IRR Indirect register pair or indirect working-register pair adress Irr Indirect working-register pair only X Indexed address DA Direct adress RA Relative address IM Immediate R Register or working-register address r Working-register address only IR Indirect-register or indirect working-register adress Ir Indirect working-register address only RR Register pair or working register pair address ※注意点 jp @rr2 等の場合には、hi-byte と lo-byte が通常と逆になることに 注意する