wiz-cを使ってPICにプログラムで 動作が非常に遅いのです。
pic16f819内臓オシレータ(8M)使用で
プログラムしましたが動作自体はプログラム通りですが
処理スピードが非常に遅い(wait(100);で1~2分かかる)のですが
WIZ-Cの設定に何か問題があるのでしょうか
考えられる要因があれば教えてください。

A 回答 (1件)

思いつくところとしては、8MHzのつもりで31KHzを使うと100ミリ秒が26秒になりますね。


WIZ-Cの具体的な設定については分かりませんが、使うクロック速度を宣言しただけで実際にPICに書き込む段でそれに従っていないということが考えられます。
    • good
    • 0
この回答へのお礼

ありがとうございます
やっぱりそのあたりの問題でしょうか?
設定を見直してみます・

お礼日時:2011/04/11 21:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGBAでWIZっぽいのありますか

タイトルの通りですが、GBAでWIZっぽい、つまり延々とやりこめるタイプのゲームはあるでしょうか。
シレンGBは持っていて大好きなのですが、今度はWIZ系ものをやってみたいのです。ちなみにまだWIZ系は超初心者です。
GBではいくつもWIZ外伝が出ているのは知っていますが、できれば、カセットがはみ出ないGBA版があればいいなあと。
ひとつGBA版WIZがあるらしいのはネットで知ったのですが、これはまた随分とゲームバランスが悪いと聞きます。サマナーでしたか。それ以外で面白いのがあれば、本家WIZでなくてもよいのです。何かあればよろしくおねがいします!

Aベストアンサー

ウィズフリークの一人です。(アップル版からプレイしています。)

>GBAでWIZっぽい、つまり延々とやりこめるタイプのゲームはあるでしょうか。

このウィズっぽいと言う部分ですが、捉え方として「3Dダンジョン探索」と言うのとボス(一応の)を倒しても、ゲームは果てしなく続くと言う2点の意味が存在すると思います。これらを兼ね備えたソフトは残念ながら、GBAには存在しません。強いて言うなら、質問者さんも挙げていらっしゃいます”サマナー”となりますが、非常に作りがザツで、楽しめません。(お金がやたらと貯まる。敵の表示方法に問題あり。)

ですので、別々に考えてみると、まず3Dダンジョンでは”真・女神転生1・2”(別々に発売されています。)などがあります。もとはSFCですが、私もお気に入りソフトです。悪魔合体などのやり込み要素もあります。

次に延々とと言う部分ですが、これなら”トルネコの大冒険”シリーズなんかがお薦めでしょうね。(”シレン”の元になったソフトです。)

今までコンシューマー機で発売されたウィズのゲームで、一番出来が良かったと思うのは、アスキーから発売されたファミコン版の”Wiz1・2・3”だと思います。PC版の忠実な移植に加え、家庭用ゲーム機ならではの適度なアレンジが秀逸です。これらは後にGB版として発売されていますので、機会があればプレイされてはどうでしょうか?(GBAにセットするとはみ出しますが…。)

以上、ご参考までに!

ウィズフリークの一人です。(アップル版からプレイしています。)

>GBAでWIZっぽい、つまり延々とやりこめるタイプのゲームはあるでしょうか。

