找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2549|回复: 12
打印 上一主题 下一主题
收起左侧

求大神指点两单片机串口传输数据的程序

[复制链接]
跳转到指定楼层
楼主
100黑币
要做一个数据采集传输系统,采集以做出,不知道怎样实现串口通信。下面是找的相似的程序,不知怎么改

#include<reg51.h>
unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
void Send(unsigned char dat)
{
SUBF=dat;
while(TI==0);
TI=0;
}
void dely(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
void main{void}
{
unsigned char i;
TMOD=0x20;
SCON=0x40;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
while(1)
{
for=(i=0;i<8;i++)
{
Send(Tab[ i]);
dely();
}
}
}

最佳答案

查看完整内容

// 1.不要 Tab[] // 2 while(1) 改成: while(温度读好) { //清温度读好标志; P23 = 1; //置485发送模式 Send(温度低字节); dely(); Send(温度高字节); } // 接收那边 U3P20 = 0 ; 置485发送模式 // 串口接收数据,2个字节,判断一下高低字节。送显示。 // 这个只是简单的通讯测试。实际应用是要有通讯协议的,一般RS485用Modebus通讯协议。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:767423 发表于 2020-7-10 15:59 | 只看该作者
// 1.不要 Tab[]
// 2 while(1) 改成:
while(温度读好)
{
    //清温度读好标志;
    P23 = 1; //置485发送模式
    Send(温度低字节);
    dely();
    Send(温度高字节);
}
// 接收那边 U3P20 = 0 ; 置485发送模式
// 串口接收数据,2个字节,判断一下高低字节。送显示。
// 这个只是简单的通讯测试。实际应用是要有通讯协议的,一般RS485用Modebus通讯协议。
回复

使用道具 举报

板凳
ID:332444 发表于 2020-7-10 16:25 | 只看该作者
这是发送程序,接收的?
回复

使用道具 举报

地板
ID:767423 发表于 2020-7-10 17:30 | 只看该作者
如果数据比较多,可以保留Tab[],数据放Tab[]里面
while(温度读好)
{
    //清温度读好标志;
    for=(i=0;i<个数;i++)
   {
      Send(Tab[i]); // 你的文件少了 [i]
     dely();
   }
}
回复

使用道具 举报

5#
ID:197385 发表于 2020-7-10 17:53 | 只看该作者
void Send(unsigned char dat) { SUBF=dat; while(TI==0); TI=0; }
回复

使用道具 举报

6#
ID:197385 发表于 2020-7-10 17:57 | 只看该作者
如果不想保存在单片机内部的话可以直接将得到的数据直接通过串口发出去
void Send(unsigned char 采集到的数据)
{
SUBF=采集到的数据;
while(TI==0);
TI=0;
}
将send函数放到你程序中的while(1)函数中不断轮询,串口初始化就不用再说了,在程序初始化时加上
回复

使用道具 举报

7#
ID:801010 发表于 2020-7-10 17:57 | 只看该作者
hsl32 发表于 2020-7-10 17:21
// 1.不要 Tab[]
// 2 while(1) 改成:
while(温度读好)

温度读好用代码怎么表示呀,还有温度低字节,高字节,清温度读好标志,
回复

使用道具 举报

8#
ID:332444 发表于 2020-7-11 07:58 | 只看该作者
2个蛋骗鸡加载同一个程序,本程序甲乙蛋骗鸡互发数字在数码管中显示。



回复

使用道具 举报

9#
ID:767423 发表于 2020-7-11 08:14 | 只看该作者
ll66m 发表于 2020-7-10 17:57
温度读好用代码怎么表示呀,还有温度低字节,高字节,清温度读好标志,

你不是读了温度,在LCD1液晶上显示了嘛,把这个温度发出去就好了。MAX6675读出来的温度是12位的,一般占用2个字节,而串口一次只能发送一个字节,所以要发两次。先发高还是低字节自己定义。串口不是一直发数据,而是读出MAX6675的温度一次,就发一次数据,我要一个读好标志是因为读温度和串口发送是独立分开的,所以要一个标志告诉串口发送程序可以发送了(标志要清除,不然会一直发不停)。如果读温度和串口发送合在一起就不用标志了,也就是读温度程序和串口发送都放在while()里面(还有LCD显示),读温度然后接着串口发送,一直循环。
回复

使用道具 举报

10#
ID:801010 发表于 2020-7-11 10:29 | 只看该作者
hsl32 发表于 2020-7-11 08:14
你不是读了温度,在LCD1液晶上显示了嘛,把这个温度发出去就好了。MAX6675读出来的温度是12位的,一般占 ...

好的,我试试
回复

使用道具 举报

11#
ID:801010 发表于 2020-7-11 11:16 | 只看该作者
hsl32 发表于 2020-7-11 08:14
你不是读了温度,在LCD1液晶上显示了嘛,把这个温度发出去就好了。MAX6675读出来的温度是12位的,一般占 ...

怎样把我测得的十二位数据放在Tab里啊
回复

使用道具 举报

12#
ID:801010 发表于 2020-7-11 12:02 | 只看该作者
ll66m 发表于 2020-7-11 11:16
怎样把我测得的十二位数据放在Tab里啊

会放了。
回复

使用道具 举报

13#
ID:767423 发表于 2020-7-11 12:36 | 只看该作者

如果只有这12位可以不用Tab,直接发两个字节就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表