[PIC®/AVR®/dsPIC®产品]

关于pic单片机系统晶振的问题....

[复制链接]
7206|29
手机看帖
扫描二维码
随时随地手机跟帖
Rain_King|  楼主 | 2013-10-9 16:47 | 显示全部楼层 |阅读模式
本帖最后由 Rain_King 于 2013-10-9 16:48 编辑

     1 、我使用的单片机是pic16f883,晶振是16M,我的配置为设置的是HS 振荡模式,并且禁止内外时钟切换模式。现在的问题是:我使用定时器0,预分频比是16,初始值是0x08,根据计算250*16*4*1/16=1ms的,可是我用示波器测试的时候,发现是4ms。足足把晶振降低了4倍,这导致我原先设置的PWM是36K,也只有9K。
     2、我进一步测试,把外部晶振去掉,单片机依然在工作,然后我修改OSCCON寄存器里面的IRCF(内部晶振),发现和示波器测试的时间吻合,这说明单片机的FOSC一直是使用的内部晶振,可是我设置的配置位是HS 振荡模式,并且禁止内外时钟切换模式,应该使用的是外部晶振啊。。。。现在就是想如何解释这个情况,是我哪里忽略了吗,还是什么没有设置好.....
wangch_sh| | 2013-10-9 17:02 | 显示全部楼层
内部晶振多少兆?

使用特权

评论回复
Rain_King|  楼主 | 2013-10-9 17:11 | 显示全部楼层
wangch_sh 发表于 2013-10-9 17:02
内部晶振多少兆?

内部的有很多可以设置,有8M,4M,2M,1M.....默认的是4M,和这个也是吻合的

使用特权

评论回复
Rain_King|  楼主 | 2013-10-9 22:43 | 显示全部楼层
没大神帮忙解答一下么............

使用特权

评论回复
yewuyi| | 2013-10-10 09:01 | 显示全部楼层
奇怪的问题背后,往往是一个更荒谬的错误。

1、检查你的芯片配置字,在MPLAB的CONFIG窗口实际看看到底是什么?
2、检查OSCCON这个寄存器的设置,对于PIC16F88X或者PIC16F91X系列,这个寄存器也能控制时钟源的选择。

使用特权

评论回复
NE5532| | 2013-10-10 09:49 | 显示全部楼层
建议用MP读取芯片配置字,看配置是多少,另外可以把16M晶体换成8M,看输出是否改变,如果不变,说明你用的根本不是外部晶体的时钟。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 11:08 | 显示全部楼层
问题已经解决了...是单片机坏了....换一个就OK了....另外谁如果有关晶振的问题不懂得话,可以问我,就是这个莫名其妙的问题,我把晶振算是搞懂了吧.....

使用特权

评论回复
yewuyi| | 2013-10-10 11:29 | 显示全部楼层
Rain_King 发表于 2013-10-10 11:08
问题已经解决了...是单片机坏了....换一个就OK了....另外谁如果有关晶振的问题不懂得话,可以问我,就是这 ...

踩一下:

你真懂了吗?考一考你,晶体振荡器和陶瓷振荡体的区别是哪些?不要翻书哦。。。

你真的认为是单片机坏了?
这颗芯片坏的却是太离谱了,竟然坏得让配置字可以反转使用?
我很怀疑单片机坏的结论是真实的原因。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 14:33 | 显示全部楼层
yewuyi 发表于 2013-10-10 11:29
踩一下:

你真懂了吗?考一考你,晶体振荡器和陶瓷振荡体的区别是哪些?不要翻书哦。。。

区别嘛,材料不一样,当然精度也肯定不一样了....晶体振荡是指的石英吗,这个效果肯定是妥妥的。。。当然我所指的了解是指我将pic单片机关于晶振的设置了解的还算可以。。。你怀疑是不是芯片坏了,我把晶振换了好几个,不行,最后才换的芯片。。。其实我在调试的时候就怀疑出问题了。因为有时候会出现一些无法理解的现象,例如,程序本来是好好的,然后我加一条几乎算是无关紧要的语句,然后运行的时候,显示会和之前的差距很大。。。。。还有语句一条都不改,有时候可以显示的很好,有时候却显示的无法让人理解(烧录几次的现象)....

