• 締切済み

やっぱりわかりません。(H8マイコンについて)

H8/3052Fマイコンで時計を作ろうとしているのですが、時間をセットするプログラムがどうしても書けません。 4つのボタンを使って時刻設定するプログラムを教えてもらえませんか? ちなみに時・分・秒を一秒ずつ刻むことはできます。

みんなの回答

  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.10

こんにちは。 LUMINOQ-です。 確認してみましたが無くなってました。 私が紹介したURLの所で良いんですよね?? すみませんがもう一度UPしてもらえますか?

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.9

こんにちは。 LUMINOQ-です。 >ソースすべてを見ていただきたいのですが,文字数がオーバーしてしまって書ききれないのですよ;; 公開しても問題ないような物でしたら、適当な所にアップロードすれば よいと思いますよ。 (参考)http://up00.hyperbit.info/up/trash-box/   上記URLの下部の「アップロードフォームに行く。」をクリックで   最大50MBまでファイルをアップロードできるようです。   ソースファイル一式を圧縮してアップしてみて下さい。

sawamaru
質問者

補足

遅くなってすみません 20060326104239093にアップロードしました!! もしよろしければ確認お願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.8

こんにちは。 LUMINOQ-です。 苦戦してますね。 実際にソース一式見ることが出来たらもうちょっと的確なアドバイス ができるんですが・・・・

sawamaru
質問者

補足

遅くなってすみません!! ソースすべてを見ていただきたいのですが,文字数がオーバーしてしまって書ききれないのですよ;;

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.7

こんにちは。 #6です。 >これの秒が表示されないのはなぜですか?? あれっ? 時間刻みと表示はうまくいってたんじゃなかったの?? それとも別件ですか?

sawamaru
質問者

補足

やっぱり秒だけがうつらないんです。 まあこれはいいとしても・・

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.6

こんにちは。 #5です。 >In function 'SwIn_Init'や'P4PCRBYTE'undeclaredがでてきました・・・ P4PCRBYTE→P4.PCR.BYTE 「.」が抜けてませんか?

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.5

こんにちは#4です。 一応私のイメージを貼り付けときます。 #define HI 1/* ポート状態HI */ #define LO 0/* ポート状態LO */ #define TIM_TBL_END 3/* テーブル終端判定用定義 */ char SelSwPrev;/*設定切替SW前回値*/ char UpSwPrev;/*時間UPSW前回値*/ char TimTbl[3];/*時間テーブル[0]=時間[1]=分[2]=秒 */ char TimTblIdx;/*時間テーブルインデックス*/ /* スイッチ入力初期化処理 */ void SwIn_Init(void) { □□P4.DDR = 0x00;/*ポート4を入力ポートとして設定*/ □□P4.PCR.BYTE = 0xff;/*ポート4をプルアップ設定*/ □□SelSwPrev = HI;/*設定切替SW情報格納バッファ初期化*/ □□UpSwPrev = HI;/*UP SW情報格納バッファ初期化*/ □□TimTblIdx = 0;/*テーブルインデックスバッファ初期化*/ } /* 設定切替SW入力判定処理 */ void Sel_Swin(void) { □□if((SelSwPrev == HI)&& □□□(P4.DR.BX == LO))/* HI→LO検出? */ □□{ □□□□++TimTblIdx; □□□□if( TimTblIdx >= TIM_TBL_END ) □□□□{ □□□□□□TimTblIdx = 0; □□□□} □□} □□SelSwPrev = P4.DR.BX; } P4.DR.BXのX部分には設定切替SW入力のポート番号が入る /* UPSW入力判定処理 */ void Up_Swin(void) { □□if((UpSwPrev == HI)&& □□□(P4.DR.BX == LO))/* HI→LO検出? */ □□{ □□□□++TimTbl[TimTblIdx];/* オーバーフロー対策すること */ □□} □□UpSwPrev = P4.DR.BX; } P4.DR.BXのX部分にはUPSW入力のポート番号が入る ここどーなってんの??みたいな所があれば補足下さい。

