3050|4

114

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

时钟初始化do while语句跳不出来 [复制链接]

// 时钟初始化程序
void Clock_Init()
{
  unsigned char i;
  P5SEL=0X0C;
  P7SEL=0X00;
  //_bis_SR_register(SCG0);
  UCSCTL6=0X4001;                                    //打开XT2,XT1,SMCLK
  UCSCTL4|=SELM_5+SELS_5;                           //MCLK,SMCLK都选择XT2
  UCSCTL5|=DIVS_3+DIVM_0;                          //MCLK不分频,SMCLK8分频
  do
  {
    UCSCTL7 &= ~(XT2OFFG);                  // Clear XT1 & DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear OSC Fault flag
    for (i = 0xFF; i > 0; i--) ;           // Time for flag to set
   
  }while ( (SFRIFG1 & OFIFG) );
}
上面那个程序中do_while语句跳不出来,一直在执行,如果把while条件直接屏蔽变为while(0),就可以跳出循环了,但是这个子函数必须得一步一步烧写,点击go会导致串口信息发送回收不匹配,比如说不管你发送多少字符,回收的不是80就是00
 
点赞 关注

回复
举报

114

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
补充下芯片使用的是430的5438A
 
 

回复

114

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
原因找到了,虽然XT1晶振我没有使用,我把XT1端口的SEL改成0x00了,这导致XT1的错误标志始终为1,所以do while循环跳不出来。
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(高级)

4
 
出现了一个新的问题,就是串口通讯中,同样的设置,串口0跟串口1都能够正常通讯,但是串口3就没反应,测量芯片的引脚电压为T为-5.6V,R跟地为0V,这都正常,寄存器的值在仿真软件中看到的也跟USCIA0和USCIA1一样,P9的4,5引脚也都正常,第二功能也设置了,可惜就是通讯没反应,求高手帮忙。
我把程序贴出来
//串口2初始化
void UART1_Init()
{
  P5SEL |= 0xc0;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  UCA1BR0 = 104;                              // 1MHz 9600 (see User's Guide)
  UCA1BR1 = 0;                              // 1MHz 9600
  UCA1MCTL |= 0x02;            // Modulation UCBRSx=1, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
}
//串口3初始化
void UART2_Init()
{
  P9SEL |= 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA2CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA2CTL1 |= UCSSEL_2;                     // SMCLK
  UCA2BR0 = 104;                              // 1MHz 9600 (see User's Guide)
  UCA2BR1 = 0;                              // 1MHz 9600
  UCA2MCTL |= 0x02;            // Modulation UCBRSx=1, UCBRFx=0
  UCA2CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA2IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
}
//串口2中断程序
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
//unsigned char data=0;
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG

   while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?

   UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
   //Send_Byte(data);
   break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}
//串口3中断程序
#pragma vector=USCI_A2_VECTOR
__interrupt void USCI_A2_ISR(void)
{
//unsigned char data=0;
  switch(__even_in_range(UCA2IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
   while (!(UCA2IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
   UCA2TXBUF = UCA2RXBUF;                  // TX -> RXed character
   //Send_Byte(data);
   break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(高级)

5
 
补充下,就是串口3这个232芯片我就用了一个232,还有个232接口被我悬空了,则会不会造成影响?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表