| 
 
| 本帖最后由 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??????????
 
 急
 | 
 |