发表于:2003-02-28 11:06:00
楼主
我的源程序,用的是8选1的74ls151,主要功能,采集8路高频脉冲的平均频率。有位老师认为fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T12=fl_to_ulong(&temp);
这种语句花费时间比较长,可以加几句
watchdog_update();
这样就不容易发生超时错误了。
看门狗时间周期将近为0.84s,我用的对象是pulsecount input,它
在固定的时间内0。839秒,对输入边沿数计数,我要求平均频率,所以要除0.839.
我不太清楚看门狗的工作原理,在我的程序中一定要加几句
watchdog_update();吗?不加会有什么问题?请高手指点迷津。
#include<float.h>
IO_0 output bit a0;
IO_1 output bit a1;
IO_2 output bit a2;
const float_type f0839={0,0x3f,0,0x56,0xc8b4} /* 0.839 */;
float_type temp;
network output unsigned long T18,T17,T16,T15,T14,T13,T12,T11;
IO_4 input pulsecount ded io_total_ticks;
unsigned long pulse_value;
unsigned int k;
when(io_update_occurs(io_total_ticks))
{
switch(k){
case 0:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T18=fl_to_ulong(&temp);
io_out(a0,0);
io_out(a1,0);
io_out(a2,0);
break;
case 1:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T11=fl_to_ulong(&temp);
io_out(a0,0);
io_out(a1,0);
io_out(a2,1);
break;
case 2:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T15=fl_to_ulong(&temp);
io_out(a0,0);
io_out(a1,1);
io_out(a2,0);
break;
case 3:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T13=fl_to_ulong(&temp);
io_out(a0,0);
io_out(a1,1);
io_out(a2,1);
break;
case 4:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T17=fl_to_ulong(&temp);
io_out(a0,1);
io_out(a1,0);
io_out(a2,0);
break;
case 5:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T12=fl_to_ulong(&temp);
io_out(a0,1);
io_out(a1,0);
io_out(a2,1);
break;
case 6:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T16=fl_to_ulong(&temp);
io_out(a0,1);
io_out(a1,1);
io_out(a2,0);
break;
case 7:
pulse_value=io_in(io_total_ticks);
fl_from_ulong(pulse_value,&temp);
fl_div(&temp,&f0839,&temp);
T14=fl_to_ulong(&temp);
io_out(a0,1);
io_out(a1,1);
io_out(a2,1);
break;
}
k++;
if(k==8)
k=0;
}