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