打印

楼上请把**仔细看完,不对TL0赋值是我比较自豪的地方。

[复制链接]
楼主: 救火车
手机看帖
扫描二维码
随时随地手机跟帖
21
patrick007| | 2008-10-11 18:11 | 只看该作者 回帖奖励 |倒序浏览

re

很好
工程师就是要向钱看。
学十几,二十几年,难道还能不如卖茶蛋的?
要不国外的书那么贵呢。
我支持楼主。

使用特权

评论回复
22
oufuqiang| | 2008-10-12 10:02 | 只看该作者

呵呵,中断定时误差怎么会那么大呢……10%

使用特权

评论回复
23
救火车|  楼主 | 2008-10-12 12:05 | 只看该作者

一定是算错了。

使用特权

评论回复
24
呆板书生| | 2008-10-12 13:58 | 只看该作者

同意楼上

使用特权

评论回复
25
NE5532| | 2008-10-12 14:49 | 只看该作者

呃……又见“精确延时”

精确到几个ppm呢?

使用特权

评论回复
26
古道热肠| | 2008-10-13 12:25 | 只看该作者

精确定时,很多单片机系统都会用到

做的工具蛮直观.

使用特权

评论回复
27
电子尘埃| | 2008-10-13 16:00 | 只看该作者

热烈欢迎这样的广告

使用特权

评论回复
28
Ventter| | 2008-10-13 21:47 | 只看该作者

……

俺一般写asm,数机器周期……一般来说很准的……
反正俺自己弄着玩精度够用了。

不过这个软件看起来很直观~赞。

使用特权

评论回复
29
atuz| | 2008-10-13 22:50 | 只看该作者

不对TL0赋值也没啥可自豪的吧

这不过是正常的方法而已,难道你以前都不这样做?贴一段RTX51TNY.A51代码,是更新T0中断的。
  ; Update Timer
        CLR    TR0
        MOV    A,TL0
        ADD    A,#LOW (?RTX_CLOCK + 7)
        MOV    TL0,A
        MOV    A,TH0
        ADDC    A,#HIGH (?RTX_CLOCK + 7)
        MOV    TH0,A
        SETB    TR0

使用特权

评论回复
30
horse7812| | 2008-10-15 16:59 | 只看该作者

精确是相对的,误差是绝对的,真理是有局限性的.

"Update Timer"在执行过程中被中断了怎么办?

使用特权

评论回复
31
atuz| | 2008-10-16 00:42 | 只看该作者

。。。。。


"Update Timer"在执行过程中被中断了怎么办?
 
------------------------------------------------------

既然想准确定时,T0中断怎么可能会设置的能被中断呢?

使用特权

评论回复
32
horse7812| | 2008-10-16 14:12 | 只看该作者

........顶下楼猪........


"Update Timer"在执行过程中被中断了怎么办?

------------------------------------------------------

既然想准确定时,T0中断怎么可能会设置的能被中断呢?


--------------------------------------------------------------
既然想准确定时,T0中断怎么可能会设置成中断响应可能需要等待呢?




楼主的程序在一定范围内还是挺不错的,一条指令搞定定时器寄存器初始值,有创意!

--------------------------------------------------------------

使用特权

评论回复
33
WOAILYMD| | 2008-10-16 16:35 | 只看该作者

读后感

1、GATE=1的这种用法,我以前也没有注意过,在整理本文时才发现的。这也是我最新的学习收获。

---------------------------------------------------------------------

周立功<<LPC900系列Flash单片机应用技术》里面有这个用法。哈哈,我可不是推销的。


2、中断允许控制:上一步产生中断请求(TF0被置1),并代表会响应中断。还要看中断允许控制位...

---------------------------------------------------------------------

并“不”代表会响应中断,少个不字,差之毫厘,谬之千里呀!

3、溢出时间是5毫秒,相当1秒的20分之一。

---------------------------------------------------------------------

200分之一,不过,作者下面一句就又对了,所以,无甚影响。

4、单片机要把当前的指令执行完。51的指令是1到4个周期。如果赶上两周期指令,就会延误一个指令周期。最慢的情况会延误3个周期响应中断。这点误差倒是没什么关系。

