[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第39回]
●ND80ZSMのモニタプログラムリスト(一部)
今回の回路に対応して変更した部分のND80ZSMのモニタプログラムリストです。
ND80ZSMはND80Z3.5から7セグメントLED回路、5X5キーボード回路、USBインターフェース回路を外して、マイコン独立化セット、新マイコン独立化セットを接続して動作することに特化したボードでした。
しかしND80ZSMにできるだけローコストな7セグメントLED回路と5X5キーボード回路を外付けできれば、ND80Z3.5のローコスト版にすることもできるのではないかと考えたことで、このところの作業となりました。
外付けする回路がND80Z3.5と同じ回路ならば、ND80Z3.5のモニタプログラムをそのまま使うことができます。
キーボード回路はTTLロジック回路をそのままEPM7128SLC84に置き換えただけなので、ND80Z3.5のモニタプログラムをそのまま使えます。
しかし7セグメントLED回路はTTL回路をCPLDに置き換えただけではなくて、DMA回路だったところをPIC16F57に置き換えました。
もともとのND80Z3.5モニタプログラムでは7セグメントLED表示はDMAを利用しているために、RAMのセグメント表示用アドレスにセグメントデータを書き込むだけで済みました。
PIC16F57を利用する今回の回路では、(DMAではないため)セグメントデータをただRAMに書き込むだけでは表示されませんから、そこのところのプログラムをPIC16F57にセグメントデータを送るように書き換える必要があります。
下はその部分です。
07CF CDC005 LEDDP0:CALL SEGCG 07D2 E5 LEDDP:PUSH H 07D3 D5 PUSH D 07D4 C5 PUSH B 07D5 21F8FF LXI H,DIG 07D8 0608 MVI B,08 07DA 0E88 MVI C,88 07DC CDE907 LEDDP2:CALL LEDDPS 07DF 23 INX H 07E0 0C INR C 07E1 05 DCR B 07E2 C2DC07 JNZ LEDDP2 07E5 C1 POP B 07E6 D1 POP D 07E7 E1 POP H 07E8 C9 RET ; LEDDPS:;MOV A,C ;OUT 8E;adrs set 07E9 7E MOV A,M ;OUT 8F 07EA ED DB ED;OUT (C),A 07EB 79 DB 79; 07EC 1604 MVI D,04 07EE CDDF06 CALL D1_2;0.5msec wait 07F1 C9 RET |
;;; 7seg LED disp for ND80ZUS/SM ;18/4/9 4/11 4/12 4/13 ;from 7seg2j ; ; 16f57 ; internal 12MHz #include <p16f5x.inc> __CONFIG _CP_OFF & _WDT_ON & _HS_OSC ; cf=0 zf=2 f=1 w=0 ; ledcntr equ 0a tcn1 equ 0b indata equ 0c tcn0 equ 0d ; ;digit0 to digit7 are 10 to 17 ; org 00 ; start movlw 0;a0-a3 out tris PORTA bsf PORTA,3 movlw 1f;b7-b5 out b4-b0 in tris PORTB bsf PORTB,7; movlw 0 tris PORTC;rc out ; ;start movlw 10 movwf ledcntr loop clrwdt ;leddisp movf ledcntr,w movwf PORTA movwf FSR movf INDF,w movwf PORTC incf ledcntr,f btfss ledcntr,3 goto t1ms movlw 10 movwf ledcntr ; ;1ms wait t1ms movlw 2 movwf tcn0 t1ms1 clrf tcn1 t1ms2 clrwdt;1 btfss PORTB,4;data ready? 2 goto dataread;yes t1ms3 decfsz tcn1,f;1 goto t1ms2;2---6/3*256=0.5ms decfsz tcn0,f goto t1ms1 goto loop ;datain dataread bsf PORTB,5;bit4-7 read bcf PORTB,6 bcf PORTB,7;read nop movf PORTB,w movwf indata rlf indata,f rlf indata,f rlf indata,f rlf indata,w andlw 0f0 movwf indata bcf PORTB,5;bit 0-3 read nop movf PORTB,w andlw 0f iorwf indata,f bsf PORTB,6 nop movf PORTB,w bsf PORTB,7;read end andlw 07; iorlw 10 movwf FSR movf indata,w movwf INDF;---- 22/3=7us goto t1ms3 ; end ; |
●カメレオンロジアナの波形
下は上で説明したPIC16F57の動作(実際にはND80ZモニタとEPM7128SLC84の動作も連動しています)をカメレオンロジアナで観測した波形です。
PROBE00はRB7、PROBE01はRB6、PROBE02はRB5、PROBE04はRB4です。
RB4入力がLになるとRB5=H、RB6=Lが出力されるとともにRB7=Lになります。
その後RB5=0、RB6=0になり、続いてRB5=0、RB6=1になったあと、読み取りを終了した印としてRB7=Hになります。
RB4もHになります。
これで1桁分のデータの送受が完了しました。
下はその0.5mS後の波形です。
次の1桁のデータが上と同じように送受されています。
CPLD入門![第39回]
2019.4.28upload
前へ
次へ
ホームページトップへ戻る