mikoroCに関する質問、ノウハウ等の情報交換の場です。

mikroC情報交換

26555
mikroCでプログラミング

PIC16F887で割り込み - kazu

2010/01/31 (Sun) 22:34:39

はじめましてこちらにお世話になります。mikrocプログラミングでかなり苦戦しています。下記ソースコードはCCP1コンペアマッチ割り込みとTMR0割り込みを使いCCP1から1秒の割込みが発生したらPORTB.1を立ち上げ(点灯)し、
その後TMR0から0.5秒の割込みが発生したら信号を立ち下げ(消灯)する。つまりPORTB.1には0.5秒の間隔でLEDを点滅させようとしたコードです。が試験結果はほぼ同時に両側の割込み処理動作になる為か1秒点滅が15回のあと0.5秒が5回続く周期で点滅してしまい思う様になりません。割り込み処理部分の使い方に問題があると思いますがどこを修正すれば良いのか分からず、大変困っております。もし、どなた様でも検証からご教示頂くことが出来れば大変幸いです。
/*******mikroc V8.2*********/
unsigned count,count1 =0;
void interrupt()
{
if(PIR1.CCP1IF == 1)
{
PIR1.CCP1IF = 0;
COUNT++;
if(count == 5)//5回カウントで1秒
{
PORTB.F1 = 1;//ON点灯
count = 0;
}
}

if(INTCON.TMR0IF == 1)
{
INTCON.TMR0IF = 0;
TMR0 = 216;
count1++;
if(count1 == 100)//100回カウントで0.5秒
{
PORTB.F1 = 0;//OFF 消灯
count1 = 0;
}
}
}

void main()
{
ANSEL = 0;
ANSELH = 0;
TRISB = 0
PORTB = 0;
PIE1.CCP1IE = 1;//コンペアマッチ割込み許可
PIR1.CCP1IF = 0;//マッチフラグクリア
CCP1CON = 0x0B;//トリガスペシャルイベント
CCPR1L = 0x50;//50000カウント値設定
CCPR1H = 0xC3;
T1CON = 0x31;//プリスケ1:8 TMR1有効
OPTION_REG = 0x87;//TMR0 プリスケ256
TMR0 = 216; //5ms生成
INTCON = 0xA0;
INTCON.PEIE = 1;
INTCON.GIE = 1;

while(1){}

}


名前
件名
メッセージ
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.