while(!(SLEEP & 0x40)) 这里搞不懂为什么能够判断稳定呢?两处的判断为什么不一样呢?

/*****************************************
设定系统主时钟函数
*****************************************/
void SET_MAIN_CLOCK(source)
{
if(source) {
CLKCONCMD |= 0x40; /*RC*/
while(!(CLKCONSTA &0X40)); /*待稳*/
}
else {
CLKCONCMD &= ~0x47; /*晶振*/
while((CLKCONSTA &0X40)); /*待稳*/
}
}
谢谢啊!好的加分啊!

楼主看看数据手册关于CLKCONCMD 和CLKCONSTA 这个寄存器的描述呢
因为从这上面看不出任何问题,命令应该是选择时钟源,如果对于不同的时钟源所产生的稳定指示相反,那么程序没问题;如果相同,则程序有问题。自然,为什么稳定楼主就清楚了。追问

还是看不懂,虽然“与”可以判断当前系统时钟,但不懂怎么判断稳定?

追答

从D6的解释为:0为32M晶振;1为RC震荡;即:更具的的CMD,硬件为将该为置相应值。
如果CMD为32M晶振,则时钟稳定后就将D6清0;如果为RC,则D6置1;
“&” 的意思是对应位同为“1”则为1;“!”的意思是后面为0则为真,后面不为0则为假。
那么:while(!(CLKCONSTA &0X40);表示D6为0时,此条语句一直执行,直到D6为1;当D6为1时,表示当前系统时钟为RC;
同理,while((CLKCONSTA &0X40);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-12
你这芯片有2个时钟源,一个阻容的能快速起动,一个是晶体的只能二选一工作
Clckconmd 为时钟模式设置寄存器
CLKCONsTA为时钟状态寄存器。
c𠃊ck CLOCK
CON CTRL
MD MODE
STA STUTAR本回答被网友采纳
第2个回答  2013-10-11
两个不同的命令当然要有不一样的判断.
第3个回答  2013-10-11
你。。。这不是if else 语句吗?肯定是不同的命令,得到两个不同的频率啊。
相似回答