マイコン独立大作戦
キーボードインターフェースの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
そして作戦その2は、やっぱりキーボードインターフェースしかありませんでしょう。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第16回]
●ND80Z3.5のキー入力プログラム(4)
前回はおかしな現象の原因がわかって、そのための対策をCPU側のプログラムで行なったことで、問題をクリアすることができました。
が。
落ち着いて考えてみますと、それって面白くないのですよね。
だって、PIC16F87から出力される8ビットのデータが揃っていなくて、ビット0だけが少し遅れて出力されるなんて、みっともないじゃありませんか。
しかし。
そういうことになりますと。
やっぱり出力データはRB7〜RB0の全部を使って8ビットを揃えて出すしかありません。
RB0を出力に使うということは。
INT入力ができない(割込みが使えない)ということになります。
PIC16F87のINT入力はRB0と端子を共有していて、どちらか一方の機能しか使えないのです。
せっかく作ってうまく動作している割込みプログラムですけれど、やむを得ません。
割込みを使わないプログラムに書き換えることにしました。
ジャノ目基板に組んだテスト回路も一部変更をします。
下図のように変更しました。
せっかく作った割込みプログラムです。
それに割込みを使わないように変更したプログラムがうまく動かないかもしれません。
そういう場合の用心のために、どちらでも使えるようにジャンパーピンで配線を切り替えるようにしました。
こちらがそのように回路を変更したテスト基板です。
下が割込みを使わないように書き換えたPIC16F87のプログラムです。
;;;PIC 16F87 keyboard interface ; ;16/10/4 10/7 10/8 10/22 10/23 ;internal clock 8mhz ; #include <p16f87.inc> ; processor specific variable definitions ; ;Program Configuration Register 1 __CONFIG _CONFIG1,_CP_OFF & _LVP_OFF & _MCLR_ON & _PWRTE_ON & _WDT_ON & _INTRC_CLKOUT ;Program Configuration Register 2 __CONFIG _CONFIG2, ; cf=0 zf=2 f=1 w=0 ; bitcntr11 equ 20 bitcntr8 equ 21 keycode equ 22 outdata equ 23 keyoffmk equ 24 ; org 00 start bsf STATUS,5 ;bank 1 movlw 7c;=8MHz movwf OSCCON movlw 0 movwf TRISB movlw 11;a0=in CLK,a4=in DT movwf TRISA bcf STATUS,5 ;bank 0 ; clrf keycode clrf outdata clrf keyoffmk clrf PORTB clrf PORTA ; ;start ; loop movlw 0b;=11 movwf bitcntr11 movlw 8 movwf bitcntr8 loop1 clrwdt btfsc PORTA,0 goto loop1 ; movlw 80 xorwf PORTA,f;for test movlw 0b subwf bitcntr11,w btfsc STATUS,zf goto skipbit movf bitcntr8,w btfsc STATUS,zf goto skipbit btfsc PORTA,4;DT bsf STATUS,cf btfss PORTA,4;DT bcf STATUS,cf rrf keycode,f decf bitcntr8,f skipbit decfsz bitcntr11,f goto loop2 goto f0check loop2 clrwdt btfss PORTA,0 goto loop2 goto loop1 ; ;F0(keyoff) ckeck f0check movlw 0f0 subwf keycode,w btfsc STATUS,zf goto keyoffmkset ; btfsc keyoffmk,0;keyoff? goto keyoff ; ;if shift,ctrl,alt movlw 12;left shift subwf keycode,w btfsc STATUS,zf goto shiftset movlw 14;left ctrl subwf keycode,w btfsc STATUS,zf goto ctrlset movlw 11;left alt subwf keycode,w btfsc STATUS,zf goto altset ;else movf keycode,w call dataout loop3 clrwdt btfss PORTA,0 goto loop3 goto loop ; shiftset bsf PORTA,1 goto loop3 ctrlset bsf PORTA,2 goto loop3 altset bsf PORTA,3 goto loop3 ; keyoffmkset bsf keyoffmk,0 goto loop3 ; keyoff ;shift,ctrl,alt check movlw 12;left shift subwf keycode,w btfsc STATUS,zf goto shiftoff movlw 14;left ctrl subwf keycode,w btfsc STATUS,zf goto ctrloff movlw 11;left alt subwf keycode,w btfsc STATUS,zf goto altoff ;else movf keycode,w subwf outdata,w btfss STATUS,zf;equal? goto keyoffmkclr movlw 0 call dataout keyoffmkclr bcf keyoffmk,0 goto loop3 ; shiftoff bcf PORTA,1 goto keyoffmkclr ctrloff bcf PORTA,2 goto keyoffmkclr altoff bcf PORTA,3 goto keyoffmkclr ; ; subroutine ; dataout movwf outdata movwf PORTB return ; end ; |
割込みを使っても使わなくても、やっていることは同じなのですけれど、割込みを使わない今回のプログラムはかえってわかりにくいものになってしまいました。
こちらはCPU側のキー入力プログラムです。
PIC16F87から2回読み込んで比較していたところをもとのプログラムのように1回読み込むように変更しました。
2016/10/23 17:54 keypic1f.txt END=8177 ;;; keyboard test program from pic16f87 ;16.10.8 10.20 10.23 ; ORG $8100 ; ADISP=$1015 HXDP2=$104B ; 8100 C30481 JP START0 8103 00 SHFTMK:DB 00 8104 3E8A START0:LD A,8A 8106 D383 OUT (83),A 8108 3EFF LD A,FF 810A D382 OUT (82),A 810C 0600 START1:LD B,00 810E DB81 START2:IN A,(81);keycode 8110 B7 OR A 8111 CA0C81 JP Z,START1 8114 4F LD C,A 8115 CD5081 CALL HEXDP 8118 79 LD A,C 8119 FE1A CP 1A;=Z 811B C8 RET Z 811C B8 CP B 811D CA3C81 JP Z,SHFTCK;already disp,but shift? 8120 41 LD B,C 8121 DB82 IN A,(82);shift check 8123 320381 LD (SHFTMK),A 8126 B7 OR A 8127 FA3381 JP M,SHFTIN 812A 110092 NOSHFT:LD DE,$9200 812D CD5F81 ASCDP:CALL ASCDPS 8130 C30E81 JP START2 8133 320381 SHFTIN:LD (SHFTMK),A 8136 110093 LD DE,$9300 8139 C32D81 JP ASCDP ; 813C DB82 SHFTCK:IN A,(82) 813E B7 OR A 813F FA0E81 JP M,START2 8142 3A0381 LD A,(SHFTMK) 8145 B7 OR A 8146 F20E81 JP P,START2 8149 AF XOR A 814A 320381 LD (SHFTMK),A 814D C32A81 JP NOSHFT ; 8150 3E5B HEXDP:LD A,5B;[ 8152 CD1510 CALL ADISP 8155 61 LD H,C 8156 CD4B10 CALL HXDP2 8159 3E5D LD A,5D;] 815B CD1510 CALL ADISP 815E C9 RET ; 815F 210091 ASCDPS:LD HL,$9100 8162 C5 PUSH BC 8163 79 LD A,C 8164 0630 LD B,30 8166 BE ASCDPS2:CP (HL) 8167 CA7181 JP Z,ASCDPS3 816A 23 INC HL 816B 05 DEC B 816C C26681 JP NZ,ASCDPS2 816F C1 POP BC 8170 C9 RET 8171 62 ASCDPS3:LD H,D 8172 7E LD A,(HL) 8173 CD1510 CALL ADISP 8176 C1 POP BC 8177 C9 RET ; ;END ADISP =1015 ASCDP =812D ASCDPS =815F ASCDPS2 =8166 ASCDPS3 =8171 HEXDP =8150 HXDP2 =104B NOSHFT =812A SHFTCK =813C SHFTIN =8133 SHFTMK =8103 START0 =8104 START1 =810C START2 =810E |
下が実行結果です。
logfile nd80zlog\10231755.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld keypic1f.bin,8100 loading KEYPIC1F.BIN ...0078(120)bytes loaded,from 8100 to 8177 >usr($8100) [FF][16]1[16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16][16 ][1E]2[1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1E][1 E][1E][26]3[26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][26][ 26][26][26][1C]a[1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C] [1C][1C][1C][1C][1C][32]b[32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32 ][32][32][32][32][32][32][32][1C]A[1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1 C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][1C][32]B[32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][32][ 32][32][32][32][32][21]C[21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21][21] [21][21][21][21][21][21][21][21][21][21][23]d[23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23 ][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][23][1A] >cm 8115 8115 CD-00 8116 50-00 8117 81-00 8118 79- >usr($8100) 12345!"#$%abcdeABCDEXYy >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Oct 23 17:58:41 2016 |
問題なく動作しているようです。
ここまではうまくできたように思います。
というところまでできたところで、このあたりで一区切りつけたいと思います。
今回でひとまずキーボードインターフェースについては一旦お休みということにいたします。
まだ[Ctrl]や[Alt]については作業していませんし、また2バイトコードの処理やカナ入力についてなどもまだ手をつけていませんが、それはもう少し後になってから作業にかかることにします。
マイコン独立大作戦はその名のごとく「大作戦」なのです。
現在第1作戦の「CRTインターフェースボードの製作」も休止中ですが、こちらは近日中に作戦再開の予定です。
この「キーボードインターフェースの製作」が第2作戦です。
実はもうひとつ第3の作戦があるのです。
明日からはその第3作戦を開始いたします。
何が始まるか(おそらくはおおよその見当はついていらっしゃるとは思いますが)。
乞う、ご期待。
です。
キーボードインターフェースの製作[第16回]
2016.10.26upload
前へ
ホームページトップへ戻る