---------------------------------------------------------------------
如果这个指令刚开始执行,就发生了定时器中断,则会延误的周期分别应按2周期和4周期,这样时序严谨点。


5、可以改成 TH0=TH0+0xEE;但这样也会有一点点问题,我们不在这里详细讨论。

--------------------------------------------------------------------

这个小问题就是:TH0(=TH0+0xEE)如果溢出定时就变味了(大于255,0XFF)。对不?

6、
if(1==time_allow)          //如果报时允许
{
    if(fmq_times++>200) 
{
    fmq_times=0;
spk=1;         //蜂鸣器停止发声
time_num--;    //报时次数减 1 
}  
if(100==fmq_times) spk=0;  //蜂鸣器发声 
if(0==time_num) time_allow=0;    //报时结束 清零报时标志位
}


------------------------------------------------------------

蜂鸣器放在中断服务程序里面有点BUG:

到了整点或者半点时候,蜂鸣器本应马上响,但因为放在中断服务程序里面,而且要if(100==fmq_times) spk=0;//蜂鸣器才发声 ,也就是说要经过100次5ms的中断后才发声,即总共延迟了500ms才发声。当然,这个延迟时间很短,用户能接收的,但如果修改后放入主程序,利用查询time_allow来启动发声,岂不是更准些。

void main(void)

{

   ......

   if (time_allow)

   {
     if(fmq_times>200)  //别忘了在终端服务程序里保留fmq_times++
     {
        fmq_times=0;
        spk=1;         //蜂鸣器停止发声
        time_num--;    //报时次数减 1 
      }  
     else
     {
        spk=0;        //蜂鸣器发声 

      }      
     if(0==time_num) 
     {
      
        time_allow=0;    //报时结束 清零报时标志位
     
      }
 
     ......

}


以上仅供商榷!有不当之处,请见谅!
    

使用特权

评论回复
34
救火车|  楼主 | 2008-10-16 18:01 | 只看该作者

感谢WOAILYMD大侠提出宝贵意见!!

回复33楼:
十分感谢你提出的问题。对于你提出的问题做出以下回复:
第二条所提书写时缺少“不”字,确实属于比较严重错误,已经更改。在此向所有初学者朋友表示歉意。
第三条所提“20分之一”也为书写错误,已经更改。
第六条所提确实有一定误差,但作为时钟实验,对此要求并不严格。
再一次对你的认真态度表示衷心的感谢,以后我们会更加认真的校对所发的**。

使用特权

评论回复
35
SkyCode| | 2008-10-17 18:54 | 只看该作者

哈哈 好帖

一定要顶

使用特权

评论回复
36
zzty| | 2008-10-18 08:30 | 只看该作者

见识了

使用特权

评论回复
37
天雨粟| | 2008-10-19 10:24 | 只看该作者

请问楼主老师

能否给出实验数据.
如晶振实测误差是多少?如以20ppm计,一天8万多个秒,累积误差理论上是一个多秒,按您的方式处理后,实际计时误差与理论计算是否吻合?
另外谐振电容容量对计时有没有影响?对计时系统取什么样的值为好?我一般取30,有的资料上讲60~70振荡较稳定,到底如何取,请指教!谢谢!

使用特权

评论回复
38
xian123| | 2008-10-20 12:58 | 只看该作者

学习

呵呵,学习了,很详细

使用特权

评论回复
39
wzh801114| | 2008-10-22 14:59 | 只看该作者

用我们的时钟IC吧

当您在科研、生产、采购时碰到疑难,当您苦苦寻觅而一筹莫展,请联系我们,或许我们有您急需的产品,或许您的困难将迎刃而解!

全面替代DS1302/DS1307/HT1380/HT1381/PCF8563/PCF8583/R5C372/R8025
可充电电池
非易失储存器
时钟芯片
工业级晶振
数字温度补偿接口
I2C总线接口
年误差不超过2分钟
使用寿命5至10年

详细资料和产品价绍你可以看一下我们的网站:

www.whwave.com.cn

深圳兴威帆电子技术有限公司

王子华

0755-83111835

13538258113

使用特权

评论回复
40
懒人| | 2008-10-22 15:10 | 只看该作者

记号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则