当前位置: 代码迷 >> 单片机 >> 知道在哪跑飞,跑飞的详细原因有哪位高手能解释一下
  详细解决方案

知道在哪跑飞,跑飞的详细原因有哪位高手能解释一下

热度:1001   发布时间:2016-04-28 16:36:11.0
知道在哪跑飞,跑飞的详细原因有谁能解释一下。

今天出现这样的问题:

将这个中断函数注释掉:

#pragma vector=USCI_B2_VECTOR
__interrupt void USCI_B2_ISR(void)
{
 // __bis_SR_register(0x0000);
  switch(__even_in_range(UCB2IV,4))
  {
  case 0: break; // Vector 0 - no interrupt
  case 2:
  // Vector 2 - RXIFG
  dat=UCB2RXBUF; // Test for correct character RX'd
 // __bis_SR_register(GIE); 
  break;
  case 4: break; // Vector 4 - TXIFG
  default: break;
  }
}


程序就会在红字处跑飞: 
void Fram_WR_ready()
{
  P2OUT |=BIT3;
  __delay_cycles(2000);
  
  //铁电寄存器操作(datasheet。Figure5)
  FM_CS_0; //选中铁电  
UCB2TXBUF = 0x06;//铁电寄存器写使能op-code
while (!(UCB2IFG&UCTXIFG)); __delay_cycles(40000);
  FM_CS_1;//不选中铁电;
  __delay_cycles(2000); 
}



相关的初始化:
void Fram_Init(void)
{
  P2DIR |= BIT3; // Set P10.3.6.7 to output direction
  P2OUT|=BIT3;
  P9SEL |= 0x0E; // P9.1.2.3 option select
  UCB2CTL1 |= UCSWRST; // **Put state machine in reset**
  UCB2CTL0 = UCMST+UCSYNC+UCMSB+UCCKPH; // 3-pin, 8-bit SPI master +UCCKPL
  // Clock polarity high, MSB
  UCB2CTL1 |= UCSSEL_1; //时钟选择
  UCB2BR0 = 0x58; //设置波特率
  UCB2BR1 = 0x14;  
  UCB2CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
  UCB2IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}



------解决方案--------------------
看看看门狗什么的
------解决方案--------------------
因为你使能收中断了,而又没有指定收中断函数,收中断对应的向量没准是什么,可能是因为你一发对方回了数据,一执行中断向量处的东西就跑飞了。