请问51单片机与51单片机之间的串口通信程序怎么写

请问51单片机与51单片机之间的串口通信程序怎么写,第1张

1、查询方式:

#include<reg51h>

main()

{

unsigned char dat;

TMOD=0x20;

TH1=TL1=0xfd;

SCON=0x50;

TR1=1;

while(1)

{

if(RI)//接收

{

RI=0;

dat=SBUF;

}

SBUF=dat;//发送

while(!TI);

TI=0;

}

}

2、中断方式:

#include<reg51h>

unsigned char dat;

bit flag;

void uart_isr() interrupt 4

{

if(RI)//接收

{

RI=0;

dat=SBUF;

flag=1;

}

if(TI)TI=0;

}

main()

{

TMOD=0x20;

TH1=TL1=0xfd;

SCON=0x50;

TR1=1;

EA=1;

ES=1;

flag=0;

while(1)

{

if(flag)

{

SBUF=dat;

flag=0;

}

}

}

如果与电脑连接的话,直接用单片机通过max232与电脑连接就行啦

如果用485,电脑端、单片机都要加个485芯片转成485才能通信

电路图如图,

把其中一端改成电脑并加个232转485模块就行啦,

单片机端程序

#include <reg51h>

#define uchar unsigned char

sbit sendkey=P2^0;

unsigned char tempy;

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

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

TCON=0x40;

TR1=1;

SCON=0x50;

}

void main()

{

init();

while(1)

{

//------------------

//485接收字符

sendkey=0;

while(RI==0);

tempy=SBUF;

RI=0;

//------------------

//485发送字符

sendkey=1;

SBUF=tempy;

while(TI==0);TI=0;

//-------------------

}

}

好好检查下你的硬件

程序我没有改

运行效果见图

晶振110592MHz

void Init_Serial(void)

{ RD485=0;

SCON = 0x50; //串口工作方式1

TMOD = (TMOD&0x0F)|0x20; //选择定时器1方式2

PCON = 0x80; // 波特率倍增

TH1 = 0xF6; // 计数初值9600bps

TR1 = 1; // 启动定时器1

IE |= 0x90 ; //Enable Serial Interrupt

SBUF=0x00;

RI=0;

}

void delay(void)

{ unsigned int i;

for(i=0; i<9500; i++);

}

void sendbit(unsigned char ch,int len)

{

int flaglen=0;

RD485=1;

delay();

while (flaglen<len) {

while(!TI) /检查发送标志/

{; }

TI=0;

SBUF=(ch+flaglen); /发送数据/

flaglen++;

}

delay();

RD485=0;

} void serial () interrupt 4 using 3

{ if (RI)

{

if(fg>=3)

fg=0;

b[fg]=SBUF;

fg++;

RI = 0 ;

}

}

这个程序的单片机晶振是18432M的,你用的时候把要发送的整形数据的高低八位放到字符型的数组里,通过中断就能在另一个单片机里接收了,这个程序在发送和接收的单片机里都能用。

通信线上传输了一个字节到单片机串口上,硬件自动将其接收并存储在SBUF里,此时会产生一个中断(串口接收中断),单片机的相应中断使能(ES,EA)打开的时候,就可以进入中断,方便处理通讯。关闭中断时,仍可以使用查询的方式进行通讯处理。查询RI位,

if(RI==1)

{RI=0;//需要对其清零,硬件不会自动清零的

//以下是处理程序

}

发送的时候把需要发送的字节送入SBUF即可启动硬件发送,单片机只需查询TI(发送标志位)看看发送是否完成就行了。TI也需软件清零。

c或vb中有mscomm控件很好用,我常用,以下是我用delphi写的

with mscomm1 do begin

commport:=1; //端口号

settings:=9600,n,8,1; //端口设置

InputMode:=0; //设置或返回Input属性取回的数据的类型 0:文本 1:二进制

RThreshold:=1; //每次接收到字符即产生OnComm事件

SThreshold:=0; //传输缓冲区允许最小字符数

InBufferCount:=0; //清空接收缓冲区内容

InputLen:=0; //为0时 Input一次读取整个缓冲区内容

DTREnable:=true; //数据终端准备好

RTSEnable:=true; //发送请求

end;

mscomm1Output:=edit1text;//发送

str:=mscomm1input; //接收

以上就是关于请问51单片机与51单片机之间的串口通信程序怎么写全部的内容,包括:请问51单片机与51单片机之间的串口通信程序怎么写、求AT89C52单片机用MAX485与PC机串口通讯程序、c51语言编写,串口通讯程序,实现AT89S52单片机把一个整型数组数据,发送给等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存