今天写代码时发现了一个小问题,使用的是stc89c52rc芯片,目前处于学习阶段
使用串口中断时在中断服务程序中调用printf函数,打印常量字符串是正常的,但是一旦传入参数,打印传入的参数时就会报错,字符打印一直都是“语?”
这个问题研究了许久发现应该是中断的出发方式跟printf中函数有着一定的冲突,但是本人能力有限,希望在这里能够帮忙解答疑惑,
代码如下
#include "STC51PRJ.h"
void SerialInit(void)
{
TMOD=0X20;//T1,MODE2
TH1=0XFd;
TL1=0XFd;
SCON=0X50;//SM0=1;SM1=1;REM=1;
EA=1;
ES=1;
TR1=1;
}
void SendData(uint8 Data)
{
SBUF=Data;
while(!TI);
}
char RecData;
uint16 RecData1=6;
//串口中断
void ReceiveData_ISR(void) interrupt 4
{
if(TI)
{
printf("I get %s\n",RecData);
// SendData(RecData);
while(!TI);
TI=0;
}
if(RI){
RI=0;
RecData=SBUF;
// return RecData;
F0=1;
TI=1;
}
}
以上代码只要串口中断打开,printf函数打印变量就异常,目前解决办法就是调用printf函数时关闭串口中断,调用完毕再次打开有以免发生冲突
不知道你这个问题是否已经解决, 如果还没有解决的话: