本帖最后由 lowe0822 于 2014-9-15 08:52 编辑
20140915修改新发现。
430f2619
外接XT2 16M
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
_BIS_SR(OSCOFF+SCO0);//将XT1和DCO关掉,因为这些晶振不接开着也会产生OFIFG=1;
P5DIR |= 0x10; P5SEL |= 0x10; //IO管脚配置为MCLK输出,查看16M
BCSCTL1 &= ~XT2OFF;//开启XT2
do
{
IFG1 &= ~OFIFG; //清晶振错误标志
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG)); //等待晶振无错误,稳定。
BCSCTL2 |= SELM_2; // MCLK= XT2
}
void main()
{
for(i=0;i<10000;i++)
{
nop();
}
tx_char(0x01);
tx_char(0x02);
tx_char(0x03);
tx_char(0x04);
}
main程序能够正常工作,IO管脚输出波形也很好,为16M,但是调试时将程序打断点停下,发现OFIFG=1。
单步执行,初始化后执行无数个NOP都不会发生OFIFG=1,只有当发送串口时大概发送个十个左右会出现OFIFG=1。
我的XT2肯定是没问题的,OFIFG也不会因为XT1,DCO未接从而置1。
给我的感觉是好像串口导致的,波特率应该是对的,波特率设置 R1=0x06 R0=0x82 MCL=0x0c ,因为接收端打印无错误。串口开RX中断未开TX中断。
难道因为波特率时钟精度不够导致的判断为OFIFG=1??????????
急 |