目次>5章 第2ステップ(色々な実験)>EEPROMを使う>ソース
更新日2007.11.4
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ============================== ; clock:20MHz ; PIC16F84A ; PORTA: 2 PBS1 押す毎にPORTBを+1 ; 3 PBS2 EEPROMの0番地の内容を読み込みPORTBに出力 ; 4 PBS3 PORTBの内容をEEPROMの0番地に書き込む ; PORTB: 0-7 LED ; ; LIST P=PIC16F84A ;使用するPICを16F84Aと定義する INCLUDE P16F84A.INC ;設定ファイルp16f84a.incを読み込む __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF CBLOCK 0Ch tm02cnt ;0.2mSカウンタ tm25cnt ;25mSカウンタ onoff ENDC ORG 0 ; ============================== 初期処理 ======================= init BSF STATUS,RP0 ;■バンク1に切替え CLRF TRISB ; ファイルレジスタTRISBをクリア(0)⇒PORTBは出力ビット MOVLW 0FFh ; MOVWF TRISA ; RA0-4は入力 BCF STATUS,RP0 ;■バンク0に切替え CLRF PORTA ; PORTAをクリア(0) CLRF PORTB ; PORTBをクリア(0) CLRF onoff ; ============================== メイン ========================= main BTFSS PORTA,2 ;PBS1 on? (L) CALL pbs1 BTFSS PORTA,3 ;PBS2 on? (L) CALL pbs2 BTFSS PORTA,4 ;PBS3 on? (L) CALL pbs3 BTFSC PORTA,2 ;PBS1 off? (H) CALL pbs1F BTFSC PORTA,3 ;PBS2 off? (H) CALL pbs2F BTFSC PORTA,4 ;PBS3 off? (H) CALL pbs3F GOTO main ; ============================== PBS#1 on ======================== pbs1 BTFSC onoff,1 ;押された状態が続いても何もしない GOTO pbs19 CALL tim25 ;25mS wait BTFSC PORTA,2 ;PBS1 on? (L) GOTO pbs19 ; no BSF onoff,1 ;ON確定 INCF PORTB,F ;PORTBに+1する pbs19 RETURN ; ============================== PBS#2 on ======================== pbs2 BTFSC onoff,2 ;押された状態が続いても何もしない GOTO pbs29 CALL tim25 ;25mS wait BTFSC PORTA,3 ;PBS2 on? (L) GOTO pbs29 ; no BSF onoff,2 ;ON確定 MOVLW 00h ;データエリアのアドレス指定 MOVWF EEADR ;アドレスをEEADRへセット BSF STATUS,RP0 ;■バンク1に切替え BSF EECON1,RD ;読み出し開始 BCF STATUS,RP0 ;■バンク0に切替え MOVF EEDATA,W ;Wレジスタにデータ取り出し MOVWF PORTB ;EEPROMの先頭の内容をPORTBに表示 pbs29 RETURN ; ============================== PBS#3 on ======================== pbs3 BTFSC onoff,3 ;押された状態が続いても何もしない GOTO pbs39 CALL tim25 ;25mS wait BTFSC PORTA,4 ;PBS3 on? (L) GOTO pbs39 ; no BSF onoff,3 ;ON確定 MOVLW 00h ;データエリアのアドレス指定 MOVWF EEADR ;アドレスをEEADRへセット MOVF PORTB,W ;PORTBの内容を MOVWF EEDATA ; EEDATAにセット BSF STATUS,RP0 ;■バンク1に切替え BSF EECON1,WREN ;EEPROM書き込み許可 MOVLW 55H ; MOVWF EECON2 ; MOVLW 0AAH MOVWF EECON2 BSF EECON1,WR ;EEPROM書き込み開始 pbs3_LP BTFSC EECON1,WR ;EEPROM書き込み完了? GOTO pbs3_LP BCF STATUS,RP0 ;■バンク0に切替え pbs39 RETURN ; ============================== PBS#1 off ======================== pbs1F BCF onoff,1 RETURN ; ============================== PBS#2 off ======================== pbs2F BCF onoff,2 RETURN ; ============================== PBS#3 off ======================== pbs3F BCF onoff,3 RETURN ; ============================== 25msタイマ ===================== tim25 MOVLW 07ch MOVWF tm25cnt tim25lp CALL tim02 DECFSZ tm25cnt,F GOTO tim25lp RETURN ; ============================== 0.2msタイマ ===================== tim02 MOVLW 0f9h MOVWF tm02cnt tim02lp NOP DECFSZ tm02cnt,F GOTO tim02lp RETURN END ; =========================== ここまで ===============================