pc 串口发送 c语言,【求助】51单片机串口发送接收问题(PC向单片机发送1位字符,单片机接收后发回PC)...
时间: 2023-07-30 21:10:15 浏览: 93
51单片机接收电脑发送数据并点亮相应LED灯并将数据返还电脑端显示示例Demo
您好!关于PC向单片机发送1位字符,单片机接收后发回PC的问题,您可以参考以下代码:
PC发送端代码(C语言):
```c
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
HANDLE hCom; //定义串口句柄
BOOL bRet; //定义返回值
DWORD dwSend; //定义实际发送字节数
char cBuff[] = "A"; //定义发送字符
hCom = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); //打开串口
if (hCom == INVALID_HANDLE_VALUE)
{
printf("Open COM Port Failed!\n");
return -1;
}
DCB dcb; //定义设备控制块
GetCommState(hCom, &dcb); //获取当前串口配置
dcb.BaudRate = CBR_9600; //设置波特率
dcb.ByteSize = 8; //设置数据位数
dcb.Parity = NOPARITY; //设置校验位
dcb.StopBits = ONESTOPBIT; //设置停止位
SetCommState(hCom, &dcb); //设置串口配置
bRet = WriteFile(hCom, cBuff, sizeof(cBuff), &dwSend, NULL); //发送数据
if (bRet == TRUE)
{
printf("Send Succeed!\n");
}
else
{
printf("Send Failed!\n");
}
CloseHandle(hCom); //关闭串口
return 0;
}
```
单片机接收端代码(C语言):
```c
#include <reg52.h>
void init_uart()
{
TMOD |= 0x20; //设置定时器1为模式2
TH1 = 0xfd; //设置波特率为9600
TL1 = 0xfd;
SCON = 0x50; //设置串口为模式1
TR1 = 1; //启动定时器1
ES = 1; //使能串口中断
EA = 1; //开启总中断
}
void main()
{
init_uart();
while (1);
}
void uart() interrupt 4
{
if (RI == 1) //接收中断
{
RI = 0; //清除接收中断标志位
SBUF = SBUF; //将接收到的数据发送回PC
while (!TI); //等待发送完成
TI = 0; //清除发送中断标志位
}
}
```
需要注意的是,单片机接收到数据后需要将接收数据发送回PC,否则PC端无法接收到数据。同时,单片机也可以通过发送数据到PC端来确认接收到的数据。
阅读全文