アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラム詳しい方どなたかお願いします。

これは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件)

そもそも、どんなマイコンなのかわからないので、なにがなんだか。



ただ、動作自体は

・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() というエントリがないけど、どこかにあるのだろうか。

こんな感じ。
    • good
    • 0

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