このウィズっぽいと言う部分ですが、捉え方として「3Dダンジョン探索」と言うのとボス(一応の)を倒しても、ゲームは果てしなく続くと言う2点の意味が存在すると思います。これらを兼ね備えたソフトは残念ながら、GBAには存在しません。強いて言うなら、質問者さんも挙げていらっしゃいます”サマナー”となりますが、非常に作りがザツで、楽しめません。(お金...続きを読む

QPIC16F84と16F84Aの違い

PICプログラムを勉強中の初歩者です。
ちょっと古い参考プログラムなどはPIC16F84を使ったものがあります、
所が現在市販のPICは16F84Aとなりますが完全な互換性があるのでしょうか。PIC16F873なども"A"が付いてます。プログラムを変更せずにそのままアッセンブルして書き込んで問題が起きないのでしょうか。
アッセンブルはMicrocip社のMPLAB IDE を使いAKIプログラムライターVer 4を使用してます。ご指導よろしくお願いします。

Aベストアンサー

ソフトウェアや搭載されている周辺回路的な違いはありません。
ACスペック(動作周波数や動作可能電圧)で16F84Aの方が強化されています。何がどれくらい違うかはスペック表を見てください。

QWIZ-Cの使い方について

最近、PICを使っていろいろな物を作りたいと思い勉強しています。
いろいろ調べるうちにアセンブリよりC言語でプログラムのほうが簡単というらしくFED社のWIZ-C Proというコンパイラを購入しました。使い方を学ぼうと思いWIZ-Cを使ったプログラム関連の本を購入しましたが、アイコンの詳しい説明等がなく、本当に基礎の基礎という感じでした。そこで、WIZ-Cの詳しい使い方を紹介している本や、サイトなどご存知の方がいらっしゃれば教えていただきたいのです。また、実際にWIZ-C愛用者などいらっしゃれば是非アドバイスお願いします。

Aベストアンサー

WIZ-Cは使った事が無いのですが、この本は買われてませんか?
http://www.cqpub.co.jp/hanbai/books/37/37371.htm
第5章にアイコンの詳しい説明があります。PDFでダウンロード可能。
これで不十分な様だとサイトで探すのは厳しいかもしれません。

QPIC16F84Aから16F628Aの変換について

以前PIC16F84Aで問題なく動作しているプログラムを
初期設定を変えて(これでいいのか?も疑問)16F628Aで動かそうとしていますが
サブルーチンに入り「タイマー」のルーチンから抜け出せないみたいです。

BILD ALL ではエラーは出ません。

割込みは正常に動作します。
どこがいけないのでしょうか?

よろしくお願いいたします。

プログラムはこちらです。


;-------------------------------------------------------------------------
;     初期設定

list P=pic16f628a
include "p16f628a.inc"

__CONFIG _HS_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _MCLRE_OFF


ORG 0


GOTO MAIN

;-----------------------------------------------------------------------
; 割り込み処理

ORG 4     ;割り込みアドレス
CLRW
CLRF PORTB     ;ポートBクリア
GOTO MAIN

;-----------------------------------------------------------------------
; メインプログラム

MAIN   BCF STATUS,RP0
         MOVLW B'00000111'
        MOVWF CMCON
        BSF INTCON,INTE     ;割りこみ許可?


         BSF STATUS,RP0     ;ポートAを全て入力に設定
        MOVWF TRISA
         MOVLW H'01'     ;ポートBは0(ゼロ)以外は出力に設定
        MOVWF TRISB

        MOVLW 90H     ;INT割り込み許可
        MOVWF INTCON

        BCF STATUS,RP0     ;ポートBをクリア
        CLRF PORTB

         CLRW
;----------------------------------------------------------------------
; スイッチ入力チエック
LOOP    BTFSS PORTA,0     ;オープンSWがONか?
         GOTO OPEN      ;ONだったら OPENへ
        GOTO LOOP
;-----------------------------------------------------------------------
; オープン動作

OPEN    MOVLW 010H      ;ポートB4番に5V出力(リレーON)
         MOVWF PORTB
       MOVLW D'250'      ;動作時間 '250'設定
        MOVWF 0EH      ;アドレス0EHに250を入力
         CALL LOOP3      ;サブルーチンLOOP3を呼び出す

       GOTO MAIN      ;サブルーチンが終わったら MAIN に戻れ

;------------------------------------------------------------------------

;-----------------------------------------------------------------------

; サブルーチン(タイマー)

TIMER1    MOVLW D'220'
          MOVWF 0CH

LOOP1    NOP
          DECFSZ 0CH,1
          GOTO LOOP1
        RETURN

TIMER2     MOVLW D'100'      ;アドレス0DHに100を入力
         MOVWF 0DH

LOOP2    NOP
          CALL TIMER1      ;TIMER1を呼び出し(行く)
          DECFSZ 0DH,1      ;アドレス0DH から1を引き算する
          GOTO LOOP2      ;結果が"0"でなかったら LOOP2に戻ってまた引き算
         RETURN       ;引き算の結果が"0"になったら「CALL」した「次に(下)」へ戻る

LOOP3    NOP      ;何もしない
         CALL TIMER2      ;TIMER2を呼び出す(行く)
        DECFSZ 0EH,1
        GOTO LOOP3
         RETURN


END    END

以前PIC16F84Aで問題なく動作しているプログラムを
初期設定を変えて(これでいいのか?も疑問)16F628Aで動かそうとしていますが
サブルーチンに入り「タイマー」のルーチンから抜け出せないみたいです。

BILD ALL ではエラーは出ません。

割込みは正常に動作します。
どこがいけないのでしょうか?

よろしくお願いいたします。

プログラムはこちらです。


;-------------------------------------------------------------------------
;     初期設定

...続きを読む

Aベストアンサー

SFRの中でEEPROM関係のレジスタのバンクが違いますが、
EEPROMは使っていますか?

シュミレーションはやってみましたでしょうか。
16f628を使い始めた頃、これで随分と助けられたものですから、
あまり、一言にはならなかったみたいですね。

QLa!cooda WIZのインストールがうまくいかない

フリーのグループウエアソフトの導入を検討しています。
一応、マニュアルに沿ってOS:redhat7.2、PostgreSQL7.2.2、Apache1.3.27、PHP4.2.2をインストールし、設定をした後、グループウエア本体のWIZをインストールして、LAN内のクライアント機からhttp://localhost/wiz/とアクセスしてみました。

 インストールがうまく行っていればグループウエアのトップページが表示されるのですが、以下のようなindex.phpファイルのソースが表示されてしまっています。

<?php
//
// Copyright (C) 1999-2000 Top Management Service, inc. All Rights Reserved.
// Copyright (C) 2001-2002 System Consultants Co.,Ltd. All Rights Reserved.
//
// $Id: index.php,v 1.32 2002/10/01 08:09:22 yu-ji Exp $
//

/**
* ポータル画面
*
* @author hiroki KAWAMURA <hiroki@syscon.co.jp>
* @author yuji TAKAHASHI <yu-ji@syscon.co.jp>
*/



include ("gw.php");
include("include/dbChange.php");
$conn = $dbConnectObj->openConnect();
if (!$conn)
{
echo "<Script language=\"JavaScript\">\n";
echo "alert('データベース接続に失敗しました。')\n";
echo "</Script>\n";
exit;
}

(以下略)



問題の原因がどこにあるのか皆目検討がつきません。
PostgreSQL、Apache、PHPについては起動確認をし、問題なく起動していると思います。

今回はじめてLinuxに挑戦している初心者です。よろしくお願いいたします。

フリーのグループウエアソフトの導入を検討しています。
一応、マニュアルに沿ってOS:redhat7.2、PostgreSQL7.2.2、Apache1.3.27、PHP4.2.2をインストールし、設定をした後、グループウエア本体のWIZをインストールして、LAN内のクライアント機からhttp://localhost/wiz/とアクセスしてみました。

 インストールがうまく行っていればグループウエアのトップページが表示されるのですが、以下のようなindex.phpファイルのソースが表示されてしまっています。

<?php
//
// Copyright (C) 1999-2000 Top M...続きを読む

Aベストアンサー

こんにちは、その後どうなりましたでしょう?
こちらではLa!cooda WIZ動いてます。

Linuxは違うけどApache,PHP,Postgres全て説明書と同じバージョンです。

ただし、#2の参考URLの手順ですが明らかにおかしいと思われる箇所があります。

「gw.phpの編集」のところで
$db_port  デフォルト(3306)でOKです。
と記述されていますが、postgresのポートは
5432
ですね。

あとはローカルのmozillaから
http://localhost/wiz/
と入力するとWIZの画面が表示されました。

QPIC16F627Aを低電圧で動かすには

PIC16F627Aです
電池で駆動するプログラムを書いていてうまく動かないので
5V安定化電源につないだら動きました。
確かめるために
BポーがをHIにするところでストップするようにして確かめました。
4.4Vでは動作しません。5Vでは動作します。
プログラムは下記です。
このPICは3Vから動作すると思いますが低電圧で
動かすために特別な設定が必要なのでしょうか。
あるいは小生の設定に問題があるのでしょうか。
ご教授ください。

  TRISA = 0xFF;
  TRISB = 0x01;
CCP1CON = 0x0C;
PR2 = 0x19;
CCPR1L = 0x0C;
CCP1CON = PWM_STOP;
  T2CON = 0x0C;
T1CON = 0x01;
TMR1L = 0;
TMR1H = 0;
TMR1IF = 0;
TMR1IE = 1;
PORTA = 0x00;
PORTB = 0xFF;
  ここで4.4V(電池)ではPORTB がHIになりません。
  5V電源ではHIになります。
  電圧チェックおよびダイオード発光で確認しました
while(1)
{;};
以下省略

PIC16F627Aです
電池で駆動するプログラムを書いていてうまく動かないので
5V安定化電源につないだら動きました。
確かめるために
BポーがをHIにするところでストップするようにして確かめました。
4.4Vでは動作しません。5Vでは動作します。
プログラムは下記です。
このPICは3Vから動作すると思いますが低電圧で
動かすために特別な設定が必要なのでしょうか。
あるいは小生の設定に問題があるのでしょうか。
ご教授ください。

  TRISA = 0xFF;
  TRISB = 0x01;
CCP1CON = 0x0C; ...続きを読む

Aベストアンサー

一般に、電源電圧を低くすると
動作可能速度が遅くなります。

動かそうとするクロック周波数などが
低電圧時に動作可能な範囲内か確認しましょう。

QPS,PS2で面白いWiz系RPGを教えてください

Wizardry#1、エルミナージュ、世界樹の迷宮シリーズをプレイ済みです。特にエルミと世界樹IIは楽しめました。
他のWizシリーズやWizライクゲームで、かつPS,PS2で遊べるものを探していますが種類が多く決めきれません。
致命的なバグが少なく、横移動ができるものがいいのですが、おすすめの作品がありましたら教えてください。

Aベストアンサー

「BUSIN ~Wizardry Alternativ~」(PS2)
「BUSIN0 ~Wizardry Alternativ Neo~」(PS2)

他のWizardryのアレンジのゲームと比べて種族・職業の数は少なめですが
(ともに種族は5、「BUSIN」の職業は初期の8種のみ)
最大の特徴としてアレイドシステムと死神があります。

アレイドシステムは複数人数で連携して
1体への強力な攻撃や魔法の範囲拡大・敵の攻撃の阻止などの特殊な行動を取るもので
参加したキャラクターのそのターンの行動を使う以外にコストがかからず
毎ターン使用することも可能で強力かつ便利なものですが
それを使うことが前提のバランスになっているので難易度が低くなりすぎることはありません。
(敵もアレイドを使ってくるし、アレイドで防御しないとパーティが壊滅する敵の攻撃も有る)

死神は同じ階層に長時間とどまっていると出現し
接触するとパーティの誰か一人に取り憑きます。
取り憑かれたキャラクターは攻撃力が上がり通常の武器でもアンデッドを倒せるようになる代わりに
被ダメージが増え死亡すると即ロストになる状態になります。
「BUSIN」ではリスクの割りにメリットが少ないのですが
「BUSIN0」では死神状態のキャラクターがいることで入れるようになるエリアもあります。
(代用品もあるが消耗品)


上で難易度は低すぎないとは書きましたが
能力値の成長上限が高いこと(「BUSIN」は99、「BUSIN0」は999)
低レベルの魔法も強化することで終盤まで実用可能なことなどから
他のWizardry系ゲームと比べればやはり難易度は低いと思います。
(リセット&ロードを見越しているのか寺院での復活は100%成功するというのもある)

「BUSIN ~Wizardry Alternativ~」(PS2)
「BUSIN0 ~Wizardry Alternativ Neo~」(PS2)

他のWizardryのアレンジのゲームと比べて種族・職業の数は少なめですが
(ともに種族は5、「BUSIN」の職業は初期の8種のみ)
最大の特徴としてアレイドシステムと死神があります。

アレイドシステムは複数人数で連携して
1体への強力な攻撃や魔法の範囲拡大・敵の攻撃の阻止などの特殊な行動を取るもので
参加したキャラクターのそのターンの行動を使う以外にコストがかからず
毎ターン使用することも可能で強...続きを読む

QC言語でPICのプログラムをしたいんですが。

PICをC言語でプログラミングしたいと思っているんですがよくわかりません。

PCの画面に「Hello」とか出すことはできるんですが、PICで動作するCがわかりません。

LEDの点灯(点滅でも)やモーターを動作させたりするプログラムを書きたいんですが

イマイチ良く分からず最初の定義文の構成とかもPICだとやっぱり違うのかなって

思っているんです。普通のCですら定義文や構成の意味が微妙な感じ何です。

でもCでかけたらカッコいいなって思ってます。

PICのCに関する入門みたいなサイトや文章があったら教えて下さい。

アセンブラやJAVAについても教えていただくとありがたいです。
まぁでもC言語メインでお願いします。

Aベストアンサー

PICのC言語と言いましても、Cコンパイラによって定義文などが
変わってきます。

当方で使用している HI-TECHでPIC16F886の
プログラムはこんな感じになります。
//HI-TECH
//PIC16F886

#include <pic.h>

//コンフィグレーションレジスタの設定
__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF
& CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);
__CONFIG(BOR4V_BOR21V);

