我要实现一个PC机通过串口发送数据到单片机,单片机接到后按键回应的程序,写到一半不知咋写了

2024-11-01 18:22:23
推荐回答(3个)
回答1:

你这个程序在逻辑上就有错误 你这个程序在逻辑上是 当PC传数据给单片机 单片机收到数据时 键是按下的单片机才会返回一个数据

你可以再定义1个int b=0;在串口接收中断里将b=1;
然后在主程序里面判断 if(b==1)才去查询键盘是否按下 按下才将a=1
如果a==1 才发送OK! 发送完毕后 返回到初始化后面 将a b清零
继续上面的工作!

回答2:

REN=1; // 串口允许接受
SM0=0; // 设置串口的工作方式
SM1=1;
把这三句改一下位置为
SM0=0; // 设置串口的工作方式
SM1=1;
REN=1; // 串口允许接受
或者直接操作SCON=0X50
这个语句位置不对会导致程序无法运行

回答3:

我自己做的,程序检测通过了,你试试看吧
#include
#define uchar unsigned char
uchar flarg,temp;
bit a,b;

uchar data tradata[]={"hello world!\n@"};

/**********系统初始化函数*********************/
void system_init()
{
uchar data i;
i=0;
while(tradata[i]!='@')
{
SBUF=tradata[i];
i++;
while(TI==0);
TI=0;
}
}

/*******外部中断0初始化************/
void int0_init()
{
IT0=1;
EX0=1;
}

/*******外部中断0初始化************/
void int1_init()
{
IT1=1;
EX1=1;
}

/*******串行中断初始化************/
void uart_init()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
PCON=0;
SCON=0X50;
ES=1;
}
/***************主函数************/
main()
{

system_init();
int0_init();
int1_init();
uart_init();
EA=1;
while(1)
{
if(a)
{
a=0;
SBUF=1;
}

if(b)
{
b=0;
SBUF=2;
}
}

}
/***********串行中断程序************/
void uart_ISR() interrupt 4 using 1
{
if(TI)
{
TI=0;
}
}
/***********外部中断0程序************/
void int0() interrupt 0 using 2
{
a=1;
}
/***********外部中断1程序************/
void int1() interrupt 2 using 3
{
b=1;
}