月別アーカイブ: 2017年7月

MPASM Technic – PPS Lockの動き

PIC18FではPICのPinにハード機能を割り付けるPPSという機能がある。 PPS機能にはLOCK機構があり、セットするとPPS機能が変更ができなくなる。 PPSをLockする場合、マニュアルではシーケンスがあると記 … 続きを読む

カテゴリー: MPASM, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | タグ: , , | MPASM Technic – PPS Lockの動き はコメントを受け付けていません。

MPASM Technic – SPIが受信できない

開発途中でSPIやEUART(Serial COMM)が正しく動作しない状態に陥った。 結果であるが、PMD0のSYSCMDは注意が必要である。 SPIやEUARTなど周辺モジュールはこのビットがOFFであっても動いてい … 続きを読む

カテゴリー: MPASM, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | タグ: , , , | MPASM Technic – SPIが受信できない はコメントを受け付けていません。

MPASM Technic – Tblrdが動作しない

PIC18Fではプログラムコード内に置いたデータを連続して読み出せる機能がついた。 従来データはサブルーチンのリターン戻り値としてわたす命令のため、操作しづらく、メモリ消費も問題であった。 PIC18Fでは新たなレジスタ … 続きを読む

カテゴリー: MPASM, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | タグ: , , , , , , | MPASM Technic – Tblrdが動作しない はコメントを受け付けていません。

MPASM Technic – マクロ

個人の好みとなりますが、アセンブラコード中でどうしても使いづらい部分がいくつかあり、一部マクロで対応しています。 マクロは基本的に以下のよう書式です。 Label macro param1 {, param2&#8230 … 続きを読む

カテゴリー: MPASM, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | MPASM Technic – マクロ はコメントを受け付けていません。

MPASM Technic – スタック

PIC18Fでは(PIC12やPIC16など比べ)プログラムによるスタック操作が追加されています。 サブルーチン呼び出しの際にPCがスタックにPUSHされ、ReturnでPOPされます。 これまでPICではプログラムから … 続きを読む

カテゴリー: MPASM, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | タグ: , , | MPASM Technic – スタック はコメントを受け付けていません。

MPASM Technic – 高速な左シフト

一般的に2倍とか4倍などを計算する際、左シフトを用いるが、PIC18FxxK40では高速に演算できます。 これは、8ビット系では珍しい掛け算のMULLW命令が実装されたことによります。 特筆すべきはMULLW命令は1イン … 続きを読む

カテゴリー: MPASM, MPLAB X IDE, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | タグ: , | MPASM Technic – 高速な左シフト はコメントを受け付けていません。

MPASM Technic – 短いWait挿入

ハード制御等で、タイミングを取るためにCPUに対してなるべく正確で短いWaitを入れたい場合、NOPなどの方法があるが、なるべくコード数を減らしたい場合以下のコードはいかが? 最大3ワード(PIC18Fの1命令は16bi … 続きを読む

カテゴリー: MPASM, MPLAB X IDE, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | MPASM Technic – 短いWait挿入 はコメントを受け付けていません。

MPASM Technic – リテラルの引き算

PIC18FのSUBLW命令によるリテラル[固定数値]の引き算は、 数値-WREGとなる。 一般的な引き算では、WREG-固定数値 のほうが使いやすいのだが、このようなCPUニーモニックはない。 解決方法として、リテラル … 続きを読む

カテゴリー: MPASM, MPLAB X IDE, PIC, PIC18F, PIC18F46K40, PIC18FxxK40 | MPASM Technic – リテラルの引き算 はコメントを受け付けていません。