16F88を使う!
以前資料から16F88があることを知り、これからはこのICを使うかも知れないと秋葉原へ行った時購入して来ました。
このPICはA/Dコンバータが入った、16F819とほとんで同じ機能を持っていますが少しSOFTが異なりコントロールが変わって少し煩わしいです。初期設定が結構あって面倒です、これもなれないと使いこなせないかも知れません。
A/Dコンバータがないとこれからは何かと使いずらいと思って16F819を使い出したのですが、ほとんど同じ値段で売られているのでこれからの主流は16F88になるかもしれません!メーカーの製造コストは、ほとんど同じなので近い内に16F88に変るかもしれません。あまり同じようなのを出されてもユーザーは困りますが・・・。ポイントはあまり買い込まない事が必要かもしれません。
写真には抵抗が付いていますが少ししか使っていません。
[Step 1] LEDの点滅
16F88が動くのか!動くはずですが実際にこの手で試さないと不安です。そこで最も簡単なLEDの点滅から始めることにしました。
プログラムは次の通りです。
初期設定は一々説明した方が良いのですが、今回はパスします。1:LEDの点灯 :メインクロックは4MHzの内部発振です。
2:待ち時間(100mSec)
3:LEDの点灯
4:待ち時間(100mSec)
5:1へ戻るこれでLEDが点滅すればI/Oの設定が正常なのが分かります、スタートは大事です。
[Step 2] LEDの点滅
ほとんど同じです、コマンドxorを使ってI/Oポートを毎回逆にしてLEDのON-OFFします。
回路は同じでSoftの一部を変更します。
[Step 3] LEDの点滅
ほとんど同じですが、WAITではなくTimer2を使ってLEDのON-OFFします。
回路は同じでSoftの一部を変更します。
Step_1 Step_2 & Step_3 ;PIC 16F88 ;2007/8/20 BY M.Kikuchi ;Step_1 単純タイマを使ってLEDのON-OFF ;ポイントは16F88の設定が動くかの確認や内部発振の設定等 ;基本設定を確認しておく。 ;後はTimerをプログラムで作って、単純にLEDの点滅をさせている。 ;2007/8/20 BY M.Kikuchi ;----------------------------------------- LIST P=PIC16F88 INCLUDE "P16F88.INC" __CONFIG 0x2007,0x3f50 __CONFIG 0x2008,0x3ffc ;----------------------------------------- cnt1 equ 0x30 ;for Wait cnt2 equ 0x31 ;for Wait ;----------------------------------------- org 0 begin call INITA LOOP call WAITORG movlw 0x01 ;LED OFF movwf PORTB call WAITORG movlw 0x02 ;LED ON movwf PORTB goto LOOP WAITORG ;100mSec Timer movlw d'100' movwf cnt1 ; W2 call WAIT1M decfsz cnt1,F goto W2 return WAIT1M ;1mSec movlw 0xff movwf cnt2 W1 nop decfsz cnt2,F goto W1 ;255*4=1020uS return ; INITIALIZING PORT INITA BANKSEL PORTA ; select bank of PORTA CLRF PORTA ; Initialize PORTA by ; clearing output data latches BANKSEL ANSEL ; Select Bank of ANSEL MOVLW 0x00 ; Configure all pins MOVWF ANSEL ; as digital inputs(PIC16F88 DEVICES ONLY) MOVWF TRISB ; Set RB<7:0> as output MOVLW 0xFF ; Value used to initialize ; data direction MOVWF TRISA ; Set RA<7:0> as inputs movlw 0x60 ;INTRC=4MHz movwf OSCCON ;set BANKSEL PORTB ; movlw 0x02 ;'00000010'LED-on set movwf PORTB ; return ;------------------------------------------ end ;PIC 16F88 ;2007/8/23 BY M.Kikuchi ;Step_2 xorを使ってLEDのON-OFFをする。PORTを逆にする方法 ;シュミレータ上で動作した。 LOOP ;LED ON-OFF-ON-... movlw 0x03 ;2Bit [PortB change] xorwf PORTB,F call WAITORG ;102.8mSec goto LOOP ----------------------------------------------------- ;PIC 16F88 ;2007/8/23 BY M.Kikuchi ;Step_2 xorを使ってLEDのON-OFFをする。 ;シュミレータ上で動作した。 LOOP ;LED ON-OFF-ON-... movlw 0x03 ;2Bit [PortB change] xorwf PORTB,F call WAITORG ;102.8mSec goto LOOP ;----------------------------------------------------- ;----------------------------------------------------- ;Step_3 xorを使ってLEDのON-OFFをする。 ;Timer2を使う 2007/9/1 動作した。 ; ; プログラムで時間を作るのではなくTimer2を使って動作させた。 ; 以前16F819で実験したのでそのまま使った。 ; ICを変更すると細かい点で異なり確認が必要で面倒。 ; Intclock=4MHz begin call INITA movlw 0x7f ;Post=1/16 ON Presacle=1/16 movwf T2CON B2 ;LED ON-OFF-ON-... btfss PIR1,TMR2IF ;check goto $-1 bcf PIR1,TMR2IF ;clear flag movlw 0x01 ;PORTB LED xorwf PORTB,F goto B2 ;-----------------------------------------------------
[Step 4] LEDの点滅
[Step 3]と同じですが割り込みをさせ、メインプログラムを自由に使えるようにします(今回は実験で使っていません、B2で無限ループ)。割込みプログラムでLEDの点滅をさせます。Timerの関係で点滅時間が少し短くなっています。
割り込みをさせる為また少し設定が増えていますが、予定通り作動しているようです。2007/SEP/8
Step_4 ;PIC 16F88 ;2007/8/23 BY M.Kikuchi ;Step_2 xorを使ってLEDのON-OFFをする。 ;Step_3 9/1 xorを使ってLEDのON-OFF Timer2を使う ;Step_4 9/3 Timer2と割込みを使う ;----------------------------------------- LIST P=PIC16F88 INCLUDE "P16F88.INC" __CONFIG 0x2007,0x3f50 __CONFIG 0x2008,0x3ffc ;----------------------------------------- org 0 goto begin org 4 movlw 0x03 ;LED ON-OFF-ON-... xorwf PORTB,F bcf PIR1,TMR2IF ;clear flag retfie begin call INITA movlw 0x7f ;Post=1/16 ON Presacle=1/16 movwf T2CON bsf INTCON,GIE ;Interupt on bsf INTCON,PEIE ; B2 goto $-0 ;LOOP ; INITIALIZING PORTA INITA BANKSEL PORTA ; select bank of PORTA CLRF PORTA ; Initialize PORTA by ; clearing output data latches BANKSEL ANSEL ; Select Bank of ANSEL MOVLW 0x00 ; Configure all pins MOVWF ANSEL ; as digital inputs(PIC16F88 DEVICES ONLY) MOVWF TRISB ; Set RB<7:0> as output MOVLW 0xFF ; Value used to initialize ; data direction MOVWF TRISA ; Set RA<7:0> as inputs movlw 0x60 ;INTRC=4MHz movwf OSCCON ;set bsf PIE1,TMR2IE ;Interupt on ADD Ver 4 BANKSEL PORTB ; movlw 0x02 ;'00000010'LED-on set movwf PORTB ; return ;------------------------------------------ end
もどる [MAIN MENU]