在开发程序计算555定时器IC产生的脉冲的频率和脉冲宽度时,通过PC并行端口到达PC。我注意到每次运行代码时都会显示不同的值,因此我开始测试循环和计时器的准确性。我已经运行了以下代码并指出它们不准确(我可能错了,如果我错了,请纠正我!):
对于计时器:
int sec = 0;
private void button2_Click(object sender, EventArgs e)
{
sec = DateTime.Now.Second;
i = 0;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (sec == DateTime.Now.Second)
{
i++;
}
else
{
timer1.Enabled = false;
MessageBox.Show(i.ToString(),"Timer Output");
}
}
输出: 应该相同,但是:
对于循环:
private void button1_Click(object sender, EventArgs e)
{
i = 0;
CheckForIllegalCrossThreadCalls = false;
Thread t1 = new Thread(LoopTest);
t1.Start();
}
void LoopTest()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
this.Cursor = Cursors.WaitCursor;
while (true)
{
if (sw.ElapsedMilliseconds != 1000)
{
i++;
}
else
{
break;
}
}
sw.Stop();
this.Cursor = Cursors.Default;
MessageBox.Show(i.ToString(), "Loop Output");
}
输出: 应该相同,但是:
我应该怎么做才能使循环和计时器准确,有什么办法吗?或者我必须去复杂的C代码和DOS?
我认为这是在这个问题中得到错误值的基本原因:Count Parallel port input frequency - C#