sawamaru
質問者

お礼

これの秒が表示されないのはなぜですか?? /*メイン関数*/ int main(void) { lcd_init(); lcd_puts(str); start_itu0(); EI; for(;;) { if (cnt >=100) { cnt = 0; sec++; if (sec >=60) { sec = 0; min++; if (min >= 60) { min = 0; hour++; if (hour >= 24) hour = 0; } str[6] = '0' + hour /10; str[7] = '0' + hour %10; str[9] = '0' + min /10; str[10] = '0' + min %10; str[12] = '0' + sec /10; str[13] = '0' + sec %10; lcd_home(); lcd_puts(str); } } } return 0; } /*ITUOの初期設定*/ void start_itu0(void) { TCR0 = ITU_CLEAR_GRA + ITU_CLOCK8; TIOR0 = 0; GRA0 = 31250; TIER0 = ITU_IE_IMFA; TSTR = 1; }

sawamaru
質問者

補足

In function 'SwIn_Init'や'P4PCRBYTE'undeclaredがでてきました・・・

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.4

こんにちは。#3です。 >ポート前回値 ポート取得値 時間データテーブルの添え字 ポート前回値バッファ には,具体的にどのようなものが入るのですか?? ポート前回値、ポート前回値バッファは同じバッファです。 ポート前回値 or 時間データテーブルの添え字には単純に変数名が入ります。 グローバル変数を用意して、置換えして下さい。 あとポート取得値に関してですが、マイコンのレジスタにアクセスする 為のdefine定義が有ると思いますのでそれを使用して下さい。 (例)http://www.sendai-ct.ac.jp/~ckuma/micom/3052/3052f.h (例ポート11をSW入力とした場合) □□□(P1.B1 == LO))/* HI→LO検出? */ URLのレジスタ定義を使用すると上記のような記述になります。 一応こんな感じの回答で良いですか? また何かあれば補足下さい。

sawamaru
質問者

補足

このような感じですか?? P4.PCR.BYTE = 0xff; j = str[]; if((P4.DDR == HI)&&(P4.PCR.BYTE == LO)) { ++j; if(j == 13) { j = 0; } } P4.DDR = P4.PCR.BYTE; } /* 時間UPSW */ void Up_Swin(void) { if((P4.DDR == HI)&&(P4.PCR.BYTE == LO)) { ++str[0]; } P4.DDR = P4.PCR.BYTE; }

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.3

こんにちは#2です。 >1つ目のスイッチで設定できるようにし、 >2つ目でアップ、3つ目でセットできるようにできたらいいかと思います。 ということは1つめのスイッチで設定個所の切替(時間→分→秒) スイッチ2,3で設定個所の時間表示をUP or Downすると いうことですね。 それじゃぁまず100ms毎にタイマ割込みを発生させる為に 別タイマ割込み処理を作りましょう。 今回は入力処理を簡単にする為にノイズに関しては特に考えない仕様 にします。100ms間隔でポートをサンプリングしポートがHI→LO またはLO→HIになった段階で入力確定とします。 (例)ポート入力判定処理(設定切替SW) void Sel_Swin(void) { □□if((ポート前回値 == HI)&& □□□(ポート取得値 == LO))/* HI→LO検出? */ □□{ □□□□++時間データテーブルの添え字; □□□□if( 時間データテーブルの添え字 == テーブル終端? ) □□□□{ □□□□□□時間データテーブルの添え字 = 0; □□□□} □□} □□ポート前回値バッファ = ポート取得値; } (例)ポート入力判定処理(時間UPSW) void Up_Swin(void) { □□if((ポート前回値 == HI)&& □□□(ポート取得値 == LO))/* HI→LO検出? */ □□{ □□□□++時間データテーブル[時間データテーブルの添え字];/* オーバーフロー対策すること */ □□} □□ポート前回値バッファ = ポート取得値; } □は半角スペースです。 時間データは配列変数に格納します。 [0]が時間、[1]が秒といった感じ。 上記の処理のままだと、表示の更新タイミングは1秒毎のまま なのでちょっと違和感ありますね。 その辺も意識して作って見てください。 また何かあれば補足下さい。ちょくちょく見にきますんで。

