打印

PIC16F1946无法四倍频

[复制链接]
6687|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我使用的PIC16F1946,使能内部晶振为8M,用示波器可以看到,8M晶振已经工作,但是PLLx4,为什么不起任何作用,请高手给指点一下,小弟,谢过。
沙发
Ryanhsiung| | 2011-11-7 19:01 | 只看该作者
16系列有倍频吗,不知道啊!!

使用特权

评论回复
板凳
asspeed| | 2011-11-8 09:43 | 只看该作者
数据手册上已经有非常详细的描述,就那么几句话都懒的看?

使用特权

评论回复
地板
yewuyi| | 2011-11-8 10:11 | 只看该作者
从这个图片看,使用外部时钟源的时候可能是无法通过PLL实现给系统倍频的。

Image00000.jpg (94.32 KB )

Image00000.jpg

使用特权

评论回复
5
asspeed| | 2011-11-8 10:32 | 只看该作者
外部振荡器和内部振荡器都可以支持4倍PLL,但内部振荡器要使用PLL,必须配置为8Mhz,系统最大时钟频率最大为32Mhz.

使用特权

评论回复
6
kumosheng|  楼主 | 2011-11-8 12:30 | 只看该作者
5# asspeed
楼上是说的对,但是就是无法倍频上啊,也就是PLLR寄存器无法置1,让人费解啊?又有谁能给提供点配置的代码,或者是汇编程序,我怀疑跟编译器有关系?

使用特权

评论回复
7
kumosheng|  楼主 | 2011-11-8 13:53 | 只看该作者
5楼你说的对啊,我是配置成8M后才倍频的,我用protues仿真可以看到已经倍频成功,但是为什么烧录到单片机里运行只有内部8M了呢!PLLEN使能与不使能是一个样,费解!
初始化:
config里设置enable PLLX4
程序里
OSCON = 0XF3;
PLLR 就一直为0

使用特权

评论回复
8
asspeed| | 2011-11-8 19:45 | 只看该作者
我非常怀疑你的"8Mhz的运行速度"的说法, 在内部8Mhz时钟+4xPLL状况下,其指令运行速率为8MIPS,
即一条指令运行时间为125ns。你自己好好检查一下

使用特权

评论回复
9
xaq79| | 2011-11-9 17:14 | 只看该作者
The 4X PLL may be enabled for use by one of two
methods:
1. Program the PLLEN bit in Configuration Word 2
to a ‘1’.
2. Write the SPLLEN bit in the OSCCON register to
a ‘1’. If the PLLEN bit in Configuration Word 2 is
programmed to a ‘1’, then the value of SPLLEN
is ignored.

使用特权

评论回复
10
xaq79| | 2011-11-9 17:15 | 只看该作者
仔细看看这2点说明

使用特权

评论回复
11
kumosheng|  楼主 | 2011-11-9 17:38 | 只看该作者
图片是configuration bits,大家都看到了吧!
程序代码为:
#include <htc.h>
#include "includes.h"
//__CONFIG (1,_FOSC_INTOSC & _WDTE_OFF & _nPWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF &_FCMEN_OFF);
//__CONFIG (2,_WRT_OFF & _VCAPEN_RA5 & _PLLEN_ON & _STVREN_ON & _BORV_27 & _nDEBUG_ON & _LVP_OFF);
void interrupt ISR(void);//interrupt
void gpio_init()
{
   TRISA0 = 0;
   ANSA0 = 0;
   TRISA2 = 0;
   ANSA2 = 0;
   RA0 = 1;
   RA2 = 1;
   TRISA1 = 0;
   ANSA1 = 0;
   RA1 = 0;
}
void Init_Timer2(void)
  {
   PR2 = 19;
   T2CKPS0 = 0;
   T2CKPS1 = 0;
   TMR2ON = 1;
   TMR2IE = 1;
  }
void interrupt ISR(void)
{
if(TMR2IF)
{
  TMR2IF = 0;
  RA0 ^=1;
}
}
void main(void)
{
//OSCCON = 0B11110011;
SPLLEN = 1;
IRCF3 = 1;
IRCF2 = 1;
IRCF1 = 1;
IRCF0 = 0 ;
SCS1 = 1;
SCS0 = 1;
gpio_init();
Init_Timer2();
PEIE = 1;
ei();
for(;;)
{;}

}

2011110905573517.jpg (37.85 KB )

2011110905573517.jpg

使用特权

评论回复
12
kumosheng|  楼主 | 2011-11-9 17:42 | 只看该作者
在此谢过各位大侠的热心,无法倍频,我都怀疑我的16F1946芯片是否是否是山寨的,还是我的编译器有什么问题,大家遇到过吗!编译器大家都用哪个版本的啊?

使用特权

评论回复
13
kumosheng|  楼主 | 2011-11-9 17:44 | 只看该作者
我的IDE是V8.66的,HI-TECH_v9.80(pro)**版的,我也试过45天试用版的了,都不行,无语了!

使用特权

评论回复
14
diweo| | 2011-11-9 21:13 | 只看该作者
你程序代码里是//__CONFIG,对话框里又选择“Configuration Bits set in code"  ???

使用特权

评论回复
15
wangningcg| | 2011-11-11 13:03 | 只看该作者
哈哈。
请楼主注意OSCCON = 0B11110011;寄存器

使用特权

评论回复
16
asspeed| | 2011-11-11 15:59 | 只看该作者
如果真如LS所说,很多人都要内牛满面了。

使用特权

评论回复
17
kumosheng|  楼主 | 2011-11-17 11:45 | 只看该作者
谢谢楼主的提示,是我弄错啦! 15# wangningcg

使用特权

评论回复
18
兰天白云| | 2011-11-17 16:33 | 只看该作者
应该是设置问题,再查查FOSC和SCS设置

使用特权

评论回复
19
xubx83| | 2011-11-18 16:24 | 只看该作者
哈哈。
请楼主注意OSCCON = 0B11110011;寄存器
wangningcg 发表于 2011-11-11 13:03


OSCCON=0b11110011;对了规格书,看哪里有没问题。大师能不能指点下?

使用特权

评论回复
20
xwhua188| | 2012-4-8 12:17 | 只看该作者
看了半天,到底是怎么弄的呀?只知道你弄好了,也不说说怎么弄好的。

使用特权

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

本版积分规则

4

主题

68

帖子

1

粉丝