void main(void)
{
     //処理
}

おすすめの書籍は トランジスタ技術の、2009年4月号
これならわかるPICマイコンです。

この本には、ソースブースト、HI-TECH の
Cコンパイラの説明が記載されています。

QRS メテオWIZについて教えてください。

現在180LvのチリWIZがいるのですが、メテオWIZに再振りしようと思っています。
(まずそれをやめたほうがいいなら言ってくださいw)

そこで質問があるのですが
1、ステータスはどのように振ればいいですか?
2、スキルはどういう順番で取っていくといいですか?
3、各部位の最良の装備品を教えてください。

できれば、3について、そろえた方がいい優先順位もおねがいします。

また、これからの育て方も教えていただければ幸いです。

回答よろしくおねがいします。

Aベストアンサー

かなり前にRSをしてたんで… 記憶が曖昧ですが^^;
まず、課金Fに入れるか入れないかで装備も変わったりしますのであしからず。
そして、以下は私が育てて遊んでたWizです^^;
★あくまでも参考に。

1・健康は110~120固定品(腰) 力50~100(ミスコが着たければ100)
 敏捷無振り(クエダブでも可) 運無振り
 カリスマ110~120固定品(指) 知恵無振り(強化ブロを装備したければ必要分)
 残りは知識。

2・必要なのは ヘイスト・メテオ・フォベガ だったかな?(あれば助かるのは氷柱)ただしスキル発動で周りが落ちる可能性が^^;
 確か目安はフォベガ1チャージでメテオ1発ぐらいだった気がします。
 後々Lvが上がれば連発も可 PTに入るならアスヒも1かな。

