PIC 25:TIMER 1 の動作実験


Timer1も一度は作動させてみたい。

 という事で取りあえず「動くことを確認して置きたい」と思い実験してみました。基本的にTimer 0と同じです。16BitのTimer/Counterでそれに1:1−1:8までのプリカウントがあり、こちらは選択出来ます。
 T1CONレジスタの設定で出来ます。細かい設定が並んでいますが、これらを使ってTimer1をコントロールします。

[BLOCK DIAGRAM]
---------------------------------------------------------------------------------------
[TIMER1 BLOCK DIAGRAM]
[T1CON REGISTER]
[これれは"Microchip Technology Inc"のマニアル(PIC16F818/819Data Sheet)から引用しました。詳しくは同社のsiteから!]

タイマ/カウンタで内蔵発振から16Bitの設定が出来、各種の時間が作れます。カウンタとして使うにはT1CKI端子を使って外部の信号を受けます。これらも本当は実験しておくと良いのですが、問題が出てから考えてみたいと思います。

割り込み作動
 今回は割り込みを使いませんが(やり方はほぼ同じ)、TMRIFとTMRIE(0x8C)の設定をするとコントロール出来ます。このFとEの違いに注意!、FはフラッグでEはイネーブル(私は何故かエナーベルと読んでいます?)で割り込み許可です。
 外の割り込みと同じで、設定すると[0x04]アドレスからスタートします。

1.TMRIEをセットする。
2.TIMER1ON(bit0)をセットするとカウンタが動作を始める。
3.Timer1がオーバーフロする。
4.TMRIFが自動でセットされ、割り込みが実行される。
5.アドレス4からスタートする。必要ならTIMER1ONをクリヤして止める。 
6.割り込みプログラムを実行したら、そのプログラム内でTMRIFをクリヤしておく事。そのままだと、また割り込みが発生する!
7.終了したらT1OSCENをクリヤして節電の為、電源をShut-offさせる。

 Timer1は16bit(TMR1H+TMR1L:0x0f/0x0e)あるので、その範囲内で利用出来る。割り込みの所で次のTimerの時間を入れれば割り込みの時間を設定出来、TIMER1ONでスタートさせれば良い。

 TMR1CS=0でタイマ、=1でカウンタとなる。外部の信号を数えたい時に使う。

 Timer0のプリスケラは8bitですが読み出せない。Timer1は全体で16Bitあって読み出せるので何かと使い道があるかも・・・。
 Timer2は8bitなのでゆっくりとした物はカウントし難いです、でも良く見ると1:16と1:16があります、これを使うと飛び飛びの16bit(1-65535)カウントやタイマとして利用出来ます。

2007/MAY/5

;LED ON OFF
;2007	4/27 Ver2
;	M.KIKUCHI

list	 P=PIC16F819	;
include	"P16F819.inc"	;
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF 
& _BODEN_ON &_INTRC_IO & _LVP_OFF 
;--------------------------------------------
	org 0
	goto	begin
begin
	call	IOPORT		;
	movlw	B'00110001'	;
	movwf	T1CON		;TIMER1 CONTROL REGISTER
b2
	btfss	PIR1,TMR1IF	;check flag
	goto	$-1
	bcf	PIR1,TMR1IF	;clear flag
	movlw	0x08		;LED position
	xorwf	PORTB,F		;on-off
	goto	b2		;loop
;--------------------------------------------
IOPORT
	BANKSEL	PORTA 		; select bank of PORTA
	clrf	PORTA 		; Initialize PORTA by
				; clearing output
	banksel	ADCON1		;Bank1
;0+111 = 8 MHz (8 MHz source drives clock directly)
;110 = 4 MHz 101 = 2 MHz 100 = 1 MHz
;011 = 500 kHz 010 = 250 kHz 001 = 125 kHz
;000 = 31.25 kHz (INTRC source drives clock directly)
	movlw	0x60		;INTRC=4MHz
	movwf	OSCCON		;set
	movlw	0x06		;Configure all pins
	movwf	ADCON1		; as digital inputs
	clrf	TRISA		;0=output 1=Input
	clrf	TRISB		;all output
	banksel	PORTB
	movlw	B'00000001'	;LED OFF
	movwf	PORTB
	return		

	end
---------------------------------------
 このプログラムは単にLEDの点滅だけです(PIC12の基板を使用:右側)。基板はそのまま利用しています(プログラムを書き込んで挿して動作の確認をしただけです)。

 PORTB-3につながっているLEDの点滅です、4MHzで約1秒の点滅です。(65535*8*1μS)
 ポートの端子をXORで毎回逆転(+-+-…)させています。
----------------------------------------

[もどる]もどる  [MAIN MENU

inserted by FC2 system