[PR]テレビ番組表
今夜の番組チェック

第四章 続まぁとりあえずやってみよう

 
   では前回のプログラムが どんな意味なのかを説明します
   ・・・と思ったけど その前に予習
 
〜ポート〜

	
	LIST	P=PIC16F84A

	BSF	03H,5
	CLRF	06H
	BCF	03H,5

	MOVLW	0FFH
	MOVWF	06H

	END

 
   これですね これを実行すると PICにつながれた LEDがすべてついたわけです
   だからこれには 
   「PICの I/Oポート(電気を流したり止めたり出来る)の?ピンから ?ピンまで 全部電気を流す」
   というプログラムです
   
   つまり PICのI/Oポート(電気を流したり止めたりとできるピン) を出力にして 電気を流したわけですが
   6番ピン 8番ピン のように I/Oは全てバラバラになっているのではなく グループに分けられています
   それが ポート と呼ばれるものです

〜PIC16F84Aのポート〜

   PIC16F84A には ポートA と ポートB があります

   ポートAには ポートAの0(PICの17番ピン)〜ポートAの4(3番ピン) まで5つ

   ポートB はポートBの0(6番ピン)〜 7(13番ピン) の8つあります

   

   これがPIC16F84Aの外観と ピンの機能が書いてある図ですが

      RAというのはポートA(赤色の部分)

      RBというのはポートB(紫色の部分)です

   こんな風に I/Oは ポートA と ポートBに分かれています

     だからもし PICの6番ピン(RB0)に 電気を流したかったら

     「I/Oの6番ピンに電気を流す」 ではなくて

     「ポートBの0に電気を流す」 というプログラムになるわけです

 
   上のプログラムを実行した回路は LEDが8個ありましたが これは全て ポートBのピンにつながれています
   そしてプログラムで ポートBの全てのピンに 電気を流すようにしたので ポートBの全てのピンに電気が流れ
   LEDが全てついたわけです
 
   あと I/Oというぐらいですので この ポートA ポートB の全部のピンは
    電気を流したり止めたり出来る 出力モード
    電気が流れているのか 流れてないのか 調べられる 入力モード
   の2つのモードがあるわけですが このモードの切り替えも する必要があります
   だから ポートBを全部出力する(電気を流す)ためには
   ポートBを全部出力モードにする → 全てのピンを出力にして電気を流す
   というプログラムが必要なわけです
 
〜レジスタ〜
   では どうやって 出力モードにしたり ポートBの全てに電気を流したりするのかというと
   これには レジスタを操作します
   レジスタとは プログラムで使う メモリーのことです PICの中に入っています
   コンピューターにとってのメモ帳です
   レジスタはPICによりますが60個とか たくさんあります
   そのPICのレジスタ 1つ1つが全部2進数の8ビットです(2進数については 進数とは?で)
    つまり 10101 の0や1が 8こということです
    00000000 や11111111 や10001101 です こんな風に 0か1か のデータが8つしまえます
    ちなみに この1つのデータ 0か1かを 1ビット といいます これが8個あるので 8ビットです
    PICのレジスタは全部8ビットです
    ちょうど ポートBが8個なので 1ビットが 1つのピンになっています(分かりにくいけど 後で説明する)
 
〜レジスタへのアクセス〜

  バンク0 バンク1  
00 Indirect Addr Indirect Addr 00
01 TMR0 OPTION 01
02 PCL PCL 02
03 STATUS STATUS 03
04 FSR FSR 04
05 PORTA TRISA 05
06 PORTB TRISB 06
07     07
08 EEDATA EECON1 08
09 EEADR EECON2 09
0A PCLATCH PCLATCH 0A
0B INTCON INTCON 0B
0C 凡用レジスタ    
・・・      
4F 凡用レジスタ    

   これがPIC16F84A のレジスタ一覧です
   レジスタには STATUS のように 名前がついているのがありますが
   PICに 「STATUSの内容を00000000にして」といっても 分かりません
   レジスタは まるで引出しのいっぱいある机のようなものです
   上のレジスタの表を見れば 分かると思います
   だから 「消しゴムを取って」 といっても 消しゴムがどこに入っているのか分からなければ 消しゴムは取れません
   だから 「上から3番目の引き出しにある 消しゴムを取って」 と場所をいわなければなりません
 
   同じようにレジスタも STATUS と名前はついていても これは人間がつけた名前なのでPICにはわかりません
   レジスタは 引出しがたくさんある と言いましたので これも消しゴムの時みたいに 「上から3番目」のように
   場所を教える必要があります この場所が アドレス と言うものです
   上のレジスタ一覧表に レジスタには番号があると思います この番号がアドレスです
   たとえば STATUSは03 つまり 03 が STATUSのアドレス 住所なのです
 
   だから 「STATUSを00000000」といっても PICには ”STATUS” が分からない
   そこで 「03を00000000」 とすれば分かります
 
