单片机/MCU论坛
直播中

gfzgmd

7年用户 20经验值
私信 关注
[问答]

51多机通信(TB8、RB8相关)

本帖最后由 gfzgmd 于 2017-7-29 15:21 编辑

    多机通讯调试过程中,我把单片机的TXD、RXD引脚短接后,为什么把TB8置1后发送数据,收到的数据还是RB8=0?
    程序源码截图如上,串口助手的调试结果如图。调了好久也没找出问题。。。求大佬们提点。


  1. //==================================================================================
  2. //                  多机通讯从机1程序
  3. //注:从机先接收地址,然后与自己的地址比较,正确了再接收数据,修改地址可挂多个从机
  4. //==================================================================================
  5. #include "reg52.h"
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. //#define   addr       0x31   //从机1地址
  9. #define   addr1      0x31   //从机1地址
  10. #define   addr2      0x32   //从机2地址

  11. sfr  AUXR=0x8E;

  12. /*蜂鸣器相关*/
  13. //=====================================蜂鸣器相关=========================================//
  14. ***it spk=P1^7;
  15. uchar code period[6]={1,2,5,10,30,100};
  16. uchar code time[6]={1,30,15,10,6,3};

  17. void delay10ms()                //@11.0592MHz
  18. {
  19.         unsigned char i = 108, j = 145;
  20.         do
  21.         {
  22.                 while (--j);
  23.         }
  24.         while (--i);
  25. }

  26. void        delay(uint        a)
  27. {
  28.         while(a--)
  29.         {
  30.                 delay10ms();
  31.         }
  32. }

  33. void        beep(uchar        k)        //T是闹钟固定周期,t响铃次数
  34. {
  35.         uint runtime;
  36.         while(runtime!=time[k])
  37.         {                  
  38.                 spk=!spk;
  39.                 delay(period[k]);
  40.                 spk=!spk;;
  41.                 delay(period[k]);         
  42.                 runtime++;
  43.         }
  44.         runtime=0;   
  45. }
  46. //=====================================蜂鸣器相关=========================================//

  47. void Uart_Init(void)
  48. {
  49.            PCON &= 0x7F;                //波特率不倍速
  50.         SCON = 0xf0;                //8位数据,可变波特率
  51. //        SCON = 0x50;
  52.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  53.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  54.         TMOD=0x20;    //定时器T1使用工作方式2
  55.         TL1 = 0xFD;                //设定定时初值
  56.         TH1 = 0xFD;                //设定定时器重装值
  57.         ET1 = 0;                //禁止定时器1中断
  58.         TR1 = 1;                //启动定时器1           
  59.         RI=1;
  60.         TI=1;
  61. }
  62. void send(uchar Data)     //发送数据程序
  63. {
  64.    while(!TI);     //等待发送完毕
  65.    TI=0;
  66.    SBUF=Data;
  67. //   while(!TI);
  68. }

  69. void main()
  70. {
  71. //    uchar tem,Data,n=0x30,m=0;
  72.     Uart_Init();
  73.         SM2=1;
  74. while(1)
  75. {
  76.         delay(50);
  77.         TB8=1;                        //地址帧        
  78.         send(0x31);                //发送地址
  79.         send(RB8);
  80.         if(RB8==0)        beep(0);
  81.         if(RB8==1)        beep(5);
  82.         delay(50);
  83.         TB8=0;                        //数据帧
  84.         send(0x32);                //发送数据
  85.         send(RB8);
  86.         if(RB8==0)        beep(0);
  87.         if(RB8==1)        beep(5);
  88. }
  89. }

004.png


更多回帖

发帖
×
20
完善资料,
赚取积分