使用特权

评论回复
yewuyi| | 2013-10-10 14:42 | 显示全部楼层
Rain_King 发表于 2013-10-10 14:33
区别嘛,材料不一样,当然精度也肯定不一样了....晶体振荡是指的石英吗,这个效果肯定是妥妥的。。。当然 ...

再踩一脚:

更加让我无法相信是MCU本身坏掉了,你所描述的现象,用一个老工程师眼睛来看,基本可以立马判断为设计问题。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 14:56 | 显示全部楼层
yewuyi 发表于 2013-10-10 14:42
再踩一脚:

更加让我无法相信是MCU本身坏掉了,你所描述的现象,用一个老工程师眼睛来看,基本可以立马 ...

额....如果是设计问题,那么为什么我换了芯片之后,现在工作的好好的呢:,其实是有些东西我没法描述清楚,例如我们在测试程序的时候,会用一个脚来测试是否运行到那个地步....我所加的程序就是
if(RB0==1)
{
  RB0=1;
}
else
{
   RB=0;
}
几乎就是加这种...就会导致程序运行的现象和不加的时候完全不一样,我的测试脚是没有使用的,悬空的...这种现象在换芯片后再也没有出现....所以我才得出是芯片内部有问题了...

使用特权

评论回复
yewuyi| | 2013-10-10 15:28 | 显示全部楼层
Rain_King 发表于 2013-10-10 14:56
额....如果是设计问题,那么为什么我换了芯片之后,现在工作的好好的呢:,其实是有些东西我没法描 ...

对于老工程师来说,都知道有一种叫着临界代码的名词,但你的代码中有这种东西时,就会出现一些时有时无奇异故障现象。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 15:31 | 显示全部楼层
yewuyi 发表于 2013-10-10 15:28
对于老工程师来说,都知道有一种叫着临界代码的名词,但你的代码中有这种东西时,就会出现一些时有时无奇 ...

哦....明白了....我驱动显示的是LED灯,我想应该是加一些代码后,有临界代码现象吧....我在优化优化我的代码....

使用特权

评论回复
jiabin1024| | 2013-10-10 15:55 | 显示全部楼层
Rain_King 发表于 2013-10-10 14:56
额....如果是设计问题,那么为什么我换了芯片之后,现在工作的好好的呢:,其实是有些东西我没法描 ...

你在这样加不出问题才怪。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 16:33 | 显示全部楼层
jiabin1024 发表于 2013-10-10 15:55
你在这样加不出问题才怪。

能解释一下为什么吗.......

使用特权

评论回复
wangch_sh| | 2013-10-10 16:47 | 显示全部楼层
你加的那段代码输入输出都没修改设置。。。。。

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 16:49 | 显示全部楼层
wangch_sh 发表于 2013-10-10 16:47
你加的那段代码输入输出都没修改设置。。。。。

脚肯定是设置过的啊,这个我不可能忽略的.......

使用特权

评论回复
wangch_sh| | 2013-10-10 17:01 | 显示全部楼层
if(RB0==1)
{
  RB0=1;
}
else
{
   RB=0;
}
是输入还是输出?

使用特权

评论回复
Rain_King|  楼主 | 2013-10-10 17:17 | 显示全部楼层
wangch_sh 发表于 2013-10-10 17:01
if(RB0==1)
{
  RB0=1;

测试脚,肯定是输出了.......

使用特权

评论回复
wangch_sh| | 2013-10-10 17:55 | 显示全部楼层
if(RB0==1)
输出怎么读它的状态?设成输入才好读它的状态吧。这不是51单片机。

使用特权

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

本版积分规则

个人签名:努力学习,积极回复,只为申请版主.......

29

主题

784

帖子

4

粉丝