PC机发送6个字符给单片机,单片机收到回复OK,急!急!

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-02
c编程:PC发送单个字符给单片机,当单片机接收到PC机发送过来的单个数据后,转发给PC

这是最简单的单片机与PC机串口通信的程序。单片机收到单个字符无需判断,原字符发送出去即可。可以用proteus 仿真测试,用虚拟终端代替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;
}
}
}

#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 recive[6];

bit flag=0;
void t0isr() interrupt 1 //显示
{
TH0=0xec;
TL0=0x78;
switch(scanled)
{
case 0:
P2=~0x01;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[5]-'A'+10];
break;
case 1:
P2=~0x02;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[4]-'A'+10];
break;
case 2:
P2=~0x04;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[3]-'A'+10];
break;
case 3:
P2=~0x08;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[2]-'A'+10];
break;
case 4:
P2=~0x10;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[1]-'A'+10];
break;
case 5:
P2=~0x20;
if(err==1)P0=ledtab[0x10];
else
P0=ledtab[disdat[0]-'A'+10];
break;
default:break;
}
scanled++;
scanled%=6;
}
void uart() interrupt 4
{
if(RI)
{
RI=0;
disdat[i]=SBUF;
i++;
i%=6;
if(i==0)flag=1;
}
}
main()
{
uchar num=0;
TMOD=0x21;
TH1=0xf3;
TL1=0xf3
TH0=0xec;
TL0=0x78;
SCON=0x50;
EA=1;
ES=1;
TR1=1;
TR0=1;
ET0=1;
while(1)
{
if(flag==1)
{
flag=0;
err=0;
for(num=0;num<6;num++){if(recive[num]!=disdat[num])err=1;}
if(err==0)
{
SBUF='O';while(!TI);TI=0;
SBUF='K';while(!TI);TI=0;
}
}
}
}

  • 电脑怎么将数据传给单片机啊??(在线等)
    答:计算机那边使用串口助手,打开相应的串口,波特率要和单片机的相同,这样就可以了! 用串口助手发送数据,单片机接收显示。 你需要串口的连接线。如果单片机的板子上带有232 接口的话直接连接 否则还需要一个232口和max232
  • ...利用串口通信助手将一个字符串发给单片机 单片机返回一个字符串到...
    答:3.可能你想要的是每次发送多个字节,也就是一个字符串,然后将这个字符串一起发送到PC上。那你应该在串口中断里面设置一个判断,也就是说,中断里面判断到上位机发送的数据结束后,单片机的串口中断程序才设置标志位,然后根据标志位和接收到数据到数量,把所有的数据一次性发送给PC。4.指出你出现异常的...
  • 电脑如何通过串口发送汉字给单片机?
    答:首先你所用的缓存不能是char型,应该用static char,防止编译器把你这个变量给优化了。其次你一定要给12864屏与串口传输的逻辑关系弄好,要知道在单片机刷屏时跳中断是很容易出现乱码的。最好是在上位/超级终端/串口调试助手 发送完数据后带一个数据结尾,单片机收到结尾标识符时暂时关闭所有中断在刷屏。...
  • PC机向单片机发送数据。单片机大侠们露一手嘛。
    答:b-1.单片机方面程序同上,b-2.PC机送串口的波特率要和单片机一样,b-3,要搞清PC机发送的“88”是ASCII码,还是十六进制的HEX码,如是ASCII码“88”单片机要以“38H"+"38H"为判断,如是HEX码。直接判88H即可。
  • 单片机从PC端接受字符
    答:PC端发送数据的时候,每次发送一个字符串即可。单片机就可以接收到这个字符串。\0和\n都是字符串里面的特殊字符。发与不发看应用场合。通过串行通信模块的初始化,完成双方字符帧格式的统一、波特率的一致。最后就是对SBUF和RI标志的判读,协议的解析了。
  • c编程:PC发送单个字符给单片机,当单片机接收到PC机发送过来的单个数据...
    答:这是最简单的单片机与PC机串口通信的程序。单片机收到单个字符无需判断,原字符发送出去即可。可以用proteus 仿真测试,用虚拟终端代替PC机,用电脑键盘输入字符,由虚拟终端发送给单片机,单片机收到按原字符返回,虚拟终端就会显示出接收的字符。仿真图如下 ...
  • 如何实现(电脑)PC机与单片机的串行通信
    答:1、电脑带有原生串口,就是主板上带有串行口,这个情况就太好办了。用“串口调试助手”测试一下就可以用VB写程序了。电脑和单片机用232芯片进行接口转换。2、电脑没有原生串口,就是主板上没有串行口,这个情况有点麻烦。要用USB转串口的模块,装好驱动后会在“设备管理器”中出现一个串口,直接当...
  • 51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆序发送回计...
    答:if(flag) //是否接收到回车 字符串发送完 { flag = 0;for(j = ct ; j > 0 ; j--){ Send(buf[j-1]);} } } } void UARTInterrupt(void) interrupt 4 { static uint8 i = 0;if(RI){ RI = 0;buf[i++] = SBUF;if(SBUF == 0x0d) //接受到回车 { ct = i-1 ;...
  • ...现有6个数码管。我想用pc机向单片机发送超过6位数字,比如20位,现 ...
    答:没现在的程序,但这个不难,给个思路,照写就行,先要认清PC的串口发送数字时,0是0X30是0X31 所以你在单片机的串口接收数据中,得到的要 -48 再去送显示 PC可送任何位数的数字,方法很多,如果你要用单片机的串口来计算接收到多少位,也行,如果你自定协议,在PC送的时候,加开头特定字符和一...
  • PC机编程将数据通过串口输出到单片机
    答:-PC机准备工作才算完毕--然后到单片机开发板了--串口程序--不知道你用的是51哪个芯片--确定以后就去看串口的寄存器叫什么比如叫SBUF0主程序-intfasong[];//用来装你准备发送的字符int*p;//指针,如果不熟悉的话,回头再帮你改成不用指针的。voidmain(){p=fasong;//指针指向要发送的数组。EA=1...