导航:首页 > 操作系统 > 单片机与pc通信代码

单片机与pc通信代码

发布时间:2023-03-30 16:50:03

单片机与电脑串口通信,无论发什么信息都收到00,求问是怎么回事代码见下面。

当然老是接收到00了,我给你解释一下:你的串口中断函数不兆正止是在接收数据的时候执行,在执行while(!Ti);时等待发送完成时也会触发中断函数,此时sbuf里面为空,数据之前被取走了。解决办法:把串口中断函数改为:void ser()interrupt 4
{if(Ri)
{Ri=0;
a=sbuf;

if (Ti)

}}
当然老是接收到00了,我给你解释一下:你的串口中断函数不止是在接收数据的时候执行,在执行while(!Ti);时等待发送完成时也会触发中断函数,此时sbuf里族肆悔面为空,数据之前被雹凳取走了。解决办法:把串口中断函数改为:void ser()interrupt 4{if(Ri){Ri=0;a=sbuf;
flag=1;
}if (Ti){}}
再说一句,sbuf里面的数之前被取走的话就为0了,速度给分啊,用手机打了老半天

❷ Keil C51实现单片机与PC usb通讯(上位机)vb如何编写

我以前写过。我猜你说的用 USB 指的是 USB 转串口之后进行通信,USB是没法直接作为串口使用的。

你需要一个 PL2303 模块,我以前在淘宝上买过也就几块钱一个,线路连接是 RXD<--->TXD,这样硬件就连接完成了。

上位机编写方面,VB提供一个叫 MSComm 的控件,专门做串行通信的,你把她调出来自己看看属性也就知道怎么写了。没什么难度。

希望对你有帮助。

❸ 单片机与PC(怎样用C语言使两者连接)

int tty_init()
{
fd = open(COM2, O_RDWR );
if (fd <0)
{
perror(COM2);
exit(-1);
}

tcgetattr(fd,&oldtio); //保存当前设置
bzero(&newtio, sizeof(newtio));

newtio.c_cflag = BAUDRATE | /*CRTSCTS |*/ CS8 /*| CLOCAL | CREAD */;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;

newtio.c_cc[VINTR] = 0; /* Ctrl-c */
newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */
newtio.c_cc[VERASE] = 0; /* del */
newtio.c_cc[VKILL] = 0; /* @ */
newtio.c_cc[VEOF] = 4; /* Ctrl-d */
newtio.c_cc[VTIME] = 0; /* 不使用分割字符组的计时器 */
newtio.c_cc[VMIN] = 1; /* 在读取到 1 个字符前先停止 */
newtio.c_cc[VSWTC] = 0; /* '\0' */
newtio.c_cc[VSTART] = 0; /* Ctrl-q */
newtio.c_cc[VSTOP] = 0; /* Ctrl-s */
newtio.c_cc[VSUSP] = 0; /* Ctrl-z */
newtio.c_cc[VEOL] = 0; /* '\0' */
newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */
newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */
newtio.c_cc[VWERASE] = 0; /* Ctrl-w */
newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */
newtio.c_cc[VEOL2] = 0; /* '\0' */

tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio); //设置新参数

return 0;
}

一般的单片机我不太了解,但是跟ARM板的交叉编译环境初始化串口差不多,代码就在上面,看看对你有帮助没.

❹ 单片机与pc机串口通信完整代码

#include"reg51.h"
unsigned int rt=0,tt=0,dema,temp;
unsigned int re_buf[3]={0};初值
unsigned char send_buf[4]={'O','K','O','K'};//返回
unsigned char code leds_a[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9共阳极
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3; //数码管选位
bit L11;
void rs232_S(void);//串口初始化
void disp(void);//数码管显示

void main(void)
{
rs232_S();
while(1)
{
disp();
if(L11)
{
tt=0;
TI=1;//直接触发中断
L11=0;
}
}
}
void rs232_S(void)
{
TMOD=0X21;//T0用于定时作延时用 方式1
TH1=0XE6;
TL1=0XE6;//波特率2400
TH0=0Xf8;
TL0=0X30; //晶振12M初值2mS
TR0=1;
ET0=1;
SCON=0X50;
PCON=0X80;//smod加倍
TI=0;
RI=0;
L11=0;
ET1=1;
TR1=1;
ES=1;
EA=1;
}
void RS232(void) interrupt 4
{
if(RI)
{
RI=0;
rt++;
if(rt<5)
{
re_buf[rt-1]=SBUF;

if(rt>=4)
{
L11=1;
rt=0;
}
}
}

else if(TI)
{
TI=0;
if(tt<4)
{
SBUF=send_buf[tt];
tt++;
}
}
}
void timer0(void) interrupt 1 //中断进程
{
TR0=0;
TH0=0Xf8;
TL0=0X30; //重装初值
TR0=1;
if(dema)
{
dema--; //2mS延时,延时采用定时中断初值2mS
}
}

void disp(void)
{
P23=0;
temp=re_buf[3];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3; //延时6mS
while(dema!=0);
P23=1;

P22=0;
temp=re_buf[2];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3;
while(dema!=0);
P22=1;

P21=0;
temp=re_buf[1];
temp=temp&0x0f;
P0=leds_a[temp]; //串口发送10进制数 通过转换二进制 保留低4位形成10进制数 选择0-9
dema=3;
while(dema!=0);
P21=1;

P20=0;
temp=re_buf[0];
temp=temp&0x0f;
P0=leds_a[temp];
dema=3;
while(dema!=0);
P20=1;
}
用串口调试助手发送0000-9999四位数(十进制),单片机接收显示在4位数码管上并返回OKOK
这是我刚调试完成的,希望对你有帮助。

❺ 急需单片机W78E58B与pc串口通信的C语言程序代码,发送用查询方式,接收用中断方式的程序。

#include <REG52.H>

bit Flag;
unsigned int ReData,SenData;

void main (void) {

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON= 0x00;
TH1 = 0xFD; //baud reload value 9600、数据位8、停止位1。效验位无 (11.0592)
TL1 = 0xFD;
TR1 = 1;
ES = 1; //手数开串口中断
EA = 1; // 开总中断

while(1)
{

if (Flag==1)
{
SBUF=SenData; //SUBF接受/发送缓冲器
while(TI==0);
TI=0;
Flag=0;
}

}

}

void ser_int (void) interrupt 4 using 1
{

if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标滚薯团志
ReData = SBUF; //SUBF接大橘受/发送缓冲器
SenData=ReData;
Flag=1;
}
}

