0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Intel8051の子孫によるLチカと、CPUのステップ実行

Posted at

経緯

 アリエクで自分で組み立てる(半田付け)電卓のDIY.KITを購入した。
 CPUとしてSTC15W408AS-35i-28が付いて居た。
 Intel8051の子孫(派生型)だが、普通のDIPサイズ。
 ◆◆◆ 大きくてはんだ付けが楽だな ◆◆◆
 DIPサイズで商売になるのかな、之は呼び水として教育目的なのかな。

8051とSTC15W408について

 8051はIntelが1980年に売り出した、組み込み用8ビットワンチップマイコン。
 RAM(128B),MASK,ROM(4KB),カウンタ(2),シリアル(1)を有する。
 クロック12MHzを与えて、1MIPS程度の性能を出す。
 ビット操作が高速なのが特徴で、売れに売れたらしい。
 之を真似て出来た子孫は、全世界で千種類以上存在するとか。
 Intelが正当性を認知しているかは不明だが。

 STC15W408もこの子孫に当たり、ソフトはほぼ変更せず其の儘で動作する。
 ハードも基本部分は踏襲されており、新機能を追加したような構成を取っている。
 このチップは中国の宏晶社の製品だが、容量違いなど数えると此処だけで数百種有る模様。
 オリジナルより性能は向上しており、売り文句では7~12倍高速だとしてる。
  ※クロックで3倍、更にマシンサイクルで3倍程度に高速化が図られている。
   サイクルだけで12倍に向上している製品も存在する。

 日本ではマイナーな様で応用例も少ない、一応密林でも売っていた。
 アリエクには多数出品されており、其れなりにメジャーなような。
 かの国では、この様なチップを使ったマイコン教育がされているのだろうか。

開発環境(ハード)

 ◇チップ
  DIP型のSTC15W408、16/20/28ピンと異なってもIOの数が異なるだけの筈。
 ◇USBシリアル
  チップへの書き込みに使用する。電源に使える5V出力付きが望ましい。
   ※書き込みに専用ハードは不要。但し電源の操作が必要。

接続

 USBシリアルのTXをチップのRXに、RXをその逆に接続し、5Vも接続する。
 DIP28の場合は下記となる。
 シリアル チップ
 TX   15ピン(P3.0/RX)
 RX   16ピン(P3.1/RXD)
 5V   12ピン(Vcc)
 GND  14ピン(Gnd)

開発環境(ソフト)

 ◇コンパイラ
  SDCC(Small Device C Compiler)
   ※sourceforgeの物を使用している。
 ◇書き込みソフト
  シンセン国芯人工智能有限公司より「AIアプリ-ISP-V6.95N」を落す。
   ※何方もちゃんと動いて居るが、ご使用は自己責任で。

Lチカ

 チップをUSBシリアルに接続。
 チップのP1.0(DIP28なら、3ピン)にLEDを接続。
  ※LEDのカソード側(足の短い方)を繋ぎ、アノード側は抵抗(1~5K)を介してVCCへ。
  写真のLEDは抵抗内蔵しており電源に直結可。
Image4.jpg

 LED点滅ソフトをダウンロード。
 _cmd.batの書き換え。
  ※PATH = ~ binの間を、sdccを格納した位置に書き換え。
 _cmd.batを実行すると、led.hexが出来上がる。
 書き込みソフト(ISP)を起動し、設定を変更。
  ※MCP TypeをSTC15W408ASに。
   Scna PortをUSBシリアルを接続した番号に。
   Open Code Fileでled.hexを指定。
Image1.jpg
 左下のDowmload/Programを押す。Stopが押せるようになる。
Image2.jpg
 チップの電源を一旦切り、再度投入。※ここ重要。
 右下の表示が流れ、Completeが表示されたら完了。LEDは点滅している筈。

プログラムのステップ実行

 ◇前説
 ステップ実行では、8051の機械語(アセンブラ)レベルのステップ実行が可能。
 但し下記のような制限を有する。
  ステップ実行するプログラムは、デバッグプログラム(setp.c)と同時にコンパイル。
  実行中のプログラムの書き換えは出来ない。
  デバッグプログラムが使用しているリソースにアクセスした場合、デバッグが狂う。
 ◇操作方法
 step.cの中に、デバッグするプログラムを関数として書込む。
  ※関数名dbgprg()
 sdccでコンパイルし、step.rstを見てデバッグ部分を確認する。
  ※デバッグプログラム例
Image6.jpg
 step.hexを書込み、ターミナル(teraterm等)を起動する。
 (Enter)キーを押すと、プロンプト(">")が現れる。
 コマンド"TT"を入力すると、実行前の各レジスタが表示される。
  ※bt=bits,a=acc,b=b,dl=dpl,dh=dph,sw=pswの略。
 レジスタ変更コマンドは用意して無いので、メモリ書き換えコマンドで行う。
  ※各レジスタは変数dbgad(0x40)以降に配置。
 コマンド"T"で、一ステップ進む。
 コマンド"Tnn"で、nnステップ進む。
Image3.jpg
 ◇補助コマンド
 Dnnnn nnnn番地以降を128バイト表示
 Mnnnn nnnn番地を書き換え(.で終了)。

ステップ実行の仕掛け

 ステップ実行は次のような仕掛けで行っている。
 1.モニター同に使用したレジスタをセーブ、デバッグ用にレジスタをセット。
 2.起動後に数サイクルで割り込みが入るようにして、タイマースタート。
 3.デバッグにジャンプ、直後に割り込みが発生。
 4.デバッグ用レジスタをセーブして、モニターレジスタをロード。
  ※タイマーで利込みが入れば、どんなマイコンでも実現可能(元ネタ有り)。
   とは言っても信号が外から見えないから、動かないと原因不明だが。

感想

 SDCCさえ動けば動作させる事が出来る。Arduinoよりプログラミングの敷居は低いとも言える。
 実は8051の機械語(アセンブラ)は良く知らないので、SDCCの出力結果を参考にして弄っていた。
 販売元のチップのレパートリーは豊富であり、8051の子孫の需要は十分に有るのだろうが、
 32ビットの安価なチップも出てきており、世代交代しているのかも。
 マニュアルの中にもチップ単価が0.1元単位で書かれており、競争が厳しいのだろう。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?