Embedded-systems-es-io-programming

提供:Dev Guides
移動先:案内検索

組み込みシステム-I/Oプログラミング

8051では、4つのポートと40ピンを使用してI/O操作が行われます。 次のピン図は、40個のピンの詳細を示しています。 I/O操作ポートは、各ポートが8ピンである32ピンを予約しています。 他の8つのピンは、V〜cc〜、GND、XTAL1、XTAL2、RST、EA(バー)、ALE/PROG(バー)、およびPSEN(バー)として指定されます。

40ピンPDIP(プラスチックデュアルインラインパッケージ)

PIN図

-DIPパッケージでは、ICの中央の切り込みによって最初のピンと最後のピンを認識できます。 最初のピンはこのカットマークの左側にあり、最後のピンは(つまり、 この場合の40番目のピン)は、カットマークの右側にあります。

I/Oポートとその機能

4つのポートP0、P1、P2、およびP3は、それぞれ8ピンを使用し、8ビットポートにします。 リセットすると、すべてのポートが入力として設定され、入力ポートとして使用できる状態になります。 最初の0がポートに書き込まれると、出力になります。 入力として再構成するには、ポートに1を送信する必要があります。

ポート0(ピン番号32 –ピン番号39)

8つのピン(32〜39)があります。 入力または出力に使用できます。 P1、P2、およびP3ポートとは異なり、通常、P0を10Kオームのプルアップ抵抗に接続して、オープンドレインである入力ポートまたは出力ポートとして使用します。

また、AD0〜AD7として指定されているため、アドレスとデータの両方として使用できます。 8031の場合(つまり、 ROMレスチップ)、外部ROMにアクセスする必要がある場合、P0はアドレスバスとデータバスの両方に使用されます。 ALE(ピン番号31)は、P0にアドレスまたはデータがあるかどうかを示します。 ALE = 0の場合、データD0-D7を提供しますが、ALE = 1の場合、アドレスA0-A7を持ちます。 外部メモリ接続が利用できない場合、P0は10KΩプルアップ抵抗に外部接続する必要があります。

ポート0図

MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

ポート1(ピン1〜8)

8ビットポート(ピン1〜8)であり、入力または出力として使用できます。 内部に既に接続されているため、プルアップ抵抗は必要ありません。 リセットすると、ポート1は入力ポートとして設定されます。 次のコードを使用して、55HとAAHの値を交互にポート1に送信できます。

;Toggle all bits of continuously
MOV     A,#55
BACK:

MOV     P2,A
ACALL   DELAY
CPL     A      ;complement(invert) reg. A
SJMP    BACK

ポート1が出力ポートとして使用されるように構成されている場合、それを再び入力ポートとして使用するには、次のコードのようにすべてのビットに1を書き込むことによってプログラムします。

;Toggle all bits of continuously

MOV     A ,#0FFH    ;A = FF hex
MOV     P1,A        ;Make P1 an input port
MOV     A,P1        ;get data from P1
MOV     R7,A        ;save it in Reg R7
ACALL   DELAY       ;wait

MOV     A,P1        ;get another data from P1
MOV     R6,A        ;save it in R6
ACALL   DELAY       ;wait

MOV     A,P1        ;get another data from P1
MOV     R5,A        ;save it in R5

ポート2(ピン21から28)

ポート2は合計8ピン(ピン21〜28)を占有し、入力と出力の両方の操作に使用できます。 P1(ポート1)と同様に、P2も外部プルアップ抵抗が必要です。これらは既に内部で接続されています。 外部メモリの16ビットアドレスを提供するには、P0と共に使用する必要があります。 そのため、ピンダイアグラムに示すように、(A0–A7)としても指定されます。 8051を外部メモリに接続すると、16ビットアドレスの上位8ビットのパスが提供され、I/Oとして使用できなくなります。 リセットすると、ポート2は入力ポートとして設定されます。 次のコードを使用して、55HとAAHの値を交互にポート2に送信できます。

;Toggle all bits of continuously
MOV     A,#55
BACK:
MOV     P2,A
ACALL   DELAY
CPL     A         ; complement(invert) reg. A
SJMP    BACK

ポート2が出力ポートとして使用されるように構成されている場合、それを再び入力ポートとして使用するには、次のコードのように、すべてのビットに1を書き込むことによってプログラムします。

;Get a byte from P2 and send it to P1
MOV    A,#0FFH    ;A = FF hex
MOV    P2,A       ;make P2 an input port
BACK:
MOV    A,P2       ;get data from P2
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

ポート3(ピン10から17)

また、8ビットであり、入出力として使用できます。 このポートは、非常に重要な信号を提供します。 P3.0とP3.1はそれぞれRxD(受信機)とTxD(送信機)であり、シリアル通信に集合的に使用されます。 P3.2およびP3.3ピンは外部割り込みに使用されます。 P3.4およびP3.5は、それぞれタイマーT0およびT1に使用されます。 P3.6およびP3.7は、書き込み(WR)および読み取り(RD)ピンです。 これらはアクティブLowピンであり、0が与えられるとアクティブになり、8031ベースのシステムで外部ROMに読み取りおよび書き込み操作を提供するために使用されます。

