掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 776
タイトル Re^2: カウントダウンタイマー
投稿日 : 2016/12/20(Tue) 10:55:51
投稿者 ベッカー   <takuji_k@hotmail.com>
参照先
返信ありがとうございます。
しかし 素人すぎて、プログラムをみてもよくわかりません。
c言語の本を読みあさりましたがイマイチ基本もできていないので
理解に苦しんでいます。

すみませんが、
下記 プログラムを16F84Aに書き込んでも動作しないのは
なぜなのかがいまいちわからないところです。
LEDが付きぱなしで、うまく作動しません。
16F84Aなので5Vで問題ないような気がしますが、やはり
ハードの接続等がおかしいのでしょうか?

/************************************
16F84A HI-TECH C v.9.83
2桁7セグメントLEDのダイナミック点灯
************************************/
#define _LEGACY_HEADERS
#include "PIC.h"
#define _XTAL_FREQ 20000000 //20MHz

__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);

unsigned char i;
unsigned char d0, d1;
unsigned char p[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void interrupt warikomi(void)
{
T0IF = 0; //TMR0割り込み禁止
i++;
if (i == 2)
{
i = 0;
}

if (i == 0)
{
PORTA = 0x1E; // 1桁目
PORTB = p[d0];
}
else
{
PORTA = 0x1D; // 2桁目
PORTB = p[d1];
}
}

main(void)
{
TRISA = 0x00; //RA0〜RA4は出力
PORTA = 0x03; //RA0とRA1をHighレベルにする
TRISB = 0x00; //RB0〜RB7は出力
PORTB = 0x00;
OPTION = 0x86; //プリスケーラ64
TMR0 = 0x00; //TMR0は0からスタート
T0IE = 1; //TMR0割り込み許可
GIE = 1; //すべての割り込み許可
i = 0;

while (1)
{
for (d1 = 0; d1 < 10; d1++)
{
for (d0 = 0; d0 < 10; d0++)
{
__delay_ms(500);
}
}
}
}
> タイマの割り込みを使うと下記のような感じで時間の制御ができます。
> 下記は赤LEDを1秒間隔でオンオフを継続し、スイッチが押された
> 時から青LEDを2秒間隔でオンオフするというものです。
>
> /**********************************************
> * LEDチカチカ タイマ1,3使用
> * PIC16F18325
> **********************************************/
> #include <xc.h>
> // コンフィギュレーション
> #pragma config FEXTOSC = OFF, RSTOSC = HFINT1, WDTE=OFF, LVP=OFF
>
> /***** メイン関数 ***********/
> void main(void) {
> OSCCON1 = 0x60; // PLL Off 1/1
> OSCFRQbits.HFFRQ = 3; // 4MHz
> LATC = 0x05; // ブリッジオフ
> TRISA = 0x30;
> TRISC = 0;
> ANSELA = 0; // すべてデジタル
> ANSELC = 0;
> /** タイマ1初期設定 1sec **/
> T1CON = 0xC1; // LFINTOSC 1/1 開始
> TMR1H = 0x86; // 31kHz/31000=1Hz
> TMR1L = 0xE8;
> PIE1bits.TMR1IE = 1; // 割込み許可
> /** タイマ3初期設定 2sec **/
> T3CON = 0xC0; // LFINTOSC 1/1
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> PIE3bits.TMR3IE = 1; // 割込み許可
> /* グローバル割り込み許可 */
> INTCONbits.PEIE = 1;
> INTCONbits.GIE = 1;
> /******** メインループ ***********/
> while(1){
> if(PORTAbits.RA5 == 0){ // S1オンの場合
> LATCbits.LATC3 = 1; // 青点灯
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> T3CONbits.TMR3ON = 1;// タイマ3動作開始
> while(PORTAbits.RA5 == 0);// オンの間待つ
> }
> }
> }
> /******************************************
> * タイマ1,3割り込み処理関数
> *****************************************/
> void interrupt isr(void){
> if(PIR1bits.TMR1IF){ // タイマ1割り込みの場合
> TMR1H = 0x86; // 31kHz/31000=1Hz
> TMR1L = 0xE8;
> LATCbits.LATC5 ^= 1;// 赤反転
> PIR1bits.TMR1IF = 0;// 割り込みフラグクリア
> }
> if(PIR3bits.TMR3IF){ // タイマ3割り込みの場合
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> LATCbits.LATC3 ^= 1;// 青反転
> PIR3bits.TMR3IF = 0;// 割込みフラグクリア
> }
> }
>
>          以上
>
>
> > PIC初心者ですが見よう見まねで下記のHPのキッチンタイマーを
> > 製作したのですがアセンブラはいまいち理解しにくいためC言語でカスタムしようと奮闘中です。
> > 今回私がバスケをやっており、そのための大型タイマーを作成して現在使用していますが、今度 24秒と14秒を切り替えしながらできる
> > ものを作りたいのですがいかんせん初心者でよくわかりません。
> >
> > 今回の参考先のHPのプログラムをいじって作成しようと思うのですがオリジナルを作成して、動かしてみたのですがうまく動きません
> > メールもしたのですが、古すぎて見ていないのか面倒なのかで返事がありませんのでどうかお助け下さい。
> >
> >
> > キッチンタイマ参考HP
> > http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/kt/index.html
> >
> > 24秒と14秒切り替えタイマーの参考HP
> > http://physics.cocolog-nifty.com/weblog/2012/06/led-bffe.html

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -