打印

[求助]PIC单片机 系统时钟和timer1同时使用32.768KHZ晶振的问题

[复制链接]
5334|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pharkeu|  楼主 | 2013-1-27 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pharkeu 于 2013-1-27 22:59 编辑

用的是12F576, 32.768K晶振接的OSC1,OSC2之间,分别电容22PF接地。波形用示波器量过是有的,但是无论如何配置,timer1都没办法是用这个外置的时钟源(TMR1CS置1时,timer1似乎无时钟输入,timer1中断始终无法产生)。但是,TMR1CS置0时,选择 Fosc/4(内部系统时钟,此时工作正常,输出方波,但是输入时钟已是四分频后的频率)。

用16F684搭了一个同样的电路,同时配置timer1设置,是一样的问题,搞了好几天,没弄出来,有点郁闷,看说明文档,在LP模式下,timer1是可以使用这个外部时钟源的。。。不晓得问题出在哪里???特来求助,具体代码如下:
__CONFIG(WDTDIS & PROTECT & MCLRDIS & PWRTDIS & BORDIS & LP);
void Timer1_init()
{
        TMR1H =0x80;
        TMR1L = 0x00;
        GIE= 1;            
        PEIE=1;            
        TMR1IE=1;      
        
        TMR1GE = 0;
        T1OSCEN = 1;
        TMR1CS = 1;  //选择外部时钟
        T1CKPS0 = 0;
        T1CKPS1 = 0;
        T1SYNC = 1;
        TMR1ON = 1; // 开启T1
}
void main()
{
        CMCON=0x07;
        ANSEL = 0x00; //no AD port.
        TRISIO = 0x04; //GP2 as input, GP1 as output
        Timer1_init();
        while(1);
}

void interrupt ISR(void)
  {
        if(TMR1IF)  
        {
                TMR1IF = 0;
                TMR1H =0x80;
                TMR1L = 0x00;
                GPIO1 = !GPIO1 ;   //输出方波
        }
}
沙发
pharkeu|  楼主 | 2013-1-28 14:14 | 只看该作者
自己顶一下。。。盼高手出现。

使用特权

评论回复
板凳
zhaoyu2005| | 2013-1-28 15:10 | 只看该作者
最好先确定片子是否正常启动运行了,32768的晶振通常不会配22pF的负载电容,大了,12.5pF常见,小的6pF。定时器与你用的多少频率的外部晶振无关,只要时钟正常,并且能使用这个时钟,都应该能正常工作的。
如果定时器挑外部时钟的频率,你认为这个设计能通过公司内部的审核么?

使用特权

评论回复
地板
jlass| | 2013-1-28 16:14 | 只看该作者
22pF的负载电容确实大了

使用特权

评论回复
5
pharkeu|  楼主 | 2013-1-28 16:26 | 只看该作者
zhaoyu2005 发表于 2013-1-28 15:10
最好先确定片子是否正常启动运行了,32768的晶振通常不会配22pF的负载电容,大了,12.5pF常见,小的6pF。定 ...

22PF的电容可能是大了,但是正常起振了,可以从管脚处量得 32K HZ的正弦波。
另外,片子是正常起来的,因为我在主程序中可以置高置低某个口,可以量出波形来。就是Timer1的中断无法进入。
这个Timer1要使用这个外部时钟作计数源是有些讲究的,我看过网上一些人的描述。但是按照他们的说法配了,总是不成功。
另外,我用MPLAB SIM作仿真,结果也是一样的,如果选用内部源(FOSC/4),可以看到Timer1正常计数,但是一选 外部时钟源,Timer1不计数。

使用特权

评论回复
6
zhaoyu2005| | 2013-1-29 14:09 | 只看该作者
刚才看了PIC16F684(官网没12F576,用过12F675)的datasheet,明白咋回事了。按照正常的情况你的要求或者目的是无法实现的,用T1CLKI的前提是这个引脚没有被用作其他功能,然后被配置成T1CLKI,而你之前已经配置成外部晶振的引脚了(配置字里的LP),已经被用作其他功能了,并且是通过配置位配置的,级别(优先度)要高于软件中的设置,所以这个外置的32768的晶振产生的时钟被用作系统时钟了,而不能用作定时器的时钟了。
注意看PIC16F684的6.2.2的第三段话话,括号里已经说得很明白了:使用内部振荡器并且不带时钟输出时才可以。

使用特权

评论回复
7
pharkeu|  楼主 | 2013-1-29 14:48 | 只看该作者
昨天在另外一个论坛上,有一位仁兄已经帮我解决了。
但是楼上这位说的是对的,我其实这里原来也试过这个配置,但是没有波形输出,其间我犯了一个错误,在线编程线连着,导致系统没有正常运行,所以看不出效果。这里与大家分享一下,一定要注意这个,不然试来试去,走了弯路。
结贴。

使用特权

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

本版积分规则

1

主题

4

帖子

1

粉丝