PICでCPUと対話している

CPUと対話する感じのことをしたかったので、PICでアセンブリを書きました。

asmを書いたのはこれが初めてです。1から16まで足し上げた結果をPORTCに出力するコードです。実機での動作を(テスターで)確認できました。実にプリミティブ。

普通に書いたコードをベースに、さらに変なインクルードレスプログラミングをしてみました。コンピュータと触れ合えた気がします。まだ脳ではPIC16F1命令セットの実行はできませんが。

ORG 0を入れたり、ANSELをクリアしないと出力されなかったり、16F1ではバンク切り替えに新しいMOVLB命令を使う(1命令でバンク切り替えできる)などといった知見がまったくなかったので手探りでしたが、とても勉強になりました。実はMOVLBも直接使う必要がなくて、BANKSEL PORTCのように疑似命令を使うとその品種で当該レジスタのあるバンクに切り替えてくれます。


__CONFIG 0x8007, 0xFFA4
ORG 0
RAMTOP
MOVLB 0x1
MOVLW b'00010010'
MOVWF 0x99
CLRF 0x8E
MOVLB 0x3
CLRF 0x18E
MOVLB 0x0
CLRF 0xE
CLRF 0x20
CLRW
CALC
INCF 0x20
ADDWF 0x20, 0
MOVWF 0xE
BTFSS 0x20, 4
GOTO CALC
LAST
GOTO LAST
END


#include "p16f1579.inc"
; CONFIG1
; __config 0xFFA4
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOREN_ON & _CLKOUTEN_OFF
; CONFIG2
; __config 0xDEFF
__CONFIG _CONFIG2, _WRT_OFF & _PPS1WAY_ON & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LPBOREN_OFF & _LVP_OFF
ORG 0
RAMTOP
MOVLB 0x1
MOVLW b'00010010'
MOVWF OSCCON
CLRF TRISC
MOVLB 0x3
CLRF ANSELC
MOVLB 0x0
CLRF PORTC
CLRF 0x20
CLRW
CALC
INCF 0x20
ADDWF 0x20, 0
MOVWF PORTC
BTFSS 0x20, 4
GOTO CALC
LAST
GOTO LAST
END

アセンブルされて書き込まれたメモリ上のデータです。なお、1命令が14bitなので、たぶんそのままではバイナリエディタでうまく見られません。バイナリエディタでのうまい見方を知りたいです。

たった16命令でプログラムが完結するなんですごい。もうちょっと実用的なプログラムを書いてみたいですが、実用性ならCで書けばいい話なんですよね。しかし、せめて電卓的なものくらいは作ってみたいなぁ

キャプチャ

カテゴリー: コンピュータ, 電気電子 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中