3・杖はできればスキル+品の杖かな カーズはまだ無理だった様な気がするので、山杖+3か魔法の杖+3? 装備Lv忘れてしまった…
・ブローチはまだそのLvだと弱化で十分だった気がします。できればスキル+の弱化ブロで。
・首は大魔導師首飾り(P回復速度稼ぎ) 
・頭は知識+90~100もしくはHP効率かCP効率かその両方。(狩り場で変えてました)
・背はもちろんHPでw できればCPか知識+も付いてれば…
・腰は上記であるように、私は健康固定鎖輪ベルトだった気がします。
・手は大魔導師手首保護帯(敏捷がクエダブ固定で足りるため)
・体はウィズダムか大毛ロンコ、狩り場でHP足りない って思えばHP効率鎧でカバー
・足は大道もしくはスピコマ。
・指はカリスマ固定のリングか良かった気が(若干でも火抵抗を稼ぐため)残りは全部クエダブ^^;

上記のように基本スキル+品で固めます(よって資金が結構…)
こういった装備をすれば、メテオやヘイストのLvが低くても装備で補えますので。
最近はRSをしてないでわかりませんが、エレメありのPTだとメテオが恐ろしく強くなり、狩効率が上がります。
しかし、問題点も・・・ メテオの威力が上がれば来るものは・・・
全敵のタゲです^^; 打ったら全員自分に向かって来るなんてこともありますので、その辺はPSでカバーしてください・・・
狩場によっては透明指・ブラー指でPTの所まで行かないと行けないので、鞄に入れておくのも吉。(コルなければ・・・)

