智能车制作

标题: 单片机程序的问题...估计没有人能解答... [打印本页]

作者: henrys    时间: 2011-11-3 14:00
标题: 单片机程序的问题...估计没有人能解答...
本帖最后由 henrys 于 2011-11-3 14:01 编辑

void SetBusCLK_64M(void)
{   
    CLKSEL
=0X00;               
    PLLCTL_PLLON=1;         
    SYNR =0xc0|0x07;                        
    REFDV
=0x80|0x01;
    POSTDIV
=0x00;      
    _asm(nop);         
    _asm(nop);
   
while(!(CRGFLG_LOCK==1));      
    CLKSEL_PLLSEL =1;               

}
单片机每次运行到:
while(!(CRGFLG_LOCK==1));
这一句就停住了.......
程序不往下跑,一直停在这里...
所有的口都没有反应...
我改成:
while(!(CRGFLG_LOCK==0));
所有口就有反应了...
但是这样会造成系统不稳定的...
求解答~~~
此帖沉下去的几率很高啊!!!!


作者: sonwendi    时间: 2011-11-3 14:06
为啥不用 while(!CRGFLG_LOCK);  呢?
作者: 568581185    时间: 2011-11-3 14:10
  1. while(!(CRGFLG_LOCK==1));
复制代码
楼主,如果你的程序一直停在这,就表示你单片机的CRGFLG_LOCK一直是为0的
检测不到1,所以程序一直在这步空跳。。。。
不知道是你的硬件出了问题还是咋的
我们原来超过80M
作者: henrys    时间: 2011-11-3 14:12
回复 2# sonwendi


    我是自己做的系统板,程序可以烤进去的...
     用while(!CRGFLG_LOCK);的话
   是不是就是CRGFLG_LOCK=0的时候就会跳出这个循环了??
这样超频还有效吗??
作者: 568581185    时间: 2011-11-3 14:16
[attach]13228[/attach]楼主可以看下官方的说明
作者: sonwendi    时间: 2011-11-3 14:17
本帖最后由 sonwendi 于 2011-11-3 14:20 编辑

回复 4# henrys


    !的话意思是LOCK等于0,(!LOCK)就一直是1,while(1){}就是一直循环。
    我一直用超频90M的~
    LS截的图太大了,刷了半天~

  
  1. void MCU_PLL_Init(void) //XS锁相环设置
  2. {

  3. CLKSEL=0X00; //disengage PLL to system

  4. PLLCTL_PLLON=1; //turn on PLL
  5. SYNR =0xc0 | 0x2C; // VCOFRQ[7:6];SYNDIV[5:0]
  6. REFDV=0xc0 | 0x07; // REFFRQ[7:6];REFDIV[5:0] //fREF >12MHz// pllclock=2*osc*(1+SYNR)/(1+REFDV)=2*16*(1+44)/(1+7)=180MHz;
  7. POSTDIV=0x00; // POSTDIV[4:0], fPLL= fVCO/(2xPOSTDIV)=90Mhz
  8. _asm(nop);
  9. _asm(nop);
  10. _asm(nop);
  11. _asm(nop);
  12. while(!CRGFLG_LOCK); //when pll is steady ,then use it;

  13. CLKSEL_PLLSEL=1; //engage PLL to system;
  14. }
复制代码

作者: 568581185    时间: 2011-11-3 14:19
回复 4# henrys


   是有1才跳出循环哦呵呵
作者: dahuiwang2009    时间: 2011-11-3 14:23
while(!(CRGFLG_LOCK==0));
while(CRGFLG_LOCK==1);
这个你试试!!
作者: henrys    时间: 2011-11-3 14:25
回复 7# 568581185
我知道
CRGFLG_LOCK=0,
那么!CRGFLG_LOCK=0就是1嘛,谢谢哈~~
作者: henrys    时间: 2011-11-3 14:29
回复 6# sonwendi


    谢谢美女~~~我赶紧去试试~~
作者: henrys    时间: 2011-11-3 14:31
回复 8# dahuiwang2009


    谢谢~~我试试~~
作者: 568581185    时间: 2011-11-3 14:39
回复 11# henrys


   其实他是男的O(∩_∩)O哈哈~
楼主不要想错了
作者: henrys    时间: 2011-11-3 15:19
回复 2# sonwendi

               我刚刚试过了,一定要
                 while(!(CRGFLG_LOCK==0));      
                CLKSEL_PLLSEL =1;
才可以呢.......
纠结
作者: henrys    时间: 2011-11-3 15:27
回复 2# sonwendi


    而且还伴随着一些症状:舵机一直在抽搐,给单片机的2940超级烫...但是芯片一点都不烫...
作者: henrys    时间: 2011-11-3 15:55
回复 2# sonwendi


     while(!CRGFLG_LOCK);始终停留在这一句
也就是说
CRGFLG_LOCK一直都是0???
所以跳不出这个循环???
不会是硬件问题吧??
晕啊~~自己做 的系统板出问题了
作者: wgl404    时间: 2011-11-3 16:43
回复 2# sonwendi


    我説怎么看lz的程序不太习惯呢!
作者: henrys    时间: 2011-11-3 18:39
我把所有线拔了,就不烫了,但是还是老问题~~那句话就是过不了...
作者: sonwendi    时间: 2011-11-3 18:41
回复 12# 568581185


    被你发现了……
作者: sonwendi    时间: 2011-11-3 18:42
回复 15# henrys


    那试一试降频呢?如果频率太高可能会有问题,或者振荡电路不稳定?
作者: 568581185    时间: 2011-11-4 09:10
回复 18# sonwendi


   呵呵论坛上女生很少吧
哈哈
作者: sonwendi    时间: 2011-11-5 13:03
回复 20# 568581185


    这倒是,哈哈
作者: txgc    时间: 2012-6-28 01:41
SYNR =0xc0 | 0x2C; // VCOFRQ[7:6];SYNDIV[5:0]
我的程序运行到这一句会跳出,实在不知道怎么回事????
作者: Quagliarella    时间: 2012-8-4 09:44
我的遇到了你的问题   
程序过不去那一句了
请问你是怎么解决的





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2