|
楼主 |
发表于 2011-10-26 11:34:48
|
显示全部楼层
回复【48楼】eduhf_123 经历
lz你把你t0中断服务程序中开始的“th0 = 0x4c;”改成如下这样试试:
tr0 = 0;
th0 = 0x4c-th0;
tr0 = 1;
如果还不行,用方式2吧。
-----------------------------------------------------------------------
感谢回复 不过我试了一下,误差比原来的还大。据我分析,应该是定时器被关闭后,没有补偿这3行代码执行时间所致。
不过我受你这个启发,把关闭、打开定时器代码去掉,只重装了th0,下面是执行的效果:(这是logger里面出来的数据,可以看到毫秒)
11:54:07.500 data received: ID 100 1 - 50 0 22 6, Length:5.
11:59:11.734 data received: ID 100 1 - 50 0 22 4, Length:5.
12:04:13.890 data received: ID 100 1 - 49 0 22 5, Length:5.
12:09:14.906 data received: ID 100 1 - 49 0 22 4, Length:5.
12:14:15.062 data received: ID 100 1 - 49 0 22 5, Length:5.
12:19:15.625 data received: ID 100 1 - 49 0 22 5, Length:5.
12:24:15.781 data received: ID 100 1 - 49 0 22 4, Length:5.
12:29:16.250 data received: ID 100 1 - 49 0 22 4, Length:5.
奇怪的是5分钟的定时飘忽不定,再次印证了42楼说的,但是为什么会这样呢? |
|