180という事は・・・ 課金FでPTだとパブル鉱山B1ですねもしくはソロで神殿かな? 動きに自身があるならソロで狩れたりも。
無課金ならば河口ダンジョンですね。 ドは確か火抵抗高かったので・・・ラで?
スタン抵抗と毒抵抗を指で稼いで、デフの蜘蛛狩りって手もあります。

ちょっと思いつく狩場がこのくらいですが・・・^^;


以上長々と書きましたが、私がやっていた頃のメテオWizはなんせ貧弱^^;
PSでいかに敵から攻撃を食らわないかの立ち回りでパブルを駆け巡ってました。

最後に、チリWizはその位のLvからチリの威力も上がらないし、メテオに振っても中途半端になって面白みがなくなってきたりするんですよね^^;
しかし、即死品を装備してみたり(ホロウ?)、鎧をサンダープレート?(スタンが付いたの)などを装備するとソロでの狩り効率は意外と上がります、健康に振ってれば囲まれてもアスヒで回復しつつ倒していくなんて事もできますので・・・
メテオになるのは200超えでもいいかもしれませんね^^
今は秘密Dが結構あるみたいで、結構Lvが上がるのが早いらしいので。

メテオに転職するか、チリでまだがんばってみるか・・・
どちらにしろ、装備を先に揃え再振りですね…^^;

