2019.4.16
前へ
次へ
ホームページトップへ戻る

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第35回]


●PIC16F57(2)

今回はPIC16F57のプログラムを書く上での注意点についてまとめておきます。

PIC16F57は16F87とか16F628などのミッドレンジのPICに比べて非常にシンプルです。
というか言い換えれば相当に原始的です。
見方によっては初心者向きとも言えるでしょう。
もっともPICの場合、アセンブラにはクセがありますから、初心者がPICのアセンブラを使うというのはちょいとハードルが高いかもしれません。

前回お見せしたPIC16F57のPINレイアウト図を見ていただければわかりますように、I/OポートのほかにはTimer0があるだけです。
参考までにPIC16F57のPINレイアウトを再掲します。

[出典]Microchip Technology Inc.PIC16F5X Data Sheet

それだけの機能しかないので、CONFIGの設定も簡単です。
今回のプログラムの場合、下記の2行で済みました。

   #include <p16f5x.inc>
   __CONFIG _CP_OFF & _WDT_ON & _HC_OSC

タイマーを使わずI/Oポートだけを使うなら初期設定もI/Oポートだけですから、実にシンプルです。
ところがのっけからそのI/Oポートの初期設定でこけてしまいました。
ミッドレンジのPICではI/Oポートの初期設定はTRISX(TRISA、TRISB、TRISC…)レジスタに方向を示す値を設定します。
具体的には

MOVLW 1F
MOVWF TRISB

のようにします。
で、そのように書いたところ、TRISBが「Symbol not defined」(定義されていない)というメッセージが出てエラーになってしまいました。

TRISBが無い???
まさかと思って、Data Sheetを確認してみたところ、確かにありません。

[出典]Microchip Technology Inc.PIC16F5X Data Sheet

それにしても実にシンプルなマップです。
たったこれだけしかありません。
なおユーザー用の汎用レジスタもBANK0には08H〜1FHの24個しかありません。
汎用レジスタはBANK1〜BANK3の各16個も使えますがBANK当たり16個ですから、余り凝った使い方には難があります。

余談でした。
本題に戻ります。
TRISレジスタが無いということになると、それでは一体どうやってI/Oポートの方向を設定するのでしょうか?
そこでまたまたPIC16F5XのData Sheetに目を通してみましたら、Instruction Setの中にTRISをみつけました。

[出典]Microchip Technology Inc.PIC16F5X Data Sheet

うーん。
レジスタではなくて命令なのか。
どうやって使うのかといいますと。

[出典]Microchip Technology Inc.PIC16F5X Data Sheet

  MOVLW 1F
  TRIS PORTB

のように使うのだそうです。
なるほど。
納得です。

それにしても命令数は少ないですねえ。

[出典]Microchip Technology Inc.PIC16F5X Data Sheet

Only 33 single−word instructions to learn(たった33の命令を覚えればいい)
なるほど。
ものは言いようであります。
でもまあ、確かにある意味、プログラミングは楽かもしれません。

さてそれで。
そのあたりの対策もしたお蔭でエラーも出なくなり無事Buildできましたので、PIC16F57に書いて、いよいよ動作テストです。
が。
動いてくれません。

こうなると大変です。
どこが悪いのか。
配線のミスとか、そもそも回路の設計ミスということもあり得ます。
それにプログラムのミスということも考えられます。

実は今回のシステムは全く性質の異なる3本のプログラムが動いています。
ひとつはこのところ書いておりますPIC16F57のプログラムです。
もうひとつはそもそものメインテーマでありますCPLD、EPM7128SLC84に書き込んだVHDLプログラムです。
そしてこれもそもそもはND80Zシステムのための7セグメントLED表示とキー入力のためのインターフェース回路ですから、当然ND80Zモニタプログラムにミスがあれば、やはりまともには動作しないことになります。
かくして、そのいずれに問題があるのか、あるいは複数のプログラムにまたがった問題なのか、さらにはそこにはハードもからんでいるのか、いないのか、それらを少しずつ絡まった糸をほぐすように検証しつつさぐっていかなければなりませんでした。
そしてやっとのことで発見した意外な原因とは?

安物の連載小説よろしく気を持たせつつ次回に続きます。

CPLD入門![第35回]
2019.4.16upload

前へ
次へ
ホームページトップへ戻る