LIST P=16F84A ;マイコンはPIC16F84A
INCLUDE P16F84A.INC ;インクルードファイルを指定
INCLUDE P16F84A.INC ;インクルードファイルを指定
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;コンフィギュレーションビットの設定
;水晶(HS)発振、ウォッチドッグタイマはOFF
;パワーアップタイマはOFF、コードプロテクトはOFF
;---------------------------------------------------------------
;プログラム開始
;コンフィギュレーションビットの設定
;水晶(HS)発振、ウォッチドッグタイマはOFF
;パワーアップタイマはOFF、コードプロテクトはOFF
;---------------------------------------------------------------
;プログラム開始
ORG 0x000 ;リセットベクタ(プログラムアドレス0番地)
goto START ;STARTへ跳ぶ
nop
nop
nop
ORG 0x004 ;割り込みベクタ(プログラムアドレス4番地)
retfie ;割り込みから復帰
nop
ORG 0x006
START
call PORT_INIT ;ポートの初期設定
MAIN_LOOP
btfsc PORTA,0 ;RA0のスイッチ1をチェック
call KEY_CHEK ;ON(1)ならKEY_CHEKの処理へ
goto MAIN_LOOP
;--------------------------------
KEY_CHEK
bcf STATUS,C
btfss PORTB,2
rlf PORTB,F
KEY_LOOP
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
btfsc PORTA,0 ;RA0のスイッチ1をチェック
goto KEY_LOOP ;ON(1)ならKEY_CHEKの処理へ
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
return
;--------------------------------
PORT_INIT
bsf STATUS,RP0 ;バンク1に切り替え
movlw 0FFh ;ポートAを入力モードにセット
movwf TRISA ;ポートAのモード設定
clrf TRISB ;ポートBを出力モードに設定
bcf STATUS,RP0 ;バンク0に切り替え
movlw 01h
movwf PORTB
return
;--------------------------------
end
goto START ;STARTへ跳ぶ
nop
nop
nop
ORG 0x004 ;割り込みベクタ(プログラムアドレス4番地)
retfie ;割り込みから復帰
nop
ORG 0x006
START
call PORT_INIT ;ポートの初期設定
MAIN_LOOP
btfsc PORTA,0 ;RA0のスイッチ1をチェック
call KEY_CHEK ;ON(1)ならKEY_CHEKの処理へ
goto MAIN_LOOP
;--------------------------------
KEY_CHEK
bcf STATUS,C
btfss PORTB,2
rlf PORTB,F
KEY_LOOP
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
btfsc PORTA,0 ;RA0のスイッチ1をチェック
goto KEY_LOOP ;ON(1)ならKEY_CHEKの処理へ
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
nop ;ウェイト4us
return
;--------------------------------
PORT_INIT
bsf STATUS,RP0 ;バンク1に切り替え
movlw 0FFh ;ポートAを入力モードにセット
movwf TRISA ;ポートAのモード設定
clrf TRISB ;ポートBを出力モードに設定
bcf STATUS,RP0 ;バンク0に切り替え
movlw 01h
movwf PORTB
return
;--------------------------------
end
このソースファイルのオペランドを可能な限り数値のみで表してみた。
LIST P=16F84A
INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;---------------------------------------------------------------
;プログラム開始
ORG 0x000
goto 0x006
nop
nop
nop
ORG 0x004
retfie
nop
ORG 0x006
call 0x01A
btfsc 0x005,0
call 0x00A
goto 0x007
;--------------------------------
bcf 0x003,0
btfss 0x006,2
rlf 0x006,1
nop
nop
nop
nop
nop
btfsc 0x005,0
goto 0x00D
nop
nop
nop
nop
nop
return
;--------------------------------
bsf 0x003,5
movlw 0x0FF
movwf 0x085
clrf 0x086
bcf 0x083,5
movlw 0x001
movwf 0x006
return
;--------------------------------
end
INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;---------------------------------------------------------------
;プログラム開始
ORG 0x000
goto 0x006
nop
nop
nop
ORG 0x004
retfie
nop
ORG 0x006
call 0x01A
btfsc 0x005,0
call 0x00A
goto 0x007
;--------------------------------
bcf 0x003,0
btfss 0x006,2
rlf 0x006,1
nop
nop
nop
nop
nop
btfsc 0x005,0
goto 0x00D
nop
nop
nop
nop
nop
return
;--------------------------------
bsf 0x003,5
movlw 0x0FF
movwf 0x085
clrf 0x086
bcf 0x083,5
movlw 0x001
movwf 0x006
return
;--------------------------------
end
命令のアドレスやdestの番号について理解して、そのようにできたのだ。