PIC 33:LED @ LEDのON-OFFの実験


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

inserted by FC2 system