c编程:PC发送单个字符给单片机,当单片机接收到PC机发送过来的单个数据后,转发给PC

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-05-21
如何编程?PC机发送一个任意的字符串,单片机接收后,返回给PC机显示

试试这个程序
#include
#define uchar unsigned char
uchar recive[16],rec,send;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
recive[rec]=SBUF;
rec++;
rec&=0x0f;
}
if(TI)TI=0;
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
EA=1;
ES=1;
rec=0;
send=0;
while(1)
{
if(rec!=send)
{
SBUF=recive[send];
while(!TI);
TI=0;
send++;
send&=0x0f;
}
}
}

不要误人子弟,PC机往单片机每次可以发送任意个数据,MCU接收时候处理一下就OK了,
下面是我的程序,给你参考。

//中断方式接收PC机数据
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
设计思路
接收到的数据存入到dat[50]数组中,
中断方式接收,每次中断接收后,开启定时器,
*/////////////////////////////
//
//陈仲库

#include
#include

int dat[20];
unsigned char num=0;
int time=0;

bit MCU_RXD_FLG=0;

void COM_Init(void)
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
PCON |= 0x80;
TH1 = 0xFD;
ES=1;EA=1;
TR1 = 1;
TI = 1;

TH0=0xfc; //T0定义初始值
TL0=0x18;
TR0=0; //关闭T0计时
ET0=1;
}

//向串口发送一个字符
void MCU_TXD(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

//串口接收中断函数
void serial () interrupt 4 using 3
{
EA=0;
if(RI)
{
unsigned char ch;
TR0=0; time=0;
RI = 0;
ch=SBUF;
dat[num++]=ch;
TR0=1;
}
EA=1;
}

delay(int t){while(t--); }

/* PC发送数据必须以0XAA开头和以 0X55结束(帧头帧尾)*/
void main(void)
{
int i=0;

COM_Init();
while(1)
{
if(MCU_RXD_FLG)
{
EA=0;
TR0=0;
if(dat[0]==0xAA && dat[num-1]==0x55)
for(i=0;i<num;i++) printf("%0x ",dat[i]);
num=0;
MCU_RXD_FLG=0;
EA=1;
}
}
}


void timer0() interrupt 1 //T0中断 定时0.1ms
{
EA=0;
TH0=0xfc;
TL0=0x18;
MCU_RXD_FLG=1;
TR0=0;
EA=1;
}


关于AT24C02程序网上多的是,很成熟的程序

OK希望对你能有帮助

这是最简单的单片机与PC机串口通信的程序。单片机收到单个字符无需判断,原字符发送出去即可。可以用proteus 仿真测试,用虚拟终端代替PC机,用电脑键盘输入字符,由虚拟终端发送给单片机,单片机收到按原字符返回,虚拟终端就会显示出接收的字符。仿真图如下



外接键盘不会错乱,那就证明是你的键盘坏了

  • PC传送“数值”字符字符串到单片机,单片机如何转换“数值”
    答:int TQ( char n)//将字符转换成数字 { if(n>=0x30 && n<=0x39)//如果接收的字符在指定的范围内 { switch(n)//根据不同字符的十六进制码,返回相应的十进制数 { case 0x30 : { return 0; } case 0x31 : { return 1; } case 0x32 : { return 2; } case 0x33 : { return ...
  • PC机向单片机发送数据。单片机大侠们露一手嘛。
    答:有个问题要事先搞清楚--a.是两个单片机之间通讯,b.还是PC机和单片机通讯?a-1.各自编写一个相同的程序:预设工作方式SCON(通常为8位,无校验,1个停止位)再设波特率(TMOD和TH1,TL1的值),一般不必开中断,a-2.发送一方先清TI,再送数,之后等TI=1,最后清TI,数据就发送出去了 CLR TI MO...
  • pc用串口助手给单片机发一字符串,收到的数据在LCD1602上显示,遇到...
    答:pc用串口助手给单片机发一字符串,--- 字符串,都有多少字符?发一个字符,用多少时间?你到程序,当单片机收到第一个字符,马上,就改变了 485 的传输方向,向 PC 机发送一串字符,这要用多少时间?单片机,发送这一串之后,再令 485 为接收,此时,还能收到什么呢?PC 机,早已经就发送完,...
  • 单片机从PC端接受字符
    答:PC端发送数据的时候,每次发送一个字符串即可。单片机就可以接收到这个字符串。\0和\n都是字符串里面的特殊字符。发与不发看应用场合。通过串行通信模块的初始化,完成双方字符帧格式的统一、波特率的一致。最后就是对SBUF和RI标志的判读,协议的解析了。
  • C51单片机与PC串口通信的单片机部分程序
    答:下面这个程序没有什么实际价值,只用于演示串口程序的编写 注意波特率是9600 功能:电脑通过串口给单片机发一个字节,单片机收到后又给电脑发回去 include<reg52.h> define uchar unsigned char define uint unsigned int uint temp;bit flag;void init_ser1();main(){ init_ser1();while(1){ if(...
  • 电脑给单片机发送字符串,单片机比较收到的字符串是不是相同的?_百度知 ...
    答:你的密码是字符串,先想清楚怎么接收一串数据后再比较。建议程序大致流程:先定义个全局变量数组,至少要大于密码长度 用串口中断接收,接收到第一个数据后,存入数组首地址,打开定时中断,期间接收到的数据都放在数组里,顺便记录接收数据长度 定时中断到时检验数组内的值和密码是不是相等 然后输出结果 ...
  • pc单片机之间串口通信的程序
    答://这是PC发给单片机数据,单片机再回给PC include <reg51.h> // 引用头文件,里面包含了一些对51单片机内部寄存器的定义 define uchar unsigned char //定义unsigned int为uint define uint unsigned int //定义unsigned uchar为uchar uchar rec_data; //定义一个字符型变量用于存放接收到的数据...
  • PC机发送6个字符给单片机,单片机收到回复OK,急!急!
    答:include<reg51.h> define uchar unsigned char uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0-9 uchar scanled=0,time=0,i=0,err=0;uchar disdat[6]={'A','B','C','D','E','F'};uchar ...
  • 实现由pc端串口调试工具发出一个字节的数据,被单片机接收后,交换高四位...
    答:想要发送多次,来传送一个数据,就必须自己制定协议。一个简单的方法是:把“两个八位二进制数”先拆成“四个四位二进制数”,分成四次进行传送。每次传送,用低四位来表示“一个四位二进制数”,用高四位来表示“第几个”。接收方再根据高四位的信息,把低四位拼凑成“两个八位二进制数”。这...
  • ...与单片机98c52 串口通信 用串口通信助手,发送一个数,单片机接收后返 ...
    答:unsingned char a;改成unsigned char a;串口中断程序少括号:修改如下 include<reg51.h> include<string.h> unsigned char a;void init_serialcomm(void){ SCON=0x50;//SCON:serail mode 1,8-bit uart,enable ucvr TMOD=0x20;//TMOD:timer 1, mode 2,8-bit reload PCON=0X00;//SMOD =...