阅读:1760回复:14
PC104定时不准,偏慢大约10%,请问怎么回事?附代码
计时偏慢10%,请问为什么?怎样解决?
累计100次中断为1秒,与 秒表对照慢了大约10% void initialTimer(void) { setvect(TIMER_VECT, NewTimerISR); outportb(0x43, 0x34); /* Timer is set for 0xF000 * 813.8 ns = 50 ms */ outportb(0x40, 0x00); outportb(0x40, 0xF0); outportb(0x21, inportb(0x21) & 0xFE); } void interrupt NewTimerISR(void) { if(++TimerTick50mS >= 20) /* 1 Second = 50 mS * 20 */ { TimerFlag = 1; TimeSecCnt++; TimerTick50mS = 0; } SendEOI; /* #define SendEOI outportb(0x20,0x20) */ } void main(void) { initial...; while(1) { if(TimerFlag ) { TimerFlag =0; printf(\"\\n%d\",TimeSecCnt); } } } [编辑 - 6/5/03 by study51] |
|
最新喜欢:![]() |
沙发#
发布于:2003-06-05 19:13
我们买的几台连时钟都不准,可能质量有问题,你用的是那个公司的?
|
|
|
板凳#
发布于:2003-06-05 20:11
桑达的,你的呢?
我觉得应该不时钟的问题,因为厂商不应该犯这样的错误 |
|
地板#
发布于:2003-06-06 16:24
我用过研祥的104,都存在时钟不准,
我看过,都是类似DS12887一类的芯片,本身就精度不高 如果想高精度,就必须自己做时钟卡 |
|
地下室#
发布于:2003-06-06 23:48
我以前用的是digital logic公司的(是不是研祥啊?)就有这个问题,有几块时间差的离谱。
如果是ds12887就好了,datasheet上说误差是2s/月。我自己做的产品上误差不是很大。 现在我想有i-cop的试试 |
|
|
5楼#
发布于:2003-06-07 00:10
问个问题,pc104主板不是和ibm机兼容的嘛,在ibm机0x43不是分配给了pc喇叭吗?怎么还可以用来定时啊?我以前用的是系统的18.5s的中断。
|
|
|
6楼#
发布于:2003-06-07 09:26
我现在是在PC上面调试程序,结果同样不准。觉得应该是我自己的程序不对。大虾们帮我看看。 :(
|
|
7楼#
发布于:2003-06-07 21:40
碰到国类似的,解决方法是再引用一个计时精确的晶振。
|
|
8楼#
发布于:2003-06-07 21:47
碰到国类似的,解决方法是再引用一个计时精确的晶振。 你的意思是再自己做块卡? |
|
|
9楼#
发布于:2003-06-07 22:49
那么我的程序没有问题?
另外能不能帮忙写一个实时时钟(IRQ8)的例程?我自己写的不能动作,而且不知道怎样设定时间间隔,是不是outport(0x41,0x00);outport(0x41,0xF0);? |
|
10楼#
发布于:2003-06-07 22:52
还有如何给别人分?上次有给分的选项,现在没有了
|
|
11楼#
发布于:2003-06-07 23:12
[quote]碰到国类似的,解决方法是再引用一个计时精确的晶振。 你的意思是再自己做块卡? [/quote] 就是切断原来的晶震连线,连接自己卡上的晶震。 我们是作成上下层的,一样大。(共做了无层) |
|
12楼#
发布于:2003-06-07 23:30
还有如何给别人分?上次有给分的选项,现在没有了 只能给一次分。你给blue_wind了。 |
|
13楼#
发布于:2003-06-07 23:47
[quote][quote]碰到国类似的,解决方法是再引用一个计时精确的晶振。 你的意思是再自己做块卡? [/quote] 就是切断原来的晶震连线,连接自己卡上的晶震。 我们是作成上下层的,一样大。(共做了无层) [/quote] 这样做弄的不好,整块板子报废!而且你这样做可靠性是不是有问题啊。我觉得还做一块定时的卡,电路也很简单的,直接插在104总线上,不用时也可以拔掉。 |
|
|
14楼#
发布于:2003-06-08 00:08
有现成的中断资源,就用现成的好了。
而且,通常,即使板子很差,也不应该差到10%,所以自己以为程序有问题。 我加不了分,真遗憾 |
|