経緯
アリエクで自分で組み立てる(半田付け)電卓の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は抵抗内蔵しており電源に直結可。
LED点滅ソフトをダウンロード。
_cmd.batの書き換え。
※PATH = ~ binの間を、sdccを格納した位置に書き換え。
_cmd.batを実行すると、led.hexが出来上がる。
書き込みソフト(ISP)を起動し、設定を変更。
※MCP TypeをSTC15W408ASに。
Scna PortをUSBシリアルを接続した番号に。
Open Code Fileでled.hexを指定。
左下のDowmload/Programを押す。Stopが押せるようになる。
チップの電源を一旦切り、再度投入。※ここ重要。
右下の表示が流れ、Completeが表示されたら完了。LEDは点滅している筈。
プログラムのステップ実行
◇前説
ステップ実行では、8051の機械語(アセンブラ)レベルのステップ実行が可能。
但し下記のような制限を有する。
ステップ実行するプログラムは、デバッグプログラム(setp.c)と同時にコンパイル。
実行中のプログラムの書き換えは出来ない。
デバッグプログラムが使用しているリソースにアクセスした場合、デバッグが狂う。
◇操作方法
step.cの中に、デバッグするプログラムを関数として書込む。
※関数名dbgprg()
sdccでコンパイルし、step.rstを見てデバッグ部分を確認する。
※デバッグプログラム例
step.hexを書込み、ターミナル(teraterm等)を起動する。
(Enter)キーを押すと、プロンプト(">")が現れる。
コマンド"TT"を入力すると、実行前の各レジスタが表示される。
※bt=bits,a=acc,b=b,dl=dpl,dh=dph,sw=pswの略。
レジスタ変更コマンドは用意して無いので、メモリ書き換えコマンドで行う。
※各レジスタは変数dbgad(0x40)以降に配置。
コマンド"T"で、一ステップ進む。
コマンド"Tnn"で、nnステップ進む。
◇補助コマンド
Dnnnn nnnn番地以降を128バイト表示
Mnnnn nnnn番地を書き換え(.で終了)。
ステップ実行の仕掛け
ステップ実行は次のような仕掛けで行っている。
1.モニター同に使用したレジスタをセーブ、デバッグ用にレジスタをセット。
2.起動後に数サイクルで割り込みが入るようにして、タイマースタート。
3.デバッグにジャンプ、直後に割り込みが発生。
4.デバッグ用レジスタをセーブして、モニターレジスタをロード。
※タイマーで利込みが入れば、どんなマイコンでも実現可能(元ネタ有り)。
とは言っても信号が外から見えないから、動かないと原因不明だが。
感想
SDCCさえ動けば動作させる事が出来る。Arduinoよりプログラミングの敷居は低いとも言える。
実は8051の機械語(アセンブラ)は良く知らないので、SDCCの出力結果を参考にして弄っていた。
販売元のチップのレパートリーは豊富であり、8051の子孫の需要は十分に有るのだろうが、
32ビットの安価なチップも出てきており、世代交代しているのかも。
マニュアルの中にもチップ単価が0.1元単位で書かれており、競争が厳しいのだろう。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。