找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7227|回复: 11
收起左侧

单片机与RS232进行通信 一直接收不到数据

[复制链接]
ID:209803 发表于 2017-6-10 17:05 | 显示全部楼层 |阅读模式

各位大神请看下这个程序哪里出问题了,一直接收不到数据,需要实现下面这个功能
1.PNG 2.PNG

  1. #include <AT89X51.h>
  2. #define uchar unsigned  char
  3. #define uint unsigned int
  4. uchar trdata[]={0xaa,0x01,0x03,0x0f,0x00,0x05};
  5. uchar rece;
  6. uchar j;

  7. //uchar  code trdata1[]={'R','I','C','H','M','C','U',0x0d,0x0a,0x00};
  8. uchar flag=1;
  9. void delay1ms(uint i)
  10. {
  11. uchar j;
  12.          while(i--)
  13.          {
  14.                  for(j=0;j<115;j++)          //1ms基准延时程序
  15.                  {
  16.                   ;
  17.                  }
  18.          }
  19. }
  20. main()
  21. {
  22. uchar i;
  23. SCON= 0x50;                //串口方式允许接收
  24. //SM0=0;
  25. //SM1=1;
  26. //REN=0;
  27. PCON= 0x00;                     //SMOD=0
  28. TMOD= 0x20;                //定时器1定时方式2
  29. TH1= 0xfd;                //11.0592M 9600波特率
  30. TL1= 0xfd;
  31. TR1= 1;                  //启动定时器
  32. EA=1;
  33.   while(1)
  34.         {
  35.           if(flag==1){
  36.             ES=0;        
  37.             i=0;
  38.         while(trdata[i]!=0x05)
  39.                     {
  40.                                 P0=trdata[i];
  41.                             SBUF=trdata[i];
  42.                           while(!TI);
  43.                           TI=0;
  44.                           i++;
  45.                                 delay1ms(1000);
  46.                 }
  47.                   if(i>4)
  48.                     {
  49.                         flag=0;
  50.                         ES=1;
  51.                      }
  52.                         }
  53.         }
  54. }
  55. void INT_UartRcv(void) interrupt 4
  56. {

  57.     if(RI==1){
  58.     RI=0;
  59.         rece=SBUF;
  60.         P0=0xff;
  61.         j++;
  62.         delay1ms(100);
  63. //        bulb=1;
  64. //        bulb1=1;        
  65.         if(j>12){
  66.           flag=1;
  67.           j=0;
  68.           ES=0;
  69.           }
  70.          }
  71. }
复制代码
回复

使用道具 举报

ID:209803 发表于 2017-6-10 17:07 | 显示全部楼层
请各位大神帮忙
回复

使用道具 举报

ID:209803 发表于 2017-6-10 17:08 | 显示全部楼层
顶一下,求各位大神帮忙
回复

使用道具 举报

ID:123289 发表于 2017-6-10 17:57 | 显示全部楼层
把你的程序画成流程框图,你就知道问题在哪里了。
回复

使用道具 举报

ID:82765 发表于 2017-6-10 20:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:209803 发表于 2017-6-10 21:28 | 显示全部楼层
本帖最后由 至上力晨 于 2017-6-10 21:38 编辑
cjjcjj1 发表于 2017-6-10 20:01
你好!是仿真实现的吗?发一下原理图看看,帮你改一下

这个传感器的端口为RS232端口,通信协议是ASC2码,一个4个线,电源、地、信号发送和接收。信号线分别接到下图DB9的2脚和3脚。传感器和电脑相连通过串口调试助手可以看到返回的数据,但是希望通过程序发送指令并接收返回的值。不知道程序出现什么问题了,这个程序的中断进不去,应该就是没有返回数据。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:209803 发表于 2017-6-10 21:30 | 显示全部楼层
3.PNG
回复

使用道具 举报

ID:209803 发表于 2017-6-10 21:31 | 显示全部楼层
yzwzfyz 发表于 2017-6-10 17:57
把你的程序画成流程框图,你就知道问题在哪里了。

这可能是指令发送的问题吧,因为我有串口调试助手可以采集到数据
回复

使用道具 举报

ID:111634 发表于 2017-6-10 23:26 | 显示全部楼层
本帖最后由 zl2168 于 2017-6-10 23:27 编辑

实例80  带RS 232接口的双机通信
Proteus仿真一下,确认有效。
实例80 带RS232接口的双机通信.rar (45.52 KB, 下载次数: 30)
回复

使用道具 举报

ID:209803 发表于 2017-6-11 09:06 | 显示全部楼层
zl2168 发表于 2017-6-10 23:26
实例80  带RS 232接口的双机通信
先Proteus仿真一下,确认有效。

同样感谢,但是我不知道传感器内部是怎么进行收发的
回复

使用道具 举报

ID:111634 发表于 2017-6-11 09:26 | 显示全部楼层
至上力晨 发表于 2017-6-11 09:06
同样感谢,但是我不知道传感器内部是怎么进行收发的

书上有详细解读分析。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

ID:162500 发表于 2017-6-11 10:12 | 显示全部楼层
在中断函数里加一些打印信息,看看进没进中断函数
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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