====== 自分用の環境を整える ======
===== 自分用の環境を整える =====
ソフトの開発は、自分用のライブラリやヘッダを作っておけば、ルーチンの使いまわしも\\
楽になりますし、マニュアルを引く手間も減り、バグも減り納期短縮に繋がります。\\
\\
以下のようにプログラムとは別に、よく使うものを lib3052というフォルダに分け使い回します。\\
組み込みだとポート割りがその都度変わるため、EEPROM処理とかはライブラリ化できません。\\
ポート割り当てファイルを別個に作り、ライブラリを再コンパイルするのが効率よさそうです。\\
3052h.h ------- ヘッダファイル(C 言語用)
3052h.inc ----- ヘッダファイル(アセンブラ用)
ad.inc -------- A/D コンバータの I/O 定義ファイル(アセンブラ用)
da.inc -------- D/A コンバータの I/O 定義ファイル(アセンブラ用)
itu.inc ------- ITU の I/O 定義ファイル(アセンブラ用)
port.inc ------ ポートの I/O 定義ファイル(アセンブラ用)
sci.inc ------- シリアルポートの I/O 定義ファイル(アセンブラ用)
sprintf.c ----- 軽量 sprint 関数(C 言語用)
system.inc ---- システムの I/O 定義ファイル(アセンブラ用)
typedef.h ----- 型定義(C 言語用)
wait.asm ------ ウェイト処理(C 言語、アセンブラ共用)
:
<プログラム 1>
<プログラム 2>
:
実際にはもっとたくさんのファイルが、ライブラリフォルダに入っています。
===== 型を判りやすくする =====
色々なCPU、MPUを使っているとintが何バイトだとか、charのデフォルトは符号あり?なし?が\\
判らなくなります。また、Yellow SoftのCコンパイラにはBOOLがないので、VC で作った関数の\\
移植性も悪いです。\\
C言語もアセンブラも使うことがあるので、BYTE、WORD、DWORDも定義します。\\
//*****************************************************************************
// H8 3052 型定義
// (C)YdlProg
//*****************************************************************************
#ifndef __TYPEDEF_H
#define __TYPEDEF_H
//=============================================================================
// 型定義
//=============================================================================
typedef unsigned char Uint8 ; // 符号なし 1 バイト整数
typedef signed char Sint8 ; // 符号つき 1 バイト整数
typedef unsigned short Uint16 ; // 符号なし 2 バイト整数
typedef signed short Sint16 ; // 符号つき 2 バイト整数
typedef unsigned long Uint32 ; // 符号なし 4 バイト整数
typedef signed long Sint32 ; // 符号つき 4 バイト整数
typedef unsigned char BYTE ; // 符号なし 1 バイト整数
typedef unsigned short WORD ; // 符号なし 2 バイト整数
typedef unsigned long DWORD ; // 符号なし 4 バイト整数
typedef signed short BOOL ; // BOOL
#define TRUE 1
#define FALSE 0
#endif
===== I/O を定義する =====
I/Oアドレスは覚えられないし、直接書くと後でわからなくなるので、ヘッダファイルで定義します。\\
コメントもきちんと書いておけば、マニュアルを見る回数も減ります。\\
私自体はH8のC言語で、I/Oアクセスする気にならないので、アセンブラ用のヘッダファイルしか\\
作っていません。\\
;******************************************************************************
; H8 3052 ポート
; (C)YdlProg
;******************************************************************************
IFNDEF __PORT_H
DEFINE __PORT_H
;------------------------------------------------------------------------------
; ポート 1 P10/ A0
; P11/ A1
; P12/ A2
; P13/ A3
; P14/ A4
; P15/ A5
; P16/ A6
; P17/ A7
;------------------------------------------------------------------------------
P1DR EQU H'FFFFC0 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
P1 EQU H'FFFFC2 ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 2 P20/ A8
; P21/ A9
; P22/A10
; P23/A11
; P24/A12
; P25/A13
; P26/A14
; P27/A15
;------------------------------------------------------------------------------
P2DR EQU H'FFFFC1 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
P2 EQU H'FFFFC3 ; データレジスタ(R/W)
P2PCR EQU H'FFFFD8 ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 3 P30/ D8
; P31/ D9
; P32/D10
; P33/D11
; P34/D12
; P35/D13
; P36/D14
; P37/D15
;------------------------------------------------------------------------------
P3DR EQU H'FFFFC4 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
P3 EQU H'FFFFC6 ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 4 P40/ D0
; P41/ D1
; P42/ D2
; P43/ D3
; P44/ D4
; P45/ D5
; P46/ D6
; P47/ D7
;------------------------------------------------------------------------------
P4DR EQU H'FFFFC5 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
P4 EQU H'FFFFC7 ; データレジスタ(R/W)
P4PCR EQU H'FFFFDA ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 5 P50/A16
; P51/A17
; P52/A18
; P53/A19
;------------------------------------------------------------------------------
P5DR EQU H'FFFFC8 ; データディレクションレジスタ(W)
; b3-b0 0:入力
; 1:出力
P5 EQU H'FFFFCA ; データレジスタ(R/W)
P5PCR EQU H'FFFFDB ; 入力プルアップ MOS コントロールレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 6 P60/WAIT
; P61/BREQ
; P62/BACK
; P63/AS
; P64/RD
; P65/HWR
; P66/LWR
;------------------------------------------------------------------------------
P6DR EQU H'FFFFC9 ; データディレクションレジスタ(W)
; b6-b0 0:入力
; 1:出力
P6 EQU H'FFFFCB ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 7 P70/AN0
; P71/AN1
; P72/AN2
; P73/AN3
; P74/AN4
; P75/AN5
; P76/DA0
; P77/DA1
;------------------------------------------------------------------------------
P7 EQU H'FFFFCE ; データレジスタ(R)
;------------------------------------------------------------------------------
; ポート 8 P80/RFSH/IRQ0
; P81/CS3/IRQ1
; P82/CS2/IRQ2
; P83/CS1/IRQ3
; P84/CS0
;------------------------------------------------------------------------------
P8DR EQU H'FFFFCD ; データディレクションレジスタ(W)
; b4-b0 0:入力
; 1:出力
P8 EQU H'FFFFCF ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート 9 P90/TxD0
; P91/TxD1
; P92/RxD0
; P93/RxD1
; P94/SCK0/IRQ4
; P95/SCK1/IRQ5
;------------------------------------------------------------------------------
P9DR EQU H'FFFFD0 ; データディレクションレジスタ(W)
; b5-b0 0:入力
; 1:出力
P9 EQU H'FFFFD2 ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート A PA0/TP0/TEND0/TCLKA
; PA1/TP1/TEND1/TCLKB
; PA2/TP2/TIOCA0/TCLKC
; PA3/TP3/TIOCB0/TCLKD
; PA4/TP4/TIOCA1/A23/CS6
; PA5/TP5/TIOCB1/A22/CS5
; PA6/TP6/TIOCA2/A21/CS4
; PA7/TP7/TIOCB2/A20
;------------------------------------------------------------------------------
PADR EQU H'FFFFD1 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
PA EQU H'FFFFD3 ; データレジスタ(R/W)
;------------------------------------------------------------------------------
; ポート B PB0/ TP8/TIOCA3
; PB1/ TP9/TIOCB3
; PB2/TP10/TIOCA4
; PB3/TP11/TIOCB4
; PB4/TP12/TOCXA4
; PB5/TP13/TOCXB4
; PB6/TP14/DREQ0/CS7
; PB7/TP15/DREQ1/ADTRG
;------------------------------------------------------------------------------
PBDR EQU H'FFFFD4 ; データディレクションレジスタ(W)
; b7-b0 0:入力
; 1:出力
PB EQU H'FFFFD6 ; データレジスタ(R/W)
ENDIF