|
为何单步调试时正确,但是直接执行(点go)时错误呢?
[复制链接]
郁闷啊……一天又结束了……
单步时我用串口调试助手向430发1时执行while里边的语句,p2.0输出为高,p1.0和p1.1上的发光二极管的状态也变了,但是直接运行时就错了,也就是发送1时没有上面的现象,这是为啥呢?
谢谢
程序如下:
#include "msp430x16x.h"
void Init_Clock() {
unsigned char i;
BCSCTL1=0x00;//XT2--ON
do {
IFG1&=~OFIFG;
for(i=0;i<2;i++);
}while((IFG1&OFIFG)==OFIFG);
BCSCTL2=SELM1+SELS;//XT2--SMCLK,XT2--MCLK
}
void Init_Port() {
P1SEL=0;
P2SEL=0;
P2DIR=BIT0;
P2OUT&=~BIT0;
P5DIR=BIT5; //配置LED
P5OUT=BIT5;
P1DIR=BIT0+BIT1;
P1OUT&=~BIT0;
P1OUT|=BIT1;
}
void Init_Urat1() {
U1BR0=0x22;//4M--SMCLK 波特率115200
U1BR1=0x00;
U1MCTL=0xed;
U1CTL=CHAR;//数据宽度8bit
U1TCTL=SSEL1;
ME2=URXE1+UTXE1;//使能接收与发送
P3SEL=BIT6+BIT7;//使能TXD与RXD引脚
P3DIR=BIT6;//TXD输出
}
void Send(int val) {
U1TXBUF=val;//写数据
while(!(IFG2&UTXIFG1));//等待发送完毕
//P1OUT^=0x03;
}
int Get_Char() {
while(!(IFG2&URXIFG1));//等待数据接收
return U1RXBUF;
}
void Init_System() {
WDTCTL=WDTPW+WDTHOLD;//关闭WDT
Init_Clock();//初始化系统时钟
Init_Port();//初始化端口
Init_Urat1();//初始化串口
}
void main()
{
int mm,qq;
int nn;
nn=1;
while(1){
Init_System();
mm=Get_Char();
Send(mm);
Send(nn);
qq=mm-nn;
Send(qq);
while(qq==0)
{
P1OUT|=BIT0;
P1OUT&=~BIT1;
P2OUT|=BIT0;
break;
}
}
}
|
|