プログラム詳しい方どなたかお願いします。
これはDCチョッパの自動制御のプログラムなんですが、フローチャートで示すことはできますか?
できればその動作の説明もお願いします。
#include "_ffmc16.h"
#include "extern.h"
#include "monitor.h"
unsigned int LED=0xE0;
unsigned long LOOP=60000;
#define PRD 255
unsigned int ON=10;
unsigned int AN0=0;
void main(void)
{
long i=0;
__set_il(7);
__EI(); /* enable interrupt(for Accemic) */
IO_PDR1.byte=0xF7;
IO_DDR1.byte=0x1F;
IO_PRL01.byte.PRLL1=ON;
IO_PRL01.byte.PRLH1=PRD-ON;
IO_PPG01.byte=0x00;
IO_PPGC01.word=0xA100;
IO_DDR5.byte=0x00;
IO_ADCSH.bit.BUSY=0;
IO_ADER.byte=0x07;
IO_ADCSL.byte=0x92;
IO_ADCRLH.byte.ADCRH=0xF8;
IO_ADCSH.bit.STRT=1;
while(1){ /* endless loop */
IO_PDR1.byte=LED;
//for (i=LOOP;i--;i>0)IO_PDR1.byte=LED;
//for (i=LOOP;i--;i>0)IO_PDR1.byte=0xFF;
IO_PRL01.byte.PRLL1=ON;
IO_PRL01.byte.PRLH1=PRD-ON;
AN0=IO_ADCRLH.DATA8;
if(AN0<100){ON=ON+1;}
else if(AN0>100){ON=ON-1;}
if(ON<0){ON=0;}
if(ON>150){ON=150;}
for(i=1000;i--;i>0){}
}
}
/*****************************************************************************
interrupt routine
******************************************************************************/
/* reload timer interrupt routine */
__interrupt void reload_int(void)
{
}
/* ADC interrupt routine */
__interrupt void ADC_int(void)
{
}
/* Ext interrupt routine */
__interrupt void ext_int(void)
{
}
/* Vector Table */
#pragma section INTVECT,locate=0xfffc00
#pragma intvect _start 0x8 0x0 /* Reset Vector */
#pragma intvect reload_int 17 /* reload timer interrupt vecter */
#pragma intvect ADC_int 18 /* AD converter Vector */
#pragma intvect ext_int 24 /* Ext Interrupt vecter */
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
そもそも、どんなマイコンなのかわからないので、なにがなんだか。
ただ、動作自体は
・AD 入力を(外部のある点の電圧を)読み込んで、
・その値が(デジタル値で)100になるようにチョッパ制御している。
・ひとつの出力サイクルは、ON時間 OFF時間が、それぞれ、変数 ON, OFF の値で制御されている
・それは、IO_PRL01.byte.PRLL1(多分、出力 Low 継続時間)と、IO_PRL01.byte.PRLH1(多分、出力 High 継続時間)を与えることで、ハードウエア的なタイマで制御される。
・監視電圧が低ければ、変数 ON をインクリメントすることで、出力 ON 時間を長くする
・監視電圧が高ければ、変数 ON をデクリメントすることで、出力 ON 時間を短くする
・変数 ON が、0 - 150 の間に収まるように修正する(ON が unsined なので、この修正は失敗するケースがある)
・(多分)出力1周期に相当する間、待つ。でも、タイマと同期してないので、あんまりかけ離れたウエイトだと困るかも。
・ついでに言えば、_start() というエントリがないけど、どこかにあるのだろうか。
こんな感じ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で簡単なパックマンゲーム...
-
C言語で%を使わない余りの出し方
-
課題;素因数分解
-
線形補間法プログラム(C++)
-
intとlongは同じ?
-
unsigned型のビット構成を表示...
-
再起呼び出しの回数をカウント...
-
異なるn個の整数からr個の整数...
-
画像の拡大・縮小
-
直線補間について
-
2の補数を計算するプログラム
-
カードシャッフルのブログラム...
-
c言語プログラミングについて f...
-
C言語の問題
-
C言語
-
argvのNULLチェック
-
C言語のプログラムについて(...
-
以下のプログラムはOpenCVで画...
-
OpenCVによる4値化について
-
C++で表を作成したいのです ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
再帰処理をループ処理に変換
-
16bitで乱数を生成する方法
-
C++ Debug Errorについて教えて
おすすめ情報