sawamaru
質問者

お礼

ポート前回値 ポート取得値 時間データテーブルの添え字 ポート前回値バッファ には,具体的にどのようなものが入るのですか??

sawamaru
質問者

補足

本当に本当にご丁寧にありがとうございます!!! なぜそんなに親切なのですか?? 今すぐに試したいのですが,時間がないため夜ごろになりそうです! もし何かわからないことがあったとき,またご迷惑をかけるかもしれません。本当にすみませんがご協力お願いします。 また,私にできることがあればできる限りの範囲で力になれればと思います!!

全文を見る
すると、全ての回答が全文表示されます。
  • LUMINOQ-
  • ベストアンサー率16% (3/18)
回答No.2

こんにちは。 実現方法は何パターンか存在しますが、簡単(?)な方法を記述します。 まず10~20ms定周期処理を作りボタンの入力処理を作る。 ボタン入力に関してですが、内部プルアップで未入力時はHi、入力時は LOがポートに入るものとして話を進めます。 まず入力ポートがHiからLOに切り替わった地点から3回10~20ms 間隔でポートサンプリングし3回Loを検出した段階で入力確定とします。 (チャタリングによる誤入力防止) 入力が確定したら単純に時間バッファをインクリメントしてやる。 単純になにも考えなければ上記で良いと思います。 ボタンも4つではなく3つ(時間、分、秒)でいけると思います。 どうしても4つ使わなければいけないのであれば、ボタンAを モード切替ボタン(入力の度に設定モードと時計モードを切り替える) ボタンB、C、Dを時間設定ボタンとし設定モード以外の入力は無効 といった感じに仕様を考えていって下さい。 (私なら2ボタン仕様にしますが・・・) 簡単ですが参考にして下さい。 また何か有れば回答しますので、補足下さい。

sawamaru
質問者

補足

ご丁寧にありがとうございます。 しかし,言葉ではわかるのですがそれをプログラムに直すことができないのですがどうしたらいいのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • usami33
  • ベストアンサー率36% (808/2210)
回答No.1

まったく書けないの、それとも途中まで書いたの? どちらにしても、どのような構造にするかまでは決まっていますか? クロックは25MHz? 時計はタイマーの割り込みで時間を加算しているのですか? 時刻を刻むことができるなら、なにか構造体を定義して、そこに時間をセットしているんですよね、それとも別な機能を使っていますか?

sawamaru
質問者

補足

