マイコンの使い方
上画像は、1997年に製造した弊社ワンボードコンピュータ MS-80C16、CPUにオリジナルZ80とバイナリコンパチブルな川崎製鉄KL5C80A16CFPを採用し、機械組込み分野に対応する小型・低価格CPUボード。
マイコン使い方は、メーカーが異なっても、基本的にはレジスターに目的に応じて値を設定しプログラムするだけです。
下表は、 KL5C80A16の内部のCPUの動作を設定(ライト)したりデータを取り出し(リード)するI/Oアドレス(ハードウェアまたはソフトウェアから参照可能なメモリ領域)
| ブロック名 (内 容) |
| ライト時 |
リード時 |
アドレス |
| KC82(MMU) BBR1(境界/ベースレジスタ1) |
BBR1(境界/ベースレジスタ1) |
00H |
| BR1(ベースレジスタ1) |
BR1(ベースレジスタ1) |
01H |
| BBR2(境界/ベースレジスタ2) |
BBR2(境界/ベースレジスタ2) |
02H |
| BR2(ベースレジスタ2) |
BR2(ベースレジスタ2) |
03H |
| BBR3(境界/ベースレジスタ3) |
BBR3(境界/ベースレジスタ3) |
04H |
| BR3(ベースレジスタ3) |
BR3(ベースレジスタ3) |
05H |
| BBR4(境界/ベースレジスタ4) |
BBR4(境界/ベースレジスタ4) |
06H |
| BR4(ベースレジスタ4) |
BR4(ベースレジスタ4) |
07H |
| 川崎製鉄予約 |
川崎製鉄予約 |
08H〜0FH |
| DMAコントローラ チャンネル 0 B-PAR |
チャンネル 0 C-PAR |
10H |
| チャンネル 0 B-SAR |
チャンネル 0 C-SAR |
11H |
| チャンネル 0 B-BCR |
チャンネル 0 C-BCR |
12H |
| チャンネル 0 CR |
チャンネル 0 SR 1 |
13H |
| チャンネル 1 B-PAR |
チャンネル 1 C-PAR |
14H |
| チャンネル 1 B-SAR |
チャンネル 1 C-SAR |
15H |
| チャンネル 1 B-BCR |
チャンネル 1 C-BCR |
16H |
| チャンネル 1 CR |
チャンネル 1 SR |
17H |
| システム制御レジスタ |
川崎製鉄予約 |
18H |
|
川崎製鉄予約 |
19H |
|
川崎製鉄予約 |
1AH |
| SCR 0 |
SCR 0 |
1BH |
| SCR 1 |
SCR 1 |
1CH |
| SCR 2 |
SCR 2 |
1DH |
| SCR 3 |
SCR 3 |
1EH |
| SCR 4 |
SCR 4 |
1FH |
| タイマ/カウンタ |
チャンネル 0 カウンタ |
20H |
| チャンネル 0 コントロールワード |
ステータス |
21H |
| チャンネル 1 カウンタ |
|
22H |
| チャンネル 1 コントロールワード |
ステータス |
23H |
| チャンネル 2 カウンタ |
|
24H |
| チャンネル 2 コントロールワード |
ステータス |
25H |
| チャンネル 3 カウンタ |
|
26H |
| チャンネル 3 コントロールワード |
ステータス |
27H |
| UART RATE設定 |
RATE設定 |
28H |
|
川崎製鉄予約 |
29H |
| チャンネル 0 送信データ |
チャンネル 0 受信データ/拡張ステータス A |
2AH |
| チャンネル 0 モード/コマンド |
チャンネル 0 ステータス /拡張ステータス B |
2BH |
| チャンネル 1 送信データ |
チャンネル 1 受信データ/拡張ステータス A |
2CH |
| チャンネル 1 モード/コマンド |
チャンネル 1 ステータス /拡張ステータス B |
2DH |
|
川崎製鉄予約 |
2EH |
|
川崎製鉄予約 |
2FH |
| クロック同期 チャンネル 0 送信データ |
チャンネル 0 受信データ |
30H |
| シリアルI/O チャンネル 0 モード/コマンド設定 |
チャンネル 0 ステータス |
31H |
| チャンネル 1 送信データ |
チャンネル 1 受信データ |
32H |
| チャンネル 1 モード/コマンド設定 |
チャンネル 1 ステータス |
33H |
| 割り込みコントローラ LERL/PGRL |
ISRL |
34H |
| LERH/PGRH |
ISRH |
35H |
| IMRL |
IMRL |
36H |
| IVR/IMRH |
IMRH |
37H |
| パラレルポート ポート 0 |
ポート 0 |
38H |
| ビット操作コマンド |
ポート 0 方向制御レジスタ(固定) |
39H |
| ポート 1 |
ポート 1 |
3AH |
| ポート 1 方向制御レジスタ |
ポート 1 方向制御レジスタ |
3BH |
| ポート 2 |
ポート 2 |
3CH |
| ポート 2 方向制御レジスタ |
ポート 2 方向制御レジスタ |
3DH |
| ポート 3 |
ポート 3 |
3EH |
| ポート 3 方向制御レジスタ |
ポート 3 方向制御レジスタ |
3FH |
下記は、アセンブラ言語のサンプルプログラム
●PORT出力
◇プログラム名 :PORT2.ASM
◇動作説明
プログラムを実行すると、ポートP27を出力モードにしON/OFFさせます。出力はコネクターCN2の23番ピンです。
; PORT output test
; name :PORT2
; platform :MSG-80C16
; I/O definition
PORT0 equ 038h
BITCL equ 039h
PORT1 equ 03ah
PORT1_d equ 03bh
PORT2 equ 03ch
PORT2_d equ 03dh
PORT3 equ 03eh
PORT3_d equ 03fh
;
.z80
org 8000h
; ld sp,9ff0h
; port direction initialize
ld a,10000000b ;ポートP27を出力に設定
out (PORT2_d),a ;方向制御レジスタ
; port output test
loop:
ld a,10000000b
out (PORT2),a ;bit7に1を出力(LED OFF)
ld de,10000 ;set time
call delay
ld a,00000000b
out (PORT2),a ;bit7に0を出力(LED ON)
ld de,10000 ;set time
call delay
jr loop
; Delay proc
; Set delay time to DE reg.
delay:
push bc
push hl
delay1:
ld b,59
djnz $
dec de
ld a,d
or e
jr nz,delay1
pop hl
pop bc
ret
end
●PORT入出力機能
◇プログラム名 :PORT.ASM
◇動作説明
プログラムを実行すると、まずポート1、2、3を出力モードにし、順次ポートをON/OFFさせます。
また、PORT0は、P00〜P03が出力、P04〜P07が入力に固定ですので、P04〜P07の入力がHI/LOに変化する事により、P00、P10、P20、P30がHI/LOとなるプログラムです。
プログラムの最後でP04がHiのときP00がHi、P04がLoのときP00がLo、P05がHiのときP10がHi、P05がLoのときP10がLo、P06がHiのときP20がHi、P06がLoのときP20がLo、P07がHiのときP30がHi、P07がLoのときP30がLo、となります。
HI/LOのディレイは約1秒ですので調整して使用してください。
; PORT input/output test
; name :PORT
; platform :MSG-80C16
; CREATE LTD.
; I/O definition
PORT0 equ 038h
BITCL equ 039h
PORT1 equ 03ah
PORT1_d equ 03bh
PORT2 equ 03ch
PORT2_d equ 03dh
PORT3 equ 03eh
PORT3_d equ 03fh
;
.z80
org 8000h
; ld sp,9ff0h
; port direction initialize
ld b,3
ld hl,init0
init0lp:
ld c,(hl)
inc hl
outi
jr nz,init0lp
; port output test
;all off
ld b,4
ld hl,init1
init02p:
ld c,(hl)
inc hl
outi
jr nz,init02p
;on test port0
ld b,8
ld hl,init2
init03p:
ld c,(hl)
inc hl
ld de,10000 ;set dely time
call delay
outi
jr nz,init03p
;on test bit03,bit0-;7
ld b,28 ;port0;3,0-7
ld hl,init3
init04p:
ld c,(hl)
inc hl
ld de,10000 ;set dely time
call delay
outi
jr nz,init04p
;port0 bit4-7 input test
in a,(port0)
bit 4,a
jp z,next1
ld a,00000001b ;port0 bit0 set
out (39h),a
ld de,10000 ;set dely time
call delay
next1:
in a,(port0)
bit 5,a
jp z,next2
ld a,00010001b ;port1 bit0 set
out (39h),a
ld de,10000 ;set dely time
call delay
next2:
in a,(port0)
bit 6,a
jp z,next3
ld a,00100001b ;port2 bit0 set
out (39h),a
ld de,10000 ;set dely time
call delay
next3:
in a,(port0)
bit 7,a
jp z,next4
ld a,00110001b ;port3 bit0 set
out (39h),a
ld de,10000 ;set dely time
call delay
next4:
nop
nop
nop
nop
nop
nop
nop
nop
nop
rst 30h
; Delay proc
; Set delay time to DE reg.
delay:
push bc
push hl
delay1:
ld b,59
djnz $
dec de
ld a,d
or e
jr nz,delay1
pop hl
pop bc
ret
init0: db PORT1_d, 11111111b
db PORT2_d, 11111111b
db PORT3_d, 11111111b
init1:
db PORT0, 00001111b ;off
db PORT1, 11111111b ;off
db PORT2, 11111111b ;off
db PORT3, 11111111b ;off
init2:
db PORT0, 00000000b ;on
db PORT0, 00001111b ;off
db PORT1, 00000000b ;on
db PORT1, 11111111b ;off
db PORT2, 00000000b ;on
db PORT2, 11111111b ;off
db PORT3, 00000000b ;on
db PORT3, 11111111b ;off
init3:
db PORT0, 11110111b ;bit3 on
db PORT0, 11111011b ;bit2 on
db PORT0, 11111101b ;bit1 on
db PORT0, 11111110b ;bit0 on
db PORT1, 01111111b ;bit7 on
db PORT1, 10111111b ;bit6 on
db PORT1, 11011111b ;bit5 on
db PORT1, 11101111b ;bit4 on
db PORT1, 11110111b ;bit3 on
db PORT1, 11111011b ;bit2 on
db PORT1, 11111101b ;bit1 on
db PORT1, 11111110b ;bit0 on
db PORT2, 01111111b ;bit7 on
db PORT2, 10111111b ;bit6 on
db PORT2, 11011111b ;bit5 on
db PORT2, 11101111b ;bit4 on
db PORT2, 11110111b ;bit3 on
db PORT2, 11111011b ;bit2 on
db PORT2, 11111101b ;bit1 on
db PORT2, 11111110b ;bit0 on
db PORT3, 01111111b ;bit7 on
db PORT3, 10111111b ;bit6 on
db PORT3, 11011111b ;bit5 on
db PORT3, 11101111b ;bit4 on
db PORT3, 11110111b ;bit3 on
db PORT3, 11111011b ;bit2 on
db PORT3, 11111101b ;bit1 on
db PORT3, 11111110b ;bit0 on
end
●UART機能
◇プログラム名 :RSTEST.ASM
◇動作の確認に必要なツール
1.全2重あるいは半2重通信ができるターミナルが必要です。パソコンをターミナルにしたものが使用できます。通信条件は、以下の通りです。
9600BPS、パリティなし、データ長8ビット、1ストップビット。
2.ROMライター。プログラムをROMに焼き込みます。
◇動作説明
ターミナルからアルファベットが受信されると、その文字をターミナルに送信する。文字のループバックを行ないます。
;*******************************************************************
;
; Z−Vision Remote
;
; RS232C通信確認テスト用プログラム
;
; 初期設定及び、送受信確認
; (rsinit) (rsout,rsin)
;
;*******************************************************************
;
BBR1 EQU 0
BR1 EQU 1
BBR2 EQU 2
BR2 EQU 3
BBR3 EQU 4
BR3 EQU 5
BBR4 EQU 6
BR4 EQU 7
SCR0 EQU 1BH
SCR1 EQU 1CH
SCR2 EQU 1DH
SCR3 EQU 1EH
SCR4 EQU 1FH
UART_RT EQU 28H
UART_D0 EQU 2AH
UART_M0 EQU 2BH
UART_D1 EQU 2CH
UART_M1 EQU 2DH
BR9600 EQU 11100110B ;コマンド・レジスタB設定値(BCK)
BR19200 EQU 11100101B ;BCK
BR38400 EQU 11100100B ;BCK
BR76800 EQU 11100011B ;BCK
U_RESET EQU 0111111B ;ソフトウエア・リセット・コマンド
U_RATE EQU 10000000B + 124 ;RATE設定レジスタ設定値
U_MODE EQU 00001110B ;モード・パラメータ(8 BIT,NO_PARITY,STOP=1)
U_CMDA EQU 00110111B ;コマンド・レジスタA設定値(送受信可、TRS=ON DTR=ON)
U_CMDB EQU BR9600
;
;STACKB equ 9ff0h ;stack area bottom
STACKB equ 0F400H ;stack area bottom
org 0h
LD A,1FH ;MMU設定
OUT (BBR4),A ;8000-FFFF → F8000-FFFFF
ld sp,STACKB ;システム・スタックのボトム
call rsinit
;
loop:
call rsin
ld b,a
call rsout
jr loop
;
;
;*******************************************************************
;
; RS232C初期設定
;
;*******************************************************************
rsinit:
ld a,U_RATE ;内臓ボーレートジェネレータの設定
out (UART_RT),a
xor a ;A=00H
out (UART_M0),a ;カマンド・モードに移行
ld a,U_RESET ;UARTのリセット
out (UART_M0),a
ld a,U_MODE ;モード・レジスタの設定
out (UART_M0),a
ld a,U_CMDA ;コマンド・レジスタA設定
out (UART_M0),a
ld a,U_CMDB ;コマンド・レジスタB設定
out (UART_M0),a
ret
;
;*******************************************************************
;
; データ送信
;
;*******************************************************************
rsout: ;console character output from register c
IN A,(UART_M0) ;ステータス・チェック
BIT 0,A ;TXRDY = 1 ?
JP Z,rsout
LD A,b
OUT (UART_D0),A ;送信データの書き込み
ret
;*******************************************************************
;
; データ受信
;
;*******************************************************************
rsin: ;console character output from register c
IN A,(UART_M0) ;ステータス・チェック
BIT 1,A ; RXRDY = 1 ?
JP Z,rsin
IN A,(UART_D0) ;受信データの読み込み
ret
;
end
●割り込み機能
◇プログラム名 :INT.ASM
◇動作させるために必要な配線等:ポートP20をプルアッフしてアクティブLOになる?モーメンタリスィツチをつける。
◇動作の確認に必要なツール
テスターあるいはオシロスコープ等電圧レベルが確認できるもの。
ポートにLEDを抵抗を通して接続すると動作が視覚的の確認できます。
注意 ポートがドライブできる電流は±4mAです。ご注意ください。
◇動作説明
プログラムを実行すると、割り込みコントローラを初期化しポートP26にタイマー0からのを割り込みを接続し、また出力に設定したポートP27に入力に設定したポートP20からの割り込みを接続しポートP26、27それぞれをON/OFFさせます。
; CTC/INTERRUPT sample program
; name :int.asm
; platform :MS-80C16
;
; I/O アドレス
INCLUDE c16ioadrs.asm
;
.z80
org 8000h
di
ld a,11000000b ;P26,P27を出力に設定
out (PORT2_d),a
ld a,10000000b
out (PORT2),a ;bit7に0を出力(LED OFF)
ld a,11001111b ;P20=IR0,P21=IR1に接続,反転入力
out (SCR1),a
im 2 ;モード2割り込みに設定
call timer ;タイマーの初期化
; LERL/H 初期化、リセット後はレベル・モード
ld a,00000001b ;IR[7:1]レベル、IR[0]エッジ
out (LERL),a ;
ld a,00010000b ;IR[12]エッジ
out (LERH),a ;
; IVR初期化
ld hl,inttb ;
ld a,h ;
ld i,a ;上位ベクタをIレジスタにセット
ld a,l ;
out (IVR),a ;下位ベクタをIVRにセット
; IMR初期化
ld a,11111110b ;IR[0]割り込み許可
out (IMRL),a ;
ld a,11101111b ;IR[12]割り込み許可
out (IMRH),a ;
ei ;割り込み可
loop: jr $
INTP20:
ei
push af
push bc
ld a,01111111b
out (PORT2),a ;bit7に0を出力(LED ON)
p2lp:
call delay
in a,(PORT2) ;bit0が0の間bit7に0を出力
bit 0,a
jr z,p2lp
extp2:
ld a,11111111b
out (PORT2),a
pop bc
pop af
reti
INTTIM:
ei
and 10111111b
out (PORT2),a ;bit6に0を出力(LED ON)
call delay
or 01000000b
out (PORT2),a
call delay
reti
delay:
ld bc,0060h
dlp: djnz dlp
dec c
jp nz, dlp
ret
timer:
ld a,04h ;チャンネル0、連続カウント
out (CTC0C),a ;256分周(GATE機能無)、出力非反転モード
ld a,035H
out (CTC0),a ;カウント初期値(下位側)設定
out (CTC0),a ;カウント初期値(上位側)設定
ret
;
;割り込みベクターテーブル
;
org ($+1FH) AND 0FFE0H ;偶数アドレスに調整
;
inttb:
DW INTP20 ; IR[ 0] タイマ/カウンタチャンネル2割り込み/外部端子P20
DW 0 ; IR[ 1] タイマ/カウンタチャンネル3割り込み/外部端子P21
DW 0 ; IR[ 2] クロックドウキ同期シリアルI/O送受信割込(チャンネル1)/外部端子P20
DW 0 ; IR[ 3] USART TXRDY 出力(チャンネル1)
DW 0 ; IR[ 4] USART RXRDY 出力(チャンネル1)
DW 0 ; IR[ 5] USART ブレイク検出/エラー検出割り込み(チャンネル1)
DW 0 ; IR[ 6] DMAコントローラのDMTC0
DW 0 ; IR[ 7] DMAコントローラのDMTC1
DW 0 ; IR[ 8] クロック同期シリアルI/Oの送受信割込(チャンネル0)
DW 0 ; IR[ 9] USART TXRDY 出力(チャンネル0)
DW 0 ; IR[10] USART RXRDY 出力(チャンネル0)
DW 0 ; IR[11] USART ブレイク検出/エラー検出割り込み(チャンネル0)
DW INTTIM ; IR[12] タイマ/カウンタチャンネル0割り込み
DW 0 ; IR[13] タイマ/カウンタチャンネル1割り込み
DW 0 ; IR[14] 外部端子P22
DW 0 ; IR[15] 外部端子P23
end
|