参考URLのスキルシュミレーターでじっくりスキル振り、能力振りを考え決めてください^^

参考URL:http://redstone-fan.sakura.ne.jp/skill_simulator/skill_top/skill_simulator_top.html

かなり前にRSをしてたんで… 記憶が曖昧ですが^^;
まず、課金Fに入れるか入れないかで装備も変わったりしますのであしからず。
そして、以下は私が育てて遊んでたWizです^^;
★あくまでも参考に。

1・健康は110~120固定品(腰) 力50~100(ミスコが着たければ100)
 敏捷無振り(クエダブでも可) 運無振り
 カリスマ110~120固定品(指) 知恵無振り(強化ブロを装備したければ必要分)
 残りは知識。

2・必要なのは ヘイスト・メテオ・フォベガ だったかな?(あれば助かるのは氷柱)ただしスキ...続きを読む

QPICで豆の1秒あたりのカウントプログラムについて

 PICの初心者です。回路図を見て、基板を作れる程度、プログラムは書いてあるのを打ち込める程度で、意味はまったくわかりません。
 PIC16F84のPICでカウントする公開の回路を見つけて、光りセンサ-回路でON.OFFさせるかいろも作りました。プログラムは作成者のものです。 見て書き込んで、なんとかカウントしました。合計数は、わかりました。
質問は、
1,このプログラムを直して、1秒間あたり、何粒落ちるかカウントしたいと考えました。
 どのように、すれば良いのか教えてください。
2,合計のカウンタ-と秒速何粒落ちているかプログラムを1つのPICに入れて、動作の最初時に選 択できるようにしたいのですが、どのようにしたらよいでしょうか。
 PICの回路図とプログラム(テキスト形式)を下に添付しています。
  お願いします。私の連休中の宿題で困っています。
7セグメントLED表示4桁カウンタ
;(クロック 4MHz)
; [ ご注意 ]
;PIC プログラムには秋月電子製のライター・キットを使用しているため、アセン
;ブルにはキットに付属のアセンブラを使用しています。
;プログラム本体は PIC の基本命令だけでの構成に書き替えていますが、ヘッ
;ダー部分などが異なる場合がありますので、他のアセンブラを使用する場合は
;適宜変更してご利用下さい。

include16f84.h

.16f84
.oschs
.pwrton
.wdtoff
.protect off

countswequrb.0;カウント入力ポート

org0ch