まったく書けません。 1つ目のスイッチで設定できるようにし、 2つ目でアップ、3つ目でセットできるようにできたらいいかと思います。 クロックは25MHzです。 割り込みを使って時間を加算しています。 このような感じです↓ /*メイン関数*/ int main(void) { lcd_init(); lcd_puts(str); start_itu0(); EI; for(;;) { if (cnt >=100) { cnt = 0; sec++; if (sec >=60) { sec = 0; min++; if (min >= 60) { min = 0; hour++; if (hour >= 24) hour = 0; } str[6] = '0' + hour /10; str[7] = '0' + hour %10; str[9] = '0' + min /10; str[10] = '0' + min %10; str[12] = '0' + sec /10; str[13] = '0' + sec %10; lcd_home(); lcd_puts(str); } } } return 0; } /*IMIA0割り込み処理関数*/ void int_imia0(void) { DI; /*割り込み禁止*/ TSR0 &=0xfe; cnt++; EI; /*割り込み許可*/ }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • H8マイコン制御

    H8マイコンを使って目覚まし時計を作りたいのですが、どうすればよいのかわかりません。 どなたかお詳しいかた教教えていただけませんか?? 時刻表示・時刻設定・アラーム設定をやりたいのです。。

  • H8/3052マイコンについて

    H8/3052マイコンを使って時間差を読み取ることはできないでしょうか? たとえば、どこかのポートに時間t=0secのとき外部から入力をして、t=1msecでまた外部から入力をしΔt=1msecを使用してマイコンに掛け算なり割り算なり計算をさせるようなことは可能でしょうか? マイコンにはC言語を使用しています。サンプルプログラムなども載せてもらうとありがたいです! よろしくお願いします!

  • H8マイコン開発

    H8/3069Fマイコンボードを買ってきて勉強をしようと思うのですが、 どこから手を付けていいのかわからないです・・・・。 C言語/アセンブラでプログラムを書いて何か実行させてみたいのですが、何かいい参考になるのはないでしょうか?

  • H8マイコンのプロテクト方法

    H8マイコンに書かれているプログラムを読込むことは出来るのでしょうか? H8マイコンの搭載されているに商品を作りました。 お客様にその商品を中国に輸出するので、 『プログラムを読込めないようにしてください。』といわれました。 中国ではコピーをされる恐れがあるとのことです。 そもそもH8からプログラムを読込むようなことは出来るのでしょうか? また、出来てしまう場合は、プログラムを転送時にプロテクトをかけるような ことは出来るのでしょうか? ちなみに、書込みはFlashSta.exeを使用しています。 どなたか分かりましたら回答お願い致します。

  • H8マイコンを用いたある計算について

    H8-3052マイコンを使用してある計算をしたいです。 たとえば、1VをDAポートに入力し、数マイクロ秒後にまた1VをDAポートに入力します。その時間差を読み取り計算をすることは可能でしょうか?具体的にどのような計算かというと、はじめに入ってきたレーザ光の入力と、後から入ってきたレーザ光の入力の時間差を用いて距離を求める計算をしようと思っています。光の速度は一定なので、その伝播時間さえわかれば距離を算出することが出来るというわけです。 マイコンやプログラムについては初心者なのでわかる方教えてください。 出来ればサンプルプログラムも添えていただけるとありがたいです。 よろしくお願いします。

  • H8マイコンに関して

    H8マイコンは、1つのプログラムで複数の周辺機器を同時に使うことができますか? 例えば、LCDとSCI(シリアル通信)を同時に動かしたい。または、AD変換とLCD・SCIを同時に走らす。 とかです。 変数の設定次第で、どうにかなると噂で聞きました。(例えば、グローバル変数を設定するとか?) ご回答をお願いします。

  • H8マイコンについて教えてください。

    僕はPICをやっていますが最近H8マイコンの高機能さに魅力を感じ はじめてみたいと思うようになりました。 そこで以下のことについて教えてほしいです。 質問1 PICは石単体で買ってきてそれにプログラムを書き込み 水晶やらその他の部品を取り付けて作っていくのでH8も 石単体で買ってくるものだと思ってました。 でも調べてみると秋月のマイコンボードみたいに 基盤に水晶やら抵抗やら色々半田付けされてて それにプログラムを書き込んで作るようなのが沢山ありました。 H8は石単体で買ってくる物ではないんですか? (もしくは足のピッチを2.54に変換したもの) 画像検索で調べるとDIPタイプのH8もあるようですが・・・ 質問2 H8へのプログラムの書き込みですがPICでは "PIC ライター"とかで検索するとライターの作り方とか 自作ライターのページが沢山出てきますがH8に関しては ぜんぜんヒットしません。 僕のイメージとしてはゼロプレッシャーのついたライターを作って それにH8をセットしプログラムを書き込むものだとばかり 思ってたんですがH8はどうやってプログラムを書き込むんですか? 質問3 部品の配置やブレップボードで自由度が高いので できれば表面実装ではなくDIPやPLCCみたいな石で ライターに刺して作れるといいんですが・・・ 表面実装以外はあまり一般的ではないんでしょうか? 質問4 使用する言語についてですがPICではアセンブラでは アセンブラを使っています。 でもH8はC言語も結構やってる人が多いみたいでC言語自体も 興味があるのでそっちでやろうかと思っています。 でも部分的にアセンブラ(インラインアセンブラ?) が必要なってくる部分があると思うんですが やっぱり全部アセンブラのほうがやりやすいんでしょうか? 以上、よろしくお願いします。

  • H8マイコンをモノにしたいです!!

    学習用のH8マイコンキットを買い、H8マイコンの勉強がしたいと考えています。 現在、購入の際に考えているのは、 1.マイコンの基礎などのテキストが付いているモノ。(マイコン初心者なので、始めはテキスト通りに進めたい) 2.ハンダ付けの経験はないので、既に組んであるモノを探してます。 3.C言語を使ってマイコンの勉強が出来るモノ。 4.機能としては、スイッチ、LED、7セグメントLED、またはLCDが付いているモノ。 色々調べて、今の候補は、 ・ビーリバーエレクトロニクスさんの、マイコン学習ボードBASIC(17000円) ・Yellow Softさんの、H8マイコン学習セット(55000円) を考えているんですが、値段を見たときに、もちもん安い方が購入しやすいですが、 正直なんでこんなに違いがあるのかも分かりません。 マイコンをこれから勉強するにあたって、どの学習キットを選べばいいか、アドバイスください。 (上の2つ以外でも、良いキットがあればお願いします) ちなみに私は、C言語の入門は終えましたが、マイコンは初心者です。 どなたかアドバイス頂けないでしょうか?? ※上記2点の学習用のH8マイコンキットはここを見ました。 <http://beriver.co.jp/cpu3.html#basic> <http://www.yellowsoft.com/products/h8gset.html>

  • H8マイコンでの開発について

    秋月電子通商でH8用のUSBでの開発ボード http://akizukidenshi.com/catalog/g/gK-00171/ を買おうと思っているのですが(マイコンはH8/3048Fを持っています)、 買う前に気になったことがいくつかあります。 (1)これはUSBでプログラムを書き込めるということですよね? (2)USBには色々な形の種類(Aタイプ、Bタイプなど)がありますが、パソコンとマイコンをつなぐのはどれを買えばいいのでしょうか? (3)電源は3048Fの場合、12Vで合っているでしょうか?また、電流は商品によって違う(1A、1.5Aなど)のですがどうすればいいのでしょうか?  現在、http://akizukidenshi.com/catalog/g/gM-00031/  を買おうと思っていますが大丈夫でしょうか?  (または、パソコンにつないだUSBから電圧が送られてきて付属のMAX662をつけることでプログラムを書き込め、電源は必要ないのでしょうか?) (4)パソコンとシリアル通信をする場合はUSBで出来るのでしょうか?また、もし違う場合はやり方を教えてください。 (5)HEW4を用いてプログラムを書き込もうと思うのですが大丈夫でしょうか?(開発環境はWindows7です) 以上です。質問が多くて申し訳ありません。 回答よろしくお願いします。

  • H8Sマイコンの機能に相当するAtmelのマイコン

    現在、H8S2368マイコンというのを使用しているのですが、Atmelのマイコンでそれに相当するようなマイコンをご存じでしたらご教授頂きますようお願い致します。 なお、H8S2368マイコンの仕様は http://japan.renesas.com/products/mpumcu/h8s/h8s2300/h8s2368/index.jsp こちらのサイトで次のようになっていました。 低電圧高速動作 3.0~3.6V/33MHz動作 最小命令実行時間:30ns ROM/RAM 512kB/32kB:H8S/2368F 384kB/32kB : H8S/2364F 384kB/24kB:H8S/2367F 256kB/32kB : H8S/2362F 256kB/24kB : H8S/2361F 256kB/16kB : H8S/2360F 256kB/16kB:H8S/2365 -  /16kB:H8S/2363 シリアル通信機能強化 SCI×5ch(I2C×2chオプション) 等 どうぞ、よろしくお願いいたします