找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1808|回复: 1
收起左侧

单片机双机通信,串口发送数据超过16位的程序问题

[复制链接]
ID:365235 发表于 2020-5-9 21:21 | 显示全部楼层 |阅读模式
采用串口通信实现两台单片机进行数据的收发,一台单片机想要把0x7fffff发送给另一台,我自己写的程序是先把0x7fffff分成7f高八位,ff中间8位,还有ff低8位,然后第二台单片机接收到数据后,将三次接收到的高八位中间8位和第八位 再合并成0x7fffff。我这个程序好像调试有问题,能不能请大神帮忙看看。主机程序:
#include<reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
void init()
{
TMOD=0x20; //M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位)
SCON=0x50; //SM0=0,SM1=1,REN=1 串口工作方式1,允许接收
TH1=0xfd; //晶振11.0592时,波特率9600
TL1=0xfd; //TL1计数,溢出后,TH1值送入TL1
EA=1; //开总中断
ES=1; //允许串口中断
TR1=1; //启动定时器1
}
void send(uchar m)
{
SBUF=m;
while(!TI);
TI=0;
}

void main()
{  
uchar mh,mz,ml;
long encode=0x7fffff;
init();
while(1)
{
         mh=(0x7fffff&0xffffff)>>16;
     mz=(0x7fffff&0x00ffff)>>8;
     ml=(0x7fffff&0x0000ff);
     send(mh);
         delayms(10);
         send(mz);
         delayms(10);
         send(ml);

}                  
}
void delayms(unsigned int xms)                //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}



从机程序:
#include<reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
void delayms(unsigned int xms);
void main()
{  
TMOD=0x20; //M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位)
SCON=0x50; //SM0=0,SM1=1,REN=1 串口工作方式1,允许接收
TH1=0xfd; //晶振11.0592时,波特率9600
TL1=0xfd; //TL1计数,溢出后,TH1值送入TL1
EA=1; //开总中断
ES=1; //允许串口中断
TR1=1; //启动定时器1
while(1);

}
void ser() interrupt 4
{
uchar table[3]={0};
uchar j;
long b;
RI=0;
table[j++]=SBUF;
b=(table[0]<<16)|(table[1]<<8)|table[2];
}


回复

使用道具 举报

ID:213173 发表于 2020-5-10 08:31 | 显示全部楼层
无标题.jpg
主机程序.zip (10 KB, 下载次数: 13)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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