Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

TMR0を使った割り込みを試してみた


TMR0を使った割り込みを試してみた。

環境
PIC : PIC12F675
Compiler : mikroBASIC Pro version 5.40
Writer : PICKit3 + Handmade Adapter + PICKit3 Programmer
OS : Windows7 Pro 64BIT

新たに登場したのが
OPTION_REG = %00000111
OPTION_REGについて書き並べると以下の通り。
関係あるものも無いものも、影響無いものも含まれてるが、一応まとめておく。

OPTION_REG = /GPPU,INTEDG,T0CS,T0SE,PSA,PS2,PS1,PS0

/GPPU GPIOプルアップイネーブル
1=GPIOプルアップを使用しない
0=GPIOプルアップを使用する

INTEDG 割込みエッジ選択ビット
1=GP2/INTピンの立ち上がりエッジによる割込み
0=GP2/INTピンの立ち下がりエッジによる割込み

T0CS TMR0クロックソース選択ビット
1=GP2/T0CKIピンの入力
0=内部命令サイクルクロック

T0SE TMR0ソースエッジ選択ビット
1=GP2/T0CKIピンの入力がHighからLowでインクリメント
0=GP2/T0CKIピンの入力がLowからHighでインクリメント
TMR0用外部カウント入力ピンをT0CKIピンと呼び、PIC12F629, 675では、Pin5がそれに相当する

PSA プリスケーラ割り当てビット
1=プリスケーラはWDTへ割り当て
0=プリスケーラはTMR0へ割り当て

PS2-PS0 プリスケーラレート選択ビット
PS2-PS0 TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

T0IFはTMR0のカウント値が255から0に変化した瞬間に1になる。
T0IFを0に戻すのはプログラムで行う。
予めT0IFに0をセットして、T0IFが1に変化するのを監視していれば、TMR0の値が255から0に変化したのがわかる。

TMR0レジスタ
クロックが入力される毎に自動的に+1される。
値が11111111のときにクロックが入力されると00000000に戻る。
このときINTCONレジスタのbit22(T0IF)が自動的に1に変化する。
プログラムから読み書きが可能。


電源を入れると、1.5秒間隔でLEDが交互に点滅を始めるが、一定時間ごとに点滅間隔が50mSずつ減っていき、100mSになったら、あとはそのままの間隔で点滅を続ける。
というつもりだったが、実際には、内部のロックが速すぎて、というかプログラムでのウエイトが長すぎて、mLoopへ戻ってきたときにはすでにT0IFは1になっていてwhileのループを回る暇がまったくないという、おバカなプログラムになっている。
割り込みがかかって点滅速度がゆっくりになっていってるには違いないんだけど。

このエントリーをはてなブックマークに追加

Posted under: mikroBasic


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.