C 51チップヘッダファイルと起動ファイル


STARTUP.A 51//ファイルを起動します.RAMをクリーンアップするスタック等を設ける.つまりstart.a 51後にジャンプする.cファイルのmain関数
//特殊レジスタのバイトアドレスとビットアドレス、sfrはバイト変数、sbitはビット変数を定義し、変数名として通俗名を用い、アドレス値を付与し、これらの特殊レジスタを名前で使用する.
//はいくつかの外部関数を定義して、C51単片機のプログラミングの中で、ヘッダファイルINTRINS.Hの関数を使うと、アセンブルを使うときのように簡単になります.
/*--------------------------------------------------------------------------REG51.H
Header file for generic 80C51 and 80C31 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*/
#ifndef __REG51_H__#define __REG51_H__
/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;
/* BIT Register *//* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0;
/* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbit TF0 = 0x8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88;
/* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8;
/* IP */sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8;
/* P3 */sbit RD = 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;
/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;
#endif
 
/*--------------------------------------------------------------------------INTRINS.H
Intrinsic functions for C51.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__#define __INTRINS_H__
extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);
#endif
 
sfrについて、sbit://int、charのように...
sfrは標準C言語のキーワードではなく、Keilが80 C 51のSFRに直接アクセスできる新しいキーワードを提供しているようで、sfrt変数名=アドレス値を用いる.
例:sfr P 1=0 x 90;
このような1行の定義P 1はアドレス0 x 90に対応する、P 1ポートのアドレスは0 x 90である.
SFRの定義はヘッダファイルreg 51にある.h又はreg 52.h中.
 
C 51では、sbitを用いてRAM内のアドレス可能ビットまたはSFR内のアドレス可能ビットにアクセスすることができる.
P 1を直接書くと.0,Cコンパイラは認識する、P 1.0も合法的なC言語変数名ではないので、P 1_のような名前を付けなければなりません.0ですがP 1_0はP 1であるか否かである.0は?Cコンパイラはそうは思わないので、連絡を取らなければなりません.ここではKeil Cのキーワードsbitを使用して定義されています.sbitの使い方は3つあります.
1つ目の方法:sbitビット変数名=アドレス値
第2の方法:sbitビット変数名=SFR名^変数ビットアドレス値
第3の方法:sbitビット変数名=SFRアドレス値^変数ビットアドレス値
例えば、P 1のP 1を定義.1足には以下の3つの方法があります.
sbit P1_1=0 x 92(1)説明:0 x 92はP 1.1のビットアドレス値
sbit P1_1=P 1^1(2)説明:P 1はsfrで定義する必要があります
sbit P1_1=0 x 90^2(3)説明:0 x 90がP 1のアドレス値
そこでここではsfr P 1_0=P1^0;定義用符号P 1_0はP 1を表す.0引
 
sfrは8ビット(範囲0~255)を定義する特殊機能レジスタであり、sfr 16は8052のT 2タイマのような16ビット特殊機能レジスタを定義するために用いられ、sfr 16 T 2=0 xCCと定義することができる.//ここでは8052タイマ2を定義し、アドレスはT 2 L=CCH、T 2 H=CDH
KEILでは、アセンブリはORG 000 Hから起動しますが、C 51でMAIN()関数をどのように起動しますか?実際には、C 51に起動プログラムSTARTUPがある.A 51、それはいつもCプログラムと一緒にコンパイルしてリンクします.
起動ファイルSTARTUP.A 51にはターゲットボード起動コードが含まれており、各プロジェクトにこのファイルを追加することができ、リセットすれば、そのファイルは直ちに実行され、
次の機能があります.
z内部RAMサイズ、外部RAMサイズ、再入可能スタック位置の定義
z内部、外部又はこのページを単位とする外部メモリの消去
zストレージモードによる初期化再入スタックおよびスタックポインタ
z初期化8051ハードウェアスタックポインタ
z main()関数への権限渡し
 
開発者
システムを初期化するために、以下のデータを変更できます.
定数名の意味
IDATALENクリア待ち内部RAM長
XDATA START指定クリア待ち外部RAM先頭アドレス
XDATALENクリア待ち外部RAM長
IBPSTACKが小さいモードでスタックポインタに再入するかどうかは初期化フラグが必要で、1は必要です.デフォルトは0
IBPSTACKTOP指定小モード再入スタックトップアドレス
XBPSTACK大モード再入スタッキングポインタ初期化フラグ、デフォルトは0
XBPSTACKTOP大モード再入スタックトップアドレス指定
PBPSTACKスタックポインタにCompactが再入力されているかどうかは、初期化フラグが必要で、デフォルトは0です.
PBPSTACKTOP指定Compactモード再入スタックトップアドレス
PPAGEENABLE P 2初期化許可スイッチ
PPAGE指定P 2値
PDATASTART未クリア外部RAMページヘッダ
常に修正が必要な箇所:(赤)
XDATASTART EQU 0H ;                     the absolute start-address of XDATA memory
XDATALEN EQU 0H ;                          the length of XDATA memory in bytes.
 
XBPSTACK EQU 0 ;                            set to 1 if large reentrant is used.
XBPSTACKTOP EQU 0FFFFH+1;      set top of stack to highest location+1.
 
PPAGEENABLE EQU 0 ;                     set to 1 if pdata object are used.
PPAGE EQU 0 ;                                  define PPAGE number.
 
  kiel  C      ,  :
Copy standard 8051 Starup Code to Project Forder and add file to Project?
: 8051 ?

, 。
RAM , SP 。
, RAM 。
RAM ( RAM 。), , , 。

SP,SAMLL/COMPACT、LARGE RAM 。