51单片机如何进行串口通信,并制定通信协议.

51单片机如何进行串口通信,并制定通信协议.,第1张

连线就是 交叉连接 A的TX到B的RX A的RX到B的TX,还有一根地线

串口线就这三根就够用了

然后就是初始化A和B的串口,设置波特率,工作模式,开中断等等

A和B的通信,你先调试一台机器,比如A,和电脑连接,用串口调试助手(网上找)查看A的收发数据是否正常,然后A和B联调

串口通信距离不远一般不会出错,波特率较低,除了奇偶校验,你可以指定一个简单的通信协议,来验证是否数据正常

这类程序网上很多,你不清楚就搜索51串口程序,出来一大堆,找个有注释的看看,调试一下试一试

祝你顺利

在网上找了一下,这两个你参考一下,注释很详细

串口发送

>

如果与电脑连接的话,直接用单片机通过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

#include "ds18b20h"

#include "1602h"

#include "Keyh"

uchar temp;

uchar a,b;

uchar x;

uchar baojing_flag,xianzai_flag;

uchar const table[]={"temperature-----"};

uchar const table1[]={"baojingT-------"};

uchar i;

uchar fu_flag;

void main()//这个单片机的程序

{ P3=0;//P3拉低

init();//初始化硬件,保证与ds18b20可协调工作 // init_ds18b20();//初始化ds18b20芯片

while(1)

{

key_in();//接收按钮键入

// x=init_ds18b20();

if (baojing_flag==1)

{

write_com(0x80);

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

{

write_data(table1[i]);

}

write_com(0x80+0x40);//串口写入,加上后面的写入应该是一个通讯协议

write_data('H');

write_data(':');

write_data(' ');

write_data(0x30+8);

write_data(0x30+5);

write_data(' ');

write_data('C');

write_data(' ');

write_data('L');

write_data(':');

write_data(' ');

write_data(0x30+0);

write_data(0x30+0);

write_data(' ');

write_data('C');

}

if ((xianzai_flag==1)||(baojing_flag==0))

{

temp=readtemperature();

if ((temp>=85)&&(temp<128))

{

led1=1;

led2=0;

sp=1;

// delay_50ms(1);

// sp=0;

// delay_50ms(1);

// sp=1;

}

if ((temp>0) && (temp<85))//根据通信返回的值在0:86区间,led1和led2点亮

{

led1=0;

led2=0;

sp=0;//sp拉低

}

if (temp>128)//根据通信返回的值在 { led2=1; //led2 熄灭 led1=0; //led1点亮 sp=1;//sp拉高

}

if (temp>128)//大于128转为负数

{

temp=256-temp;

fu_flag=1;

}

else

{

fu_flag=0;

}

write_com(0x80);//写入通信值;

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

{

write_data(table[i]);

}

write_com(0x80+0x40);

write_data(' ');

write_data(' ');

if (fu_flag==1)

{

write_data('-');

}

write_data(0x30+temp/100);

write_data(0x30+temp%100/10);

write_data(0x30+temp%10);

write_data(' ');

write_data('C');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

write_data(' ');

delay_50ms(1);//延时50ms;一般是保证通讯完成

}}

//整体看,这是单片机与ds18b20芯片进行通讯,来完成特定的任务。

#include <reg51h>

#include <intrinsh>

unsigned char key_s, key_v, tmp;

char code str[] = "welcome! >

bit scan_key();

void proc_key();

void delayms(unsigned char ms);

void send_char(unsigned char txd);

sbit K1 = P1^4;

main()

{

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

TH1 = 0xFD; // 波特率9600

TL1 = 0xFD;

SCON = 0x50; // 设定串行口工作方式

PCON &= 0xef; // 波特率不倍增

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

IE = 0x0; // 禁止任何中断

while(1)

{

if(scan_key()) // 扫描按键

{

delayms(10); // 延时去抖动

if(scan_key()) // 再次扫描

{

key_v = key_s; // 保存键值

proc_key(); // 键处理

}

}

if(RI) // 是否有数据到来

{

RI = 0;

tmp = SBUF; // 暂存接收到的数据

P0 = tmp; // 数据传送到P0口

send_char(tmp); // 回传接收到的数据

}

}

}

bit scan_key()

// 扫描按键

key_s = 0x00;

key_s |= K1;

return(key_s ^ key_v);

}

void proc_key()

// 键处理

{

if((key_v & 0x01) == 0)

{ // K1按下

send_str(); // 传送字串"welcome!

}

}

void send_char(unsigned char txd)

// 传送一个字符

{

SBUF = txd;

while(!TI); // 等特数据传送

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

}

void send_str()

// 传送字串

{

unsigned char i = 0;

while(str[i] != '\0')

{

SBUF = str[i];

while(!TI); // 等特数据传送

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

i++; // 下一个字符

}

}

void delayms(unsigned char ms)

// 延时子程序

{

unsigned char i;

while(ms--)

{

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

}

}

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

以上就是关于51单片机如何进行串口通信,并制定通信协议.全部的内容,包括:51单片机如何进行串口通信,并制定通信协议.、C#串口通信怪现象、求AT89C52单片机用MAX485与PC机串口通讯程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存