質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

1558閲覧

H8 3664を使用してのイライラ棒製作

Dullahaan

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/11/30 06:52

初質問失礼します、当方初心者ゆえ優しくしていただけると有難いです。

前提・実現したいこと

タイマーAを使って3桁のカウントダウンプログラムを作ろうとしているのですがとても難航しています、班員二人で話し合いやネットで検索しても埒が明かない状態です

発生している問題

ダイナミック点灯をどうすれば良いのかイマイチ理解が出来ておらずIF文で試行錯誤している

該当のソースコード

C

1#include <3664.h> 2static volatile int timerACount = 0; 3 4void init(void); /* ポート初期化 */ 5void wait(int); /* msec間何もしない時間稼ぎ関数 */ 6void initTimerA(int second); /* 一秒ごとカウントするタイマ */ 7 8 9int f=9; 10void int_timera (void){ 11 if (f==9) { 12 IO.PDR5.BYTE=0x00; 13 wait(20); 14 IO.PDR5.BYTE=0x01; 15 wait(20); 16 IO.PDR5.BYTE=0x02; 17 wait(20); 18 IO.PDR5.BYTE=0x03; 19 wait(20); 20 IO.PDR5.BYTE=0x04; 21 wait(20); 22 IO.PDR5.BYTE=0x05; 23 wait(20); 24 IO.PDR5.BYTE=0x06; 25 wait(20); 26 IO.PDR5.BYTE=0x07; 27 wait(20); 28 IO.PDR5.BYTE=0x08; 29 wait(20); 30 IO.PDR8.BYTE=0x09; /* 0000 1001*/ 31 f=8; 32 }else if (f==8) { 33 IO.PDR8.BYTE=0x08; /* 0000 1000*/ 34 f=7; 35 }else if (f==7) { 36 IO.PDR8.BYTE=0x07; /* 0000 0111*/ 37 f=6; 38 }else if (f==6) { 39 IO.PDR8.BYTE=0x06; /* 0000 0110*/ 40 f=5; 41 }else if (f==5) { 42 IO.PDR8.BYTE=0x05; /* 0000 0101*/ 43 f=4; 44 }else if (f==4) { 45 IO.PDR8.BYTE=0x04; /* 0000 0100*/ 46 f=3; 47 }else if (f==3) { 48 IO.PDR8.BYTE=0x03; /* 0000 0011*/ 49 f=2; 50 }else if (f==2) { 51 IO.PDR8.BYTE=0x02; /* 0000 0010*/ 52 f=1; 53 }else if (f==1) { 54 IO.PDR8.BYTE=0x01; /* 0000 0001*/ 55 f=0; 56 }else if (f==0) { 57 IO.PDR5.BYTE=0x00; /* 0000 1001*/ 58 f=9; 59 } 60 IRR1.BIT.IRRTA=0;// 検知フラグを戻して再開 61} 62 63/* タイマAの割り込み関数による LED点滅 64 65 設定時間毎に timera() が呼ばれる 66 毎回、点灯、消灯をフラグで切り替える 67 68 EI; //割り込み許可 69*/ 70 71void main() 72{ 73 74 /*IO.PMR5.BYTE=0x00; 全て0にセットし、全ピンをポート使用に設定 0000 0000*/ 75 IO.PCR8=0xFF; /* 全て1にセットし、出力に設定 1111 1111 */ 76 IO.PCR5=0xFF; 77 /* PCRレジスタは IO.PCR1.BYTE 記述でない!*/ 78 IO.PUCR5.BYTE=0x00; /* 全て0にセットし、プルアップなし*/ 79 80 81 DI; /* =0xc0 */ 82 TA.TMA.BYTE=0x08; /* 時計用クロック 時間1.0s 0000 1000 */ 83 IRR1.BIT.IRRTA=0; /* タイマーA割込みフラグのリセット */ 84 IENR1.BIT.IENTA=1; /* タイマーA割込みを利用可能にする */ 85 86 EI; 87 88 89 while (1) ; 90 91} 92 93 94/* ポート初期設定 */ 95void init() 96{ 97 //ポート1 98 IO.PMR1.BYTE = 0x00; /* ポート1機能選択(0:入出力 1:割込み等) 0000 0000*/ 99 IO.PCR1 = 0x00; /* ポート1入出力選択 (0:入力 1:出力) 0000 0000*/ 100 //ポート5 101 IO.PMR5.BYTE = 0x00; /* ポート5機能選択(0:入出力 1:割込み等) 0000 0000*/ 102 IO.PCR5 = 0xff; /* ポート5入出力選択 (0:入力 1:出力) 1111 1111*/ 103 //ポート7 104 IO.PCR7 = 0x00; /* ポート7入出力選択 (0:入力 1:出力) 0000 0000*/ 105 //ポート8 106 IO.PCR8 = 0xff; /* ポート8入出力選択 (0:入力 1:出力) 1111 1111*/ 107 //ポートBは設定不要(入力のみ 108} 109/* msec間何もしない時間稼ぎ関数 */ 110void wait(int msec) 111{ 112 int i,j; 113 for (i=0; i<msec; i++) 114 { 115 for(j=0; j<3000; j++); 116 } 117} 118/* 一秒ごとカウントするタイマ */ 119void initTimerA(int second) 120{ 121 timerACount = 0; 122 123 // 時計用タイムベースで設定。 124 // 1秒ごとにカウントアップ。 125 TA.TMA.BYTE = 0b00011000; 126 // 割込みフラグリセット 127 IRR1.BIT.IRRTA = 0; 128 // タイマーA割込み要求有効 129 IENR1.BIT.IENTA = 1; 130 // 全割込み許可 131 EI; 132} 133

試したこと

とりあえずIF文でやろうと試みている最中です

補足情報

コンパイラはGCCデベロッパを使用しています
プログラムが見苦しいかと思います、申し訳ありません。
何卒よろしくお願いしたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、タイマを使って1ms のタイマ割り込みを実装しましょう。
1sのカウントはこのタイマ割り込みをカウントすれば実装できます
そして、ダイナミック点灯は、この1msタイマの割り込みルーチンによって実装するようにします
プログラムループでウェイトさせるのはダメダメです

投稿2018/11/30 07:54

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ダイナミック点灯ということなので
百の位だけ点灯 -> 十の位だけ点灯 -> 一の位だけ点灯 -> 百の位だけ ...

というのを高速で繰り返すことになります

ということは、現在のカウント値の(百/十/一)の位を取り出す処理が無いとおかしいです。

とりあえず固定値をダイナミック点灯で表示させるプログラム組んでから
カウントダウンに取り組んだらどうでしょう。

投稿2018/11/30 08:06

編集2018/11/30 08:13
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問