![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.4ベストアンサー
- 回答日時:
> クロック周波数を20Mhzに指定しており,152カウントするのに約1秒かかります.
ということは,約 6.6 ms 毎にタイマ割り込みがかかるということですね。
rtcc_pulse 関数内の delay_ms(10); は要りません。
10 ms も休んでいたら,次の割り込みが来てしまいます。
counter == t の時に,LED1_ON() していますが,
次に割り込みがかかったとき(約 6.6 ms 後)には,LED1_OFF() が呼ばれるので,
点灯しているようには見えないでしょう。
ON -> OFF のタイミングも時間をカウントして決めてやる必要があります。
# タイマや,割り込みの使用にこだわらないなら,ANo.2 にあるように,
# メインループ内で,点灯して,待つ,消灯して,待つ,を繰り返すのが簡単でしょう。
No.3
- 回答日時:
割り込みハンドラのようですが、どういうタイミングで呼ばれるか分かっていますか?
No.2
- 回答日時:
プログラムが不完全なのでなんともコメントが難しいです。
関数の定義だと思いますが、どのように動作させたいのでしょうか。
LED1_ONの意味もいまいち分かりません。
とりあえず、私ならの場合です
/*dutyでOFFの時間をコントロールする*/
int led_pulse(int duty){
int i,count_max=100; /*一周期の長さをcount_maxで制御*/
int state=1; /*状態を制御、0でOFF,1でONと仮定する*/
i=0;
while( i < count_max){
if( i == duty ) state=0;
/*適当なスリープ処理が必要*/
i++;
}
}
return(0);
}
大事な部分はこれでOKで、あとの部分は適当にお好みでやってください。
あくまで推測で書きました。
回答有難うございます.全プログラムは以下のようになります.ほぼ初心者で参考書の例を見ながらやっているものでいらない,至らない部分なども多々あると思いますが;
#include<16F877a.h>
#fuses HS, NOWDT, NOPROTECT,PUT,BROWNOUT,NOLVP
#use delay(clock=20000000) //クロックMHzの指定
#use rs232(baud=38400, xmit=PIN_C6, rcv=PIN_C7)
/// 機能
void LED1_ON();
unsigned long counter;
unsigned long t;
///割り込み処理関数
#INT_RTCC
rtcc_pulse()
{
counter++;
if(counter == t){
counter = 0;
LED1_ON();
delay_ms(10);
if (t < 152) {
t += 10;
} else {
t = 52;
}
}
else{
LED1_OFF();
}
}
}
///メイン関数
void main(void)
{
setup_adc_ports(NO_ANALOGS);
set_tris_a(0x10);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
counter = 0;
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(1){
}
}
/// LED 1ON/OFF
void LED1_ON(){
output_low(PIN_E0);
}
void LED1_OFF(){
output_high(PIN_E0);
}
ちなみにこのプログラムだとLEDは光りません.
if (t < 152) {
t += 10;
} else {
t = 52;
}
}
の部分を消して,tに152を代入すると1秒周期で点滅します.
No.1
- 回答日時:
例えば……tが152になったら52に戻って循環するという場合
#INT_RTCC
rtcc_pulse()
{
counter++;
if(counter == t){
counter = 0;
LED1_ON();
delay_ms(10);
if (t < 152) {
t += 10;
} else {
t = 52;
}
}
else{
LED1_OFF();
}
回答ありがとうございます.
回答していただいたプログラムですとなぜか全くLEDが光りません.
また,
if (t < 152) {
t += 10;
} else {
t = 52;
}
の部分を単純にt=52と変えて,一定に点滅させようとしてもなぜか止まってしまいます.
しかしtの値に直接52を書いたり,宣言文のところでlong t = 52とする分にはちゃんと一定には点滅します.謎です;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- 車検・修理・メンテナンス 使用してないナンバー灯やバックランプはそのままでも車検に通りますか? 3 2022/07/23 11:45
- 工学 LED、CdS(受光素子)、ディジタル IC(組み合わせ回路,順序回路)、タイマーICの技術を組み合 1 2022/12/23 10:45
- その他(パソコン・周辺機器) USB端子間に挟んで使う、スイッチのような物は売られていますか。 3 2022/08/25 22:26
- C言語・C++・C# C言語 ① 5秒間 1秒間隔で点滅を繰り返す ② 3秒間 0.5秒間隔で点滅を繰り返す ①→②→①→ 5 2022/05/03 23:37
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPUの処理量を減らすコーデ...
-
PICでタイマー割込み(mikroC V...
-
irqbalance って
-
picのタイマ1発振開始時間に関...
-
タイマ割り込みについて
-
割り込み処理のシミュレート
-
電車で待機列の割り込みについ...
-
PICプログラムについて
-
割り込みについて
-
PICの外部クロックの12.8MHzで1...
-
LEDの点灯(C言語,PIC)
-
picタイマ0割り込みについて
-
PICマイコン 割り込み実行時間...
-
【組込み】割り込み中のstatic...
-
AWTのList仕様の可能、不可能に...
-
正確な1msecのタイマ割込
-
アトメル社製ATtiny2313マイコ...
-
(H8マイコン)タイマ割込で変更...
-
割り込みベクタは誰が設定する...
-
PICマイコンでエンコーダパルス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ショッピング
-
スーパーのレジで並んでいたら...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
Amazonfireタブレットにわから...
-
CPUの処理量を減らすコーデ...
-
irqbalance って
-
CPU負荷率の安全な上限と計...
-
一定時間操作がなかったら、と...
-
電車で待機列の割り込みについ...
-
VB6でSendKeyを利用したTab移動...
-
(H8マイコン)タイマ割込で変更...
-
駅のトイレでナイチンに邪魔さ...
-
アセンブラのタイマー割り込み
-
PICのPIN変化割り込みに...
-
USJでの割り込み
-
H8マイコンで割り込みが任意の...
-
PIC16F84AのRBポート変化割り込...
-
AKI-H8/3048Fでのタイマ割り込み
-
H8マイコンでの割り込み(シリ...
おすすめ情報