打印

pic的定时器的启动问题

[复制链接]
4620|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近一直用的18f2520的片子,用的定时器0,带预分频器,256分频,16位的定时方式,为什么当执行完 :T0CONbits.TMR0ON = 1; (启动指令)  之后大概要过上长达22秒左右的时间才开始工作?
初始化如下

void TMER0_SET(void)
{
   
    TMR0H = 0XF9;
    TMR0L = 0X58;          //计数初值
    T0CON = 0X07;          //16位方式,内部时钟,分频率256,未使能
    INTCONbits.TMR0IE = 1; //中断使能
    INTCON2bits.TMR0IP = 0;//低优先级
   
}

难道定时器的启动如此之慢?
(可以确定单片机一上电就开始工作了!)
沙发
yewuyi| | 2010-2-22 10:04 | 只看该作者
呵呵,这些问题自己认真的看DATASHEET后,一般都会找到答案。

使用特权

评论回复
板凳
leizi2008|  楼主 | 2010-2-22 10:14 | 只看该作者
叶大虾:不知道您注意到没,我写的启动指令执行之后与定时器工作之间差了20多秒??
我一直在看datasheet,真的感觉不到是哪里不对劲?还求您点拨一下,做鬼也会感谢您的:P 2# yewuyi

使用特权

评论回复
地板
yewuyi| | 2010-2-22 11:46 | 只看该作者
你是怎么判断定时器启动延迟了20多秒的?

你给了一个初值,并确定了分频系数后启动定时器,到定时器发生中断溢出肯定是走一个时间的哦,你不会是把这个时间当成了你所谓的延迟了20多秒把?

使用特权

评论回复
5
leizi2008|  楼主 | 2010-2-22 14:37 | 只看该作者
我在定时中断中设置了一个检测输出,上电我就开始跑秒表到输出有检测信号停止秒表,用示波器观察的, 呵呵 其实是16.776960s=(65535*256)/1M,就是16位定时的最高时长,我已经解决问题,把 T0CON = 0X07;指令放在了装计数初值的前面,应该和datasheet上的这段有关:

“若将预分频器分配给Timer0 模块,所有以TMR0 寄存
器为写入对象的指令(如CLRF TMR0、MOVWF TMR0
和BSF TMR0 等)都将使预分频器的计数值清零。”

但具体为什么不是很清楚
4# yewuyi

使用特权

评论回复
6
yewuyi| | 2010-2-22 15:06 | 只看该作者
似乎和这段不太靠的上。

既然是所有写TMR0的指令都会导致分频器被清0,则那你把T0CON = 0X07放到写TMR0寄存器恰面后,不反而有问题了吗?

使用特权

评论回复
7
leizi2008|  楼主 | 2010-2-24 11:37 | 只看该作者
恩,还是没弄明白原因,还在继续寻找中…… 6# yewuyi

使用特权

评论回复
8
yewuyi| | 2010-2-24 11:39 | 只看该作者
感觉你是我在4楼所说的状况。

使用特权

评论回复
9
leizi2008|  楼主 | 2010-2-25 08:56 | 只看该作者
恩,就是你说的情况,第一次启动都要先从0开始计满65535个数 8# yewuyi

使用特权

评论回复
10
denvice| | 2013-4-11 10:40 | 只看该作者
本帖最后由 denvice 于 2013-4-11 10:43 编辑

这个原因,需要先操作高的再操作低的。不过你的比较奇怪,我的按照这个修改后就好了,我是赋值以后就立马启动了,不知道你的是不是因为启动比较迟的原因

123.png (78.41 KB )

123.png

使用特权

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

本版积分规则

33

主题

266

帖子

0

粉丝