奇怪的问题

[复制链接]
2218|7
 楼主| wenzong 发表于 2008-10-17 08:32 | 显示全部楼层 |阅读模式
想用TMR1内部时钟来做电子钟<br />具体做法如下:<br /><br />主时钟:4M<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1_Const&nbsp;&nbsp;&nbsp;&nbsp;(.65536-.31250+.7)<br /><br />程序每隔31.25ms产生一次中断<br /><br />后给TMR1赋初值:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIR1,TMR1IF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1CON,TMR1ON<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;low(T1_Const)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;&nbsp;TMR1L<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;high(T1_Const)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skpnc&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addlw&nbsp;&nbsp;&nbsp;&nbsp;.1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;&nbsp;TMR1H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1CON,TMR1ON&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTC&nbsp;&nbsp;&nbsp;;从C口输出脉冲<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。。。。。。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请100M数字示波器测RC0,显示频率16.0000Hz<br /><br />奇怪的是,只将31250改为6250,使程序每隔6.25ms产生一次中断<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1_Const&nbsp;&nbsp;&nbsp;&nbsp;(.65536-.6250+.7)<br /><br />请100M数字示波器测RC0,显示频率79.9896Hz<br /><br />怎么不为80.0000Hz?<br /><br />
 楼主| wenzong 发表于 2008-10-17 10:56 | 显示全部楼层

另外主程序不做任何事情,无别的中断

  
谈的元 发表于 2008-10-17 20:49 | 显示全部楼层

对头呀!怎么了,有一定误差呀

怎么可能那么理想?80?
 楼主| wenzong 发表于 2008-10-17 20:58 | 显示全部楼层

请问误差来源在哪里?

请问误差来源在哪里?<br />测量误差吗?<br /><br />谈的元&nbsp;发表于&nbsp;2008-10-17&nbsp;20:49&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />3楼:&nbsp;对头呀!怎么了,有一定误差呀&nbsp;<br /><br />怎么可能那么理想?80?<br />&nbsp;<br />&nbsp;<br />
xieyuanbin 发表于 2008-10-18 08:15 | 显示全部楼层

这个必定有误差,关键你允许误差多少.

示波器本身也有测量误差,你可测一下示波器本身的1KHZ方波看看频率,你晶振,及振荡电路都会引起误差.即使原子钟,也有10年1秒的误差.搞不懂为啥这样书生.
 楼主| wenzong 发表于 2008-10-18 09:10 | 显示全部楼层

有误差,就有误差来源,误差不会凭空产生

问题是:<br /><br />程序每隔31.25ms产生一次中断,输出16.0000Hz<br /><br />理论上倍频4倍(因为只是修改了程序)<br /><br />应该输出80.0000Hz(因为没有引入误差)<br /><br /><br />xieyuanbin&nbsp;发表于&nbsp;2008-10-18&nbsp;08:15&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />5楼:&nbsp;这个必定有误差,关键你允许误差多少.&nbsp;<br /><br />示波器本身也有测量误差,你可测一下示波器本身的1KHZ方波看看频率,你晶振,及振荡电路都会引起误差.即使原子钟,也有10年1秒的误差.搞不懂为啥这样书生.<br />&nbsp;<br />&nbsp;<br /><br />&nbsp;<br />&nbsp;<br />
zjh006 发表于 2008-10-18 10:03 | 显示全部楼层

主时钟:4M?

难道一点误差没有吗?
 楼主| wenzong 发表于 2008-10-18 13:35 | 显示全部楼层

跟主时钟频率没多大关系

跟主时钟频率没多大关系<br /><br />可能是示波器测量误差造成的<br /><br /><br />程序每隔31.25ms产生一次中断,输出16.0000Hz<br /><br />理论上倍频5倍(因为只是修改了程序)<br /><br />应该输出80.0000Hz(因为没有引入误差)<br /><br /><br /><br />zjh006&nbsp;发表于&nbsp;2008-10-18&nbsp;10:03&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />7楼:&nbsp;主时钟:4M?&nbsp;<br /><br />难道一点误差没有吗?<br /><br />&nbsp;<br />&nbsp;<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

158

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部