程序是我參考其他資料自己試著編的,如果去掉switch語句以及printf函數后串口可以正常接收,但是加上printf函數之后,在上位機上用串口助手輸入1時,顯示的是
error
I GET 12544
小弟初次接觸單片機,特來向高手請教,謝謝各位大神了!
這是程序,很短的。
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,flag,flag_on;
void init()
{
TMOD=0x20; //定時器1選擇方式2
TH1=0xfd;
TL1=0xfd;
TR1=1; //開定時器1開始計數
SM0=0; //選擇串口方式1
SM1=1;
REN=1; //打開串口
EA=1; //開中斷
ES=1; //開串口中斷
}
void main()
{
init(); //調用初始化函數
while(1)
{
if(flag==1)
{
flag=0;
ES=0;//關中斷避免誤入中斷程序
TI=1;//調用puts函數前使TI為1
switch(flag_on)
{
case 0:puts("yes\n");
break;
case 1:puts("no\n");
break;
case 2:puts("error\n");
break;
}
while(!TI);
TI=1;
printf("I GET %f\n",a);
while(!TI);
TI=0;
ES=1;
}
}
}
void ser()interrupt 4
{
if(RI)
{
RI=0; //串行口接收位清零,準備下次接收
a=SBUF; //將接收到的數據放入a中
flag=1;
if(a==1)
flag_on=0;
else if(a==2)
flag_on=1;
else flag_on=2;
}
}
|