d1ds1;カウント用
d2ds1
d3ds1
d4ds1

swlcds1;swait でのループ回数
sdds1;表示データ (0~9)
lcds1;汎用、ループ用

org0
gotostart
org4
gotostart

start;初期設定
bsf3h,5;ページ 1
movlw10000b
movwf85h;ポート ra の初期化
movlw00000001b
movwf86h;ポート rb の初期化
bcf3h,5;ページ 0

clrfd1;カウントデータの初期化
clrfd2
clrfd3
clrfd4

ct10:btfsccountsw;入力が 0 なら次をスキップ
gotoct12
callswait
btfsccountsw;入力が 0 なら次をスキップ
gotoct12;確かでないなら戻る

incfd1,1;加算
movlw10
subwfd1,0
btfss3h,2
gotoct11
clrfd1
incfd2,1
movlw10
subwfd2,0
btfss3h,2
gotoct11
clrfd2
incfd3,1
movlw10
subwfd3,0
btfss3h,2
gotoct11
clrfd3
incfd4,1
movlw10
subwfd4,0
btfss3h,2
gotoct11
clrfd4

ct11:callswait
btfsscountsw;入力が 1 なら次をスキップ
gotoct11;入力が 1 になるのを待つ
callswait
btfsscountsw;確かに入力が 1 に戻ったかを確認
gotoct11

ct12:movlw11111110b
movwfrb
movlw01101b
movwfra;桁4へ表示
movfd4,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw01110b
movwfra;桁 3 へ表示
movfd3,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw00111b
movwfra;桁 2 へ表示
movfd2,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw01011b
movwfra;桁 1 へ表示
movfd1,0
movwfsd
calll7ptset
callwait

gotoct10

;*********************************************************************
l7ptset:;sd に指定された 0~9 の数字をセットする

bcf3h,0;キャリフラグのクリア
rlfsd,1;4倍
rlfsd,1
movfsd,0;sd の値を w にコピー
addwfpc,1;プログラム・カウンタに加算

movlw00000010b;0
movwfrb
gotopt10
nop
movlw11100110b;1
movwfrb
gotopt10
nop
movlw10010000b;2
movwfrb
gotopt10
nop
movlw11000000b;3
movwfrb
gotopt10
nop
movlw01100100b;4
movwfrb
gotopt10
nop
movlw01001000b;5
movwfrb
gotopt10
nop
movlw00001100b;6
movwfrb
gotopt10
nop
movlw11100010b;7
movwfrb
gotopt10
nop
movlw00000000b;8
movwfrb
gotopt10
nop
movlw01100000b;9
movwfrb
pt10:
return

;*********************************************************************
swait:;カウント入力時のウェイト・ルーチン

movlw6;6回のループ
movwfswlc

swt10movlw11111110b
movwfrb
movlw01101b
movwfra
movfd4,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw01110b
movwfra
movfd3,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw00111b
movwfra
movfd2,0
movwfsd
calll7ptset
callwait

movlw11111110b
movwfrb
movlw01011b
movwfra
movfd1,0
movwfsd
calll7ptset
callwait

decfszswlc,1
gotoswt10

return

;*********************************************************************
wait:;ウェイトルーチン(1桁の表示時間)

movlw100
movwflc
wt10decfszlc,1
gotowt10
return

 PICの初心者です。回路図を見て、基板を作れる程度、プログラムは書いてあるのを打ち込める程度で、意味はまったくわかりません。
 PIC16F84のPICでカウントする公開の回路を見つけて、光りセンサ-回路でON.OFFさせるかいろも作りました。プログラムは作成者のものです。 見て書き込んで、なんとかカウントしました。合計数は、わかりました。
質問は、
1,このプログラムを直して、1秒間あたり、何粒落ちるかカウントしたいと考えました。
 どのように、すれば良いのか教えてくださ...続きを読む

Aベストアンサー

>回路図を見て、基板を作れる程度、プログラムは書いてあるのを打ち込める程度で、意味はまったくわかりません。

この状態では正直つらいですね。