〜設定の出来るレジスタ〜
   このレジスタには ただデータを保存するのでなく ポートBの出力か入力かを設定したり
   実際にポートBから電気を流したり パソコンと通信するときの通信速度を決めたり
   などの 設定をするためのレジスタがあります

  バンク0 バンク1  
00 Indirect Addr Indirect Addr 00
01 TMR0 OPTION 01
02 PCL PCL 02
03 STATUS STATUS 03
04 FSR FSR 04
05 PORTA TRISA 05
06 PORTB TRISB 06
07     07
08 EEDATA EECON1 08
09 EEADR EECON2 09
0A PCLATCH PCLATCH 0A
0B INTCON INTCON 0B
0C 凡用レジスタ    
・・・      
4F 凡用レジスタ    

   これはPIC16F84Aのレジスタ一覧です
   いろいろな設定用のレジスタがあるのが分かると思います

〜バンク(Bank)〜

   レジスタは バンク0と バンク1の2種類に分けられています(PIC16F84Aでは)

    バンク1のレジスタを読み書きしたいときには プログラムで バンク1に切りかえる必要があります

    そうすると バンク1のレジスタを読み書きできます そのかわり バンク0のレジスタには読み書きできなくなります

   このバンクの切り替えは STATUS というレジスタで出来ます

    STATUSレジスタの5ビット目がバンクの切り替えの設定ビットで 00000000 の赤色の部分で操作できます

   これが 00000000 と0なら バンク0。

        00100000 と1なら  バンク1を操作できるようになります

 
   ここで ポートBを 出力か 入力かに切り替える ものは バンク1にある TRISB です
   これの 0か1かで 出力か入力かを指定できます
   レジスタのビットは そのままポートのピンに対応してます

TRISB 7ビット 6ビット 5ビット 4ビット 3ビット 2ビット 1ビット 0ビット
ポートB ポートBの7 6 5 4 3 2 1 0

   なので TRISB の 7ビット目を 入力にすると ポートBの7が 入力モードになり
     ポートBの7に電気が流れているのかどうか 調べることが出来るようになります
   ちなみにTRISBは 0なら出力 1なら入力ですので
   TRISBを 00000000 と 全て0 にすると ポートBのピンは全て出力になります
 
   そして 実際に出力させるのは バンク0にある PORTBです
     TRISBで全て出力モードになっていても これで 出力させないと 電気は流れません
   これも PORTBの ビットと ポートBのピンは TRISB のように対応しています
   PORTBの 7ビットを 出力にすると ポートBのピン7に 電気が流れます
   ちなみに 1で出力 0で電気が流れなくなります
   だから PORTBを 00100100 とすると ポートBは 00100100 となる

  7ビット/7ピン 6 5 4 3 2 1 0
PORTB 0 0 1 0 0 1 0 0
ポートB 流れない 流れない 流れる 流れない 流れない 流れる 流れない 流れない

   のようになるわけです ポートBの全てのピンに電気を流したかったら
   PORTBを 11111111と 全て出力にすれば ポートBが全て出力になって電気が流れて LEDがつきます
 
〜まとめるとね〜
   つまり ポートBにつながれた LEDを全てつけるには
   TRISBで ポートBを出力にして PORTBで出力させる必要があります
   さらに バンクの切り替えをするので こうなります

その1 バンク1に切り替え(STATUSを 00100000 にする)
その2 TRISBを全て出力にする(00000000 にする)
その3 バンクを0に戻す(STATUSを 00000000 にする)
その4 PORTBを全て出力にする(11111111 にする)

   と こう言う風にすれば
   ポートBの全てに電気が流れ LEDが全部つくことになります
 

まとめ

ポート・・・ PICでI/Oをまとめるもので PIC16F84AにはポートAとポートBがある

       そして A も B も全てのピンが 入力モードと 出力モードの2つのモードがある

レジスタ・・・ PICの中にあって 03や06 4C などのように 数字で読み書きできるもの

        8ビットで 00000000 と データが保存できる(読んだり書きこんだり出来る)

        PIC16F84Aでは レジスタはバンク0とバンク1に分けられている

        レジスタはただデータを保存するのでなくて ポートの入出力のモード切り替えをしたりと

        専門の設定用のレジスタがある

        例えばポートBの入出力モードの切り替えは バンク1の 06にある TRISB

 

戻る ホームへ コウザへ 次へ