找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机485通讯数组数据发送不成功的问题

[复制链接]
跳转到指定楼层
楼主
我在电脑上用串口助手发送了下图的这样一组数据
55AA00 000101 00D900 000000 000000 000000 000025 646973 70 32 3a 30 32383435 00000d0a


现在需要用51单片机发送该组数据,希望也能达到串口助手里的设置的参数效果
波特率9600 ,校验位 无   数据位8  停止位1
16进制发送

单片机是51的,晶振11.0592

我想把这些数据存放在一个数组,然后通过485把数组发送出去,编了个程序如下:


#include"reg52.h"
typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;

u8 jieshou[]={0x55,0xAA,0x00,0x00,0x01,0x01,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x64,0x69,0x73,0x70,
    0x32,0x3A,0x30,0x32,0x38,0x34,0x35,0x00,0x00,0x0D,0x0A};

void main()
{
      u8 i;      //定义循环序号
      u16 t;      //定义延时参数
     TMOD=0X20;     //置T1定时器工作方式2
     TH1=0xfd;TL1=0xfd;   //置T1计数初值(波特率9600b/s)
     SCON=0x40;     //置串行方式1,禁止接收
     PCON=0;      //置SMOD=0
     ET1=0;      //禁止T1中断
     ES=0;      //禁止串行中断
     TR1=1;      //T1启动



while(1)
{
  
       for(i=0;i<36;i++)
       {
             SBUF=jieshou[ i];   //串行发送一帧数据
              while(TI==0);    //等待一帧数据发送完成
              TI=0;      //清发送中断标志
   
             for(t=0;t<11000;t++);    //延时500ms

         
            }

}


问题是:1)能否这样写在数组里??

              2)为什么程序发送不成功?

请高人指点,如果这样不对程序应该怎么写?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2018-11-20 21:45 | 只看该作者
用这个程序验证串口通讯没有什么问题,就是会无限循环发送36个16进制数。你在串口助手里看不到发送的数据可能是没有操作好串口助手。




回复

使用道具 举报

板凳
ID:303383 发表于 2018-11-20 22:56 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:47286 发表于 2018-11-20 23:58 | 只看该作者
你没操作485片子 发送时要把485片子的管脚置1 具体哪个管脚你看一下手册
回复

使用道具 举报

5#
ID:154096 发表于 2018-11-21 00:10 | 只看该作者
程序应该没问题
回复

使用道具 举报

6#
ID:286614 发表于 2018-11-21 16:06 来自手机 | 只看该作者
谢谢大家,搞了半天,串口助手里忘了把16进制显示勾上
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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