哪位大神,有单片机的C语言程序。能实现与上位机的信息交流(包括从单片机发送数据和上位机发送数据)?

2025-01-07 21:52:13
推荐回答(3个)
回答1:

不同的上位机,通信协议是不一样的,就像组态王就有组态王和单片机的协议,LabVIEW有专门的VISA控件,这只是简单的发送,只能用串口助手看,你要是真的写入上位机还得按照人家的协议。

232口单片机向上位机发送
#include
#include

void delay(unsigned int i); //函数声明

char code MESSAGE[]= "RS232 ,请使用串口调试助手: ";
unsigned char a;

void main (void) {

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
// TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无(11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1; //开启定时器1
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;

while(1)
{ a=0;
while(MESSAGE[a] != '\0')
{
SBUF = MESSAGE[a]; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI); // 等特数据传送 (TI发送中断标志)
TI = 0; // 清除数据传送标志

a++; // 下一个字符

}
delay(1000);
}

}

/**************************************************

延时处理程序

**************************************************/

void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--) ;

}

上位机发送到单片机

#include
#include
sbit BEEP = P1^5;
unsigned char b;

void main (void) {

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
BEEP=1;
// IE = 0x0;

while(1)
{

if (RI) //RI接受中断标志
{ RI=0; //清除RI接受中断标志
b=SBUF; //SUBF接受/发送缓冲器
}
BEEP=b;

}

}

回答2:

楼上同学的回答比较非常好!!!

回答3:

设置波特率,一至就好了!!!