月別アーカイブ: 2017年7月
MPASM Technic – PPS Lockの動き
PIC18FではPICのPinにハード機能を割り付けるPPSという機能がある。 PPS機能にはLOCK機構があり、セットするとPPS機能が変更ができなくなる。 PPSをLockする場合、マニュアルではシーケンスがあると記 … 続きを読む
MPASM Technic – SPIが受信できない
開発途中でSPIやEUART(Serial COMM)が正しく動作しない状態に陥った。 結果であるが、PMD0のSYSCMDは注意が必要である。 SPIやEUARTなど周辺モジュールはこのビットがOFFであっても動いてい … 続きを読む
MPASM Technic – Tblrdが動作しない
PIC18Fではプログラムコード内に置いたデータを連続して読み出せる機能がついた。 従来データはサブルーチンのリターン戻り値としてわたす命令のため、操作しづらく、メモリ消費も問題であった。 PIC18Fでは新たなレジスタ … 続きを読む
MPASM Technic – マクロ
個人の好みとなりますが、アセンブラコード中でどうしても使いづらい部分がいくつかあり、一部マクロで対応しています。 マクロは基本的に以下のよう書式です。 Label macro param1 {, param2… … 続きを読む
MPASM Technic – スタック
PIC18Fでは(PIC12やPIC16など比べ)プログラムによるスタック操作が追加されています。 サブルーチン呼び出しの際にPCがスタックにPUSHされ、ReturnでPOPされます。 これまでPICではプログラムから … 続きを読む
MPASM Technic – 高速な左シフト
一般的に2倍とか4倍などを計算する際、左シフトを用いるが、PIC18FxxK40では高速に演算できます。 これは、8ビット系では珍しい掛け算のMULLW命令が実装されたことによります。 特筆すべきはMULLW命令は1イン … 続きを読む
MPASM Technic – 短いWait挿入
ハード制御等で、タイミングを取るためにCPUに対してなるべく正確で短いWaitを入れたい場合、NOPなどの方法があるが、なるべくコード数を減らしたい場合以下のコードはいかが? 最大3ワード(PIC18Fの1命令は16bi … 続きを読む
MPASM Technic – リテラルの引き算
PIC18FのSUBLW命令によるリテラル[固定数値]の引き算は、 数値-WREGとなる。 一般的な引き算では、WREG-固定数値 のほうが使いやすいのだが、このようなCPUニーモニックはない。 解決方法として、リテラル … 続きを読む