找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机与传感器串口通讯问题

[复制链接]
跳转到指定楼层
楼主
ID:187537 发表于 2017-4-8 20:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请帮帮小弟。
程序目的为单片机循环发送读取指令给传感器,然后接收传感器的应答数据中的第四位。遇到的问题是,本来在持续发送的读取指令在接收过一次应答数据后就不再发送。程序如下。
#include <reg52.h>
#define uint  unsigned int
#define uchar unsigned char
uchar table[]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A};
uchar rec[7];
uchar date;                 //定义数据
uchar rec_flag;             //接收数据标识,0 未接收数据 1 接收数据
uint num=0,acount=0,i;
void delay(uint);

void init_uart(void)  
{
    TMOD = 0x20;        //定时器T1使用工作方式2
    TH1  = 0xFD;        //设置初值
    TL1 = 0xFD;
    TR1  = 1;           //开始计时
    PCON = 0x00;        //SMOD=0;PCON第7位
    SCON = 0x50;        //工作方式1,波特率9600bit/s,允许接收
    ES=1;
    EA = 1;             //开启总中断
}

void send(void)
{
   
    for(num=0;num<=7;num++)
{
        SBUF = table[num];  //发送数据
        while(!TI);     //等待发送完成
    //delay(20);
        TI = 0;
}
}

void receive(void)  
{
    if(RI==1)           //检测是否有数据接收
    {
   
   rec[acount] = SBUF;   //接收数据
   acount++;
   RI = 0;   //清除标志位
   if(num==7) num=0;
    }
}

void delay (uint i)
{
while(i--);
}

void main(void)
{
init_uart();        //初始化串行口
do
{
  send();
  delay(20000);
}
  while(1);
}

void jieshou(void) interrupt 4
{
   receive();
   P1=rec[4];
   RI=0;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:187537 发表于 2017-4-8 20:33 | 只看该作者
做的是检测光幕传感器,应答数据第4位为被遮挡光束数量
回复

使用道具 举报

板凳
ID:151348 发表于 2017-4-9 09:09 | 只看该作者
先用串口调试助手看看
回复

使用道具 举报

地板
ID:187638 发表于 2017-4-9 10:39 | 只看该作者
谢谢!学了知识
回复

使用道具 举报

5#
ID:187537 发表于 2017-4-9 14:41 | 只看该作者
imxuheng 发表于 2017-4-9 09:09
先用串口调试助手看看

串口助手和传感器两样都试了,一样的结果
回复

使用道具 举报

6#
ID:187537 发表于 2017-4-9 21:06 | 只看该作者
问题已解决,receive子函数中num改成account。谢谢诸位点进来的大哥们
回复

使用道具 举报

7#
ID:188051 发表于 2017-4-10 14:28 | 只看该作者
谢谢指引~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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