51单片机与电脑通信中电脑接收不到信息

51单片机与电脑通信中电脑接收不到信息,第1张

首先,别乱试MAX232周围的那四个电容,根据MAX232的数据说明书里规定这四个电容必须是1uF的,并且最好是带极性的电解电容(耐压至少16V以上)。

既然能进行ISP在线编程烧写程序进去,那说明硬件是没有问题。你的程序在开发板上实现过,但能确认开发板的串口电路和你现在用的ISP电路是一样的么?

还有,计算机上的串口接收软件也没设置好也收不到数据的!

如果怀疑是串口硬件电路的问题,可以做这样的实验,就是让把单片机拔出来,MAX232留着,PC上的串口发送数据,然后把原本接单片机TXD和RXD的两个数据引脚短路,看看PC上的接收软件是否能接收到直接发送并返回的数据,如果能成功,则证明串口硬件电路没问题。

串口通讯有的时候要求很多,你先实验一下能不能单片机只给PC发送数据。然后再试把数据从PC发下去,让单片机返回数据。

还有问题可以发百度HI的信息给我。

我的程序的一部分,供参考

//主流程

void

main(void)

{

//系统初始化

SCON

=

0x50;

//串口方式为1,SM2=

0,TB8=

1

PCON

=

0x80;

//

SMOD=1

TMOD

=

0x22;

//设定定时器0/1的工作模式为方式2

//设置T0中断的定时时间为1/7200毫秒

TH0

=

0x00;

TL0

=

0x00;

//设置异步串口的波特率

//TH1

=

0x0f4;

//OSC

=

110592MHz

bps

=

4800

SMOD=1

//TL1

=

0x0f4;

TH1

=

0x0fd;

//OSC

=

110592MHz

bps

=

19200

SMOD=1

TL1

=

0x0fd;

//设置中断优先级,T0中断为高优先级中断,其他为低优先级中断

IP

=

0x02;

//

设置中断优先级--T0为高优先级,其他低

ET0

=

1;

//定时器0中断

ES

=

1;

//串行接口中断

EA

=

1;

//系统中断允许

TR0

=

1;

//启动定时器0

TR1

=

1;

//串口接收中断处理程序

//发送采用查询处理

void

SerialComm(void)

interrupt

4

{

_pReceive[_cReceive]

=

SBUF;

_cReceive

++;

if(_cReceive

>=

RecBuffSize)

_cReceive

=

0;

RI

=

0;

}

//串口发送一个字节

//senddata:需要发送的数据

void

SendOneByte(unsigned

char

senddata)

{

ES

=

0;

TI

=

0;

SBUF

=

senddata;

while(TI

==

0);

TI

=

0;

ES

=

1;

}

1、用串口调试助手

2、用PC机通过串口控制8952让端口上的LED亮灭很简单,如只需发送0XFE内容,再让P0=SUBF就可让P0口上的一个LED灭。

3、若要实现双工方式,设置SCON=0X50,也就是让REN=1即可,

4、若要有语音提示,在主程序相应位置加一发音程序即可。

以上希望能帮到你。

同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;

1::::::::::::::

#include <REG52H>

bit Flag;

unsigned int R_D,S_D;

unsigned char i;

void usart_init(void); ///串口初始化

void main (void) {

usart_init(void); ///串口初始化

while(1)

{

if (Flag==1)

{

SBUF = S_D; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

Flag=0;

}

}

}

}

void ser_int (void) interrupt 4 using 1

{

if(RI == 1) //RI接受中断标志

{

RI = 0; //清除RI接受中断标志

R_D = SBUF; //SUBF接受/发送缓冲器

S_D=R_D;///////返回PC发送

Flag=1;

}

}

void usart_init(void)///串口初始化

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD|= 0x20; //定时器工作方式2

PCON|= 0x80;

TH1 = 0xF3;// //baud2 / 波特率4800、数据位8、停止位1。效验位无 (12M)

TL1 = 0xF3;

TR1 = 1;

ES = 1; //开串口中断

EA = 1; // 开总中断

}

2:::::::::::::

#include <REG52H>

sbit p34=P3^4;////////定义一个按键

bit Flag=1;

unsigned int S_D;

unsigned char i;

void usart_init(void); ///串口初始化

void delay (unsigned int Z) ; //延时程序 Z倍 MS

void key_p34(void) ; /////按键检

void main (void) {

usart_init(void); ///串口初始化

key_p34(void) ; ////上电后检测一次按键的状态

if (Flag==1)//上电后发送一次按键的状态

{

SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

else

{

SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

while(1)

{

key_p34(void) ;

if (Flag==1)

{

SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

else

{

SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

}

}

void usart_init(void)///串口初始化

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD|= 0x20; //定时器工作方式2

PCON|= 0x80;

TH1 = 0xF3;// //baud2 / 波特率4800、数据位8、停止位1。效验位无 (12M)

TL1 = 0xF3;

TR1 = 1;

ES = 1; //开串口中断

EA = 1; // 开总中断

}

void delay (unsigned int Z)//延时程序 Z倍 MS

{

unsigned int x,y;

for(x=Z;x>0;x--)

for(y=110;y>0;y--) ;

}

void key_p34(void) /////按键检测

{

if(p34==0)

{ delay(10);

if(p34==0)

{

while(!p34) ;/////等待按键松手

Flag=0;

}

}

}

不懂得欢迎交流

以上就是关于51单片机与电脑通信中电脑接收不到信息全部的内容,包括:51单片机与电脑通信中电脑接收不到信息、C51单片机如何从PC机串口接收字符串、51单片机与PC机的串口通讯设计的一个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9294664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存