P3 Bit Function Pin
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Complement of INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Complement of RD 17

ポート0とポート2の二重の役割

  • ポート0の二重の役割-ポート0は、データ処理とアドレス処理の両方に使用できるため、AD0〜AD7としても指定されます。 8051を外部メモリに接続している間、ポート0はアドレスとデータの両方を提供できます。 8051マイクロコントローラーは、ピンを節約するために、アドレスまたはデータとして入力を多重化します。
  • *ポート2の二重の役割-I/Oとして機能することに加えて、ポートP2はポート0とともに外部メモリ用の16ビットアドレスバスを提供するためにも使用されます。 ポートP2は(A8〜A15)としても指定されますが、ポート0はA0〜A7を介して下位8ビットを提供します。 つまり、8051が最大64KBの外部メモリ(ROM)に接続され、216 = 64KBであることがわかっているため、16ビットアドレスバスでこれが可能であると言えます。 Port2は16ビットアドレスの上位8ビットに使用され、I/Oには使用できません。これは外部ROMのプログラムコードのアドレス指定方法です。

ピンのハードウェア接続

  • * V〜cc〜*-ピン40はチップに電源を供給し、+ 5 Vです。
  • Gnd -ピン20は、リファレンスのグランドを提供します。
  • * XTAL1、XTAL2(ピン番号18およびピン番号19)*-8051にはオンチップオシレータがありますが、実行するには外部クロックが必要です。 水晶振動子は、チップのXTAL1ピンとXTAL2ピンの間に接続されています。 この水晶には、希望の周波数の信号を生成するために、30pFの2つのコンデンサも必要です。 各コンデンサの片側はグランドに接続されています。 8051 ICはさまざまな速度で利用でき、すべてこの水晶振動子に依存しています。たとえば、20 MHzマイクロコントローラーには20 MHz以下の周波数の水晶振動子が必要です。

XTAL1、XTAL2 diagram

  • * RST(ピン番号 9)*-入力ピンであり、アクティブHighピンです。 このピンに高パルス(1)を印加すると、マイクロコントローラーはすべてのアクティビティをリセットして終了します。 このプロセスは*パワーオンリセット*と呼ばれます。 パワーオンリセットをアクティブにすると、レジスタ内のすべての値が失われます。 プログラムカウンターをすべて0に設定します。 リセットの有効な入力を確保するには、コンデンサ値と充電レートに応じて、ハイパルスがローになる前に最低2マシンサイクルの間ハイである必要があります。 (*マシンサイクル*は、単一の命令の実行に必要な周波数の最小量です)。
  • * EAまたは外部アクセス(ピン番号 31)*-入力ピンです。 このピンはアクティブLowピンです。低パルスを適用すると、アクティブになります。 オンチップROMを備えたマイクロコントローラ(8051/52)の場合、EA(バー)ピンはV〜cc〜に接続されます。 しかし、オンチップROMを持たない8031マイクロコントローラーでは、コードは外部ROMに保存され、マイクロコントローラーによってフェッチされます。 この場合、プログラムコードが外部に保存されていることを示すために、(ピン番号31)EAをGndに接続する必要があります。

RST、EA図

  • * PSENまたはプログラムストアイネーブル(ピン番号29)*-これはアクティブローピンでもあります。つまり、ローパルスを印加した後にアクティブになります。 これは出力ピンであり、8031ベースのEAピンとともに使用されます(つまり、 ROMLESS)外部ROMにプログラムコードを保存できるシステム。
  • * ALEまたは(アドレスラッチイネーブル)*-これは出力ピンであり、アクティブHighです。 特に8031 ICが外部メモリに接続するために使用されます。 P0ピンをアドレスバスとして使用するかデータバスとして使用するかを決定するときに使用できます。 ALE = 1の場合、P0ピンはデータバスとして機能し、ALE = 0の場合、P0ピンはアドレスバスとして機能します。

I/Oポートとビットアドレス指定能力

8051のコードを記述しているときに、8051の最も広く使用されている機能です。 8ビット全体ではなく、ポートの1または2ビットのみにアクセスする必要がある場合があります。 8051は、ポートの個々のビットにアクセスする機能を提供します。

シングルビット方式でポートにアクセスする際、構文「SETB X」を使用します。 Y "(Xはポート番号(0〜3)、YはビットD0〜D7のビット番号(D0はLSB、D7はMSB)) たとえば、「SETB P1.5」はポート1の上位ビット5を設定します。

次のコードは、ビットP1.2を連続的に切り替える方法を示しています。

AGAIN:
SETB    P1.2
ACALL   DELAY
CLR     P1.2
ACALL   DELAY
SJMP    AGAIN

シングルビット命令

Instructions Function
SETB bit Set the bit (bit = 1)
CLR bit clear the bit (bit = 0)
CPL bit complement the bit (bit = NOT bit)
JB bit, target jump to target if bit = 1 (jump if bit)
JNB bit, target jump to target if bit = 0 (jump if no bit)
JBC bit, target jump to target if bit = 1, clear bit (jump if bit, then clear)