まず、回路図ですが、RA0-RA3は表示する4桁の7セグメントLEDを選択するようになっています。
瞬間的には1桁ずつの7セグメントLEDを点灯していますが、高速に桁を切り替えることで全桁点灯しているように見えます。(目の残像です)
2SA1015はPNPトランジスタですので、RA0-RA2の各ビットを0にすることによりトランジスタがONします。(ct12やswt10でRA0-RA2を順番に1ビットだけ0を出力しているのはそのためです)
トランジスタがONすると7セグメントLEDのコモンに+5Vが供給されます。
RB1-RB7に電流制限抵抗を通して各セグメントのa-gのカソードが接続されています。
RB1-RB7を0にすることにより、コモンに供給された電流をPICに吸い込み、各セグメントが点灯します。
7セグメントLEDは複数セグメントを同時に通電し、数字パターンを表示します。
l7ptsetで各数字に対応したパターンが登録されています。
b0をのぞくb1-b7の0の部分が各数字に対する点灯するセグメントです。
rlf命令を2回繰り返し4倍しているのは、その後の各セグメントのデータを出力するプログラムが4ワードなので、4の倍数ごとに各桁のプログラムを作っているためでしょう。
それをプログラムカウンタに足すことにより各桁出力プログラムにジャンプしているのですね。


また、RB0は光センサが入力されると、0になるようになっています。(見てのとおりですね)
ct10, ct11でbtfsc, btfss でどちらの状態か確認しています。


質問文のプログラムですが、
start部分は、コメントにもあるように初期設定で、RA, RBポートの入出力関係の設定と変数のクリアを行っています。

ct10はセンサの入力を確認しています。
btfsc は countswが0の時は次の命令をスキップという命令で、
countsw = 0 のとき call swaitへ
countsw = 1 のとき goto12へ
となります。
再度センサの入力を確認し、明らかにセンサの入力が入っていれば、カウンタをアップ(d1-d4をカウントアップ)します。
その後、センサの入力がなくなるまで待って、各桁を表示するようになっています。

センサの入力がなければ、各桁の表示を繰り返します。

>1,このプログラムを直して、1秒間あたり、何粒落ちるかカウントしたいと考えました。
> どのように、すれば良いのか教えてください。

このような場合は、一般的にはタイマ割り込みで1秒間をカウントします。
その間に何回入力があったかをカウントします。
1秒たつと、そのカウントを別の変数(仮にpps)に記録し、カウンタはクリアします。
表示は、その変数(pps)を表示します。

通常ルーチンで今と同じようにカウントします。
割り込みルーチンで、1秒を検知したらカウント値の保存とクリアを行います。
16F84は8ビットタイマしかないので、内部タイマー割り込みを使い、何回かタイマー割り込みがかかったら1秒になるかをカウントして、その回数になったときに処理します。

クロックは4MHz(基本命令は4サイクルで1命令)で計算すれば、タイマー割り込みルーチンのカウントすうは近い値で計算できるでしょう。


>2,合計のカウンタ-と秒速何粒落ちているかプログラムを1つのPICに入れて、動作の最初時に選
> 択できるようにしたいのですが、どのようにしたらよいでしょうか。

RA4があいているので、そこにSWをつけて、表示を変えるのがかんたんでしょうね。
カウントは、合計用と1秒用と両方カウントすればいいと思います。


PIC16F84は有名なチップで日本語マニュアルもありますので、しっかり読んでください。
タイマー割り込みについても検索すれば、いろいろと見つかると思います。

org 4
goto start
とありますが、割り込みルーチンはここから記述します。

宿題がんばってください。

>回路図を見て、基板を作れる程度、プログラムは書いてあるのを打ち込める程度で、意味はまったくわかりません。

この状態では正直つらいですね。

まず、回路図ですが、RA0-RA3は表示する4桁の7セグメントLEDを選択するようになっています。
瞬間的には1桁ずつの7セグメントLEDを点灯していますが、高速に桁を切り替えることで全桁点灯しているように見えます。(目の残像です)
2SA1015はPNPトランジスタですので、RA0-RA2の各ビットを0にすることによりトランジスタがONします。(ct12やswt10でRA0-R...続きを読む


人気Q&Aランキング