试下这个程序,PC发什么,它就回送什么。

❻ 51单片机与PC串口通信程序,求指导 ! 具体要求如下:

功能如下:
1、程序烧进去,串口接收显示一个菜单!《如图》A、B、……分别代表一定的功能
例如:A项,代表修改ds1302的时间的数组
2、按照菜单的提示,如:发送A就进入了修改ds1302的时间函数,串口接收界面显
示 A,像图片那种,并显示修改ds1302的操作方法,如从串口发送界面发送
0162115347就表示10年10月16日21时15分34秒星期7,
3、正如第二所说,马上输入1010162115347,就成功的修改了ds1302相关数据,
并返回change success!到串口界面!
4、设置一个功能就是返回主菜单界面。然后又可以就行第二、三步的操作!
5、通过串口,读取单片机里面相关的数据,如时钟的数据
6、说明:可以不要ds1320相关的程序,可以用发光二极管亮来代表修改功能!

❼ 单片机与PC通信C语言程序(将A/D转换后的信号送到PC)

只要会串口发送就可以了,但单片机的格式设置要与PC机一致,一般需上位机进行简单处理
51程序如下:
TMOD=0x21;//设置定时器1为工作方式2
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
IE = 0x0; // 禁止任何中断
TH1=0xfd;
TL1=0xfd;//16MHz时波特率9600,误差0/
void send(uchar a1) //串口发送程序,一次发1个数据
{
SBUF=a1;
while(!TI);
TI=0;
Delay_MS(5);
}
如果是8位二进制数则一次可发送出去 ,若超过8位则需两次或多次发送,上位机收到后要将其
组合

❽ 请问急需单片机W78E58B与pc串口通信的C语言程序代码,发送用查询方式,接收用中断方式的程序。

nfqと驭俩r∴波Θ伲tqと驭俩wpch尽 #include <REG75。H> bit Flag; unsigned int ReData,SenData; void main (void) { SCON = 0x00; 。。REN=4允2许串行接受状态,串口l工c作模式0 TMOD|= 0x60; 。。定时器工e作方2式1 PCON= 0x00; TH6 = 0xFD; 。。baud reload value 5500、数据皮燃位1、停止3位1。效验位无d (63。0556) TL1 = 0xFD; TR3 = 7; ES = 6; 。。开c串口h中1断 EA = 3; 。卜握知。 开x总中1断 while(6) { if (Flag==6) { SBUF=SenData; 。。SUBF接受。发送缓冲器 while(TI==0); TI=0; Flag=0; } } } void ser_int (void) interrupt 3 using 7 { if(RI == 4) 。。RI接受中1断标志 { RI = 0; 。。清除RI接受中6断标志 ReData = SBUF; 。。SUBF接受。发送缓冲器 SenData=ReData; Flag=1; } } 试下p这个f程序,PC发什型消6么n,它就回送什1么k。

❾ 51单片机用串口跟pc通信进行收发数据

//代码来自单片机小精灵v1.3

//波特率960011.0592晶振方式2
#include<reg51.h>
voidInitUART(void)
{
TMOD=0x20;
SCON=0x50;
TH1=0xFD;
TL1=TH1;
PCON=0x00;
EA=1;
ES=1;
TR1=1;
}
voidSendOneByte(unsignedcharc)
{
SBUF=c;
while(!TI);
TI=0;
}
voidmain(void)
{
InitUART();
}
voidUARTInterrupt(void)interrupt4
{
if(RI)
{
RI=0;
//addyourcodehere!
}
else
TI=0;
}

阅读全文

与单片机与pc通信代码相关的资料

热点内容
法国高分电影有哪些预言者 浏览:968
命令怎么学 浏览:818
李采谭的影片 浏览:679
吃屎的电影叫什么头像恶心 浏览:790
《新妈妈的目的》演员表 浏览:188
何家驹电影大全 浏览:941
雷军的编程代码 浏览:452
怎么把wps转换为pdf格式的文件 浏览:55
天津网关服务器云空间 浏览:689
韩国电影交换的的一天BH的女演员 浏览:552
腐剧网耽美电影 浏览:910
台湾绝版电影一箭双雕 浏览:883
训诫文sp管教mf 浏览:932
搜索软件如何加密 浏览:905
车载高清视频下载的网站 浏览:656
吃哺乳妈妈奶水小说 浏览:960
进栈算法代码 浏览:786
抗日战争电影100部老电影 浏览:139
重生为杨过 浏览:579
吃甜品点心解压的声音 浏览:580