JasonWangSE 发表于 2013-10-25 18:18
应该要看你的中断向量初始化程序是怎么写的了,可以看一下串口的中断向量处烧的是什么样的指令,跳到了哪 ...
我没有写中断向量初始化程序,我查看串口中断向量(0023H)那的数据是:54 12 00,不知道是啥意思,我看其他指令的机器码发现第一个数好像是指令,后面是操作数,查了一下,54代表操作时ANL与操作,我就不懂了。。。【加上中断函数时0023H那确实是指向中断函数的(数据为02 00 60,其中00 60 是中断函数的入口地址)】。
当我试着想验证你的猜想时,我把while(1)去掉:
void main()
{
InitUART();
temp=0xff;
SendByte(temp);
delay(10000);
temp=0xbb;
SendByte(temp);
delay(10000);
temp=0xcc;
SendByte(temp);
delay(10000);
}
这样的话开头就没有异常了。。。
我就想是不是因为多了个while,导致了某种巧合,所以我就天上while,且在它之前加上小延迟函数:
void main()
{
InitUART();
delay(2);
while(1)
{
temp=0xff;
SendByte(temp);
delay(10000);
temp=0xbb;
SendByte(temp);
delay(10000);
temp=0xcc;
SendByte(temp);
delay(10000);
}
}
开头异常变成“FF CC FF BB CC FF BB CC....”
后来又实验,只要我在while前加点语句(如点亮LED),开头都会变异常(点亮LED时是:FF FF FF BB CC FF BB CC FF BB CC)。
哎,看来真可能是我这边硬件问题了。
|