• 締切済み

プログラムに詳しい方お願いします

プログラム詳しい方どなたかお願いします。 これは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 */

みんなの回答

回答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