微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机连接红外测温模块无法进行串口调试打印问题

51单片机连接红外测温模块无法进行串口调试打印问题

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. #include <stdio.h>
  3. #include<intrins.h>
  4. #include <string.h>

  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. typedef unsigned int u16;          //对数据类型进行声明定义
  8. typedef unsigned char u8;
  9. unsigned char flag,i,a;


  10. uchar tempH,tempL,err;


  11. sbit SCL=P2^7;        // 时钟线
  12. sbit SDA=P2^6;

  13. //函数声明
  14. void SMBusStart();
  15. void Delay100us();
  16. unsigned  char SMBusReadByte();
  17. unsigned MLX90614ReadTemp(void);
  18. uint CALTEMP(uint TEMP);
  19. uchar final;
  20. void delay(u16 i);
  21. void init();

  22. //uchar code table[]="I get ";





  23. //主函数
  24. void main()
  25. {
  26.         u16 TEM;
  27.     init();
  28.         while(1)
  29.         {
  30.                
  31.                 if(flag == 1)
  32.                 {
  33.                         flag = 0;
  34.                         ES = 0;
  35.                         TI = 1;
  36.                         MLX90614ReadTemp();
  37.                         CALTEMP(TEM);
  38.                         printf("temp is %c",TEM);
  39.                         while(!TI);
  40.                         TI = 0;
  41.                         ES = 1;
  42.                 }
  43.                 delay(1000);
  44. }
  45. }


  46. void init()         //中断初始化
  47. {
  48.         TMOD = 0x20;
  49.         TH1 = 0xfd;
  50.         TL1 = 0xfd;
  51.         TR1 = 1;
  52.         SM0 = 0;
  53.         SM1 = 1;
  54.         REN = 1;
  55.         EA = 1;
  56.         ES = 1;
  57. }

  58. void ser() interrupt 4
  59. {
  60.         if(RI)
  61.         {
  62.         RI = 0;
  63.         a = SBUF;
  64.         flag = 1;
  65.         }
  66.         if(TI)
  67.         {}
  68.        
  69. }


  70. //大延时函数
  71. void delay(u16 i)
  72. {
  73.         while(i--);       
  74. }
  75. //小延时函数
  76. void Delay100us(void)   
  77. {
  78.     unsigned char a,b;
  79.     for(b=1;b>0;b--)
  80.         for(a=47;a>0;a--);
  81. }


  82. void SMBusStart() //开始
  83. {
  84.         SDA = 1;
  85.         Delay100us();
  86.         SCL = 1;
  87.         Delay100us();
  88.         SDA = 0;
  89.         Delay100us();
  90.         SCL = 0;       
  91. }

  92. void SMBusStop()//结束
  93. {
  94.         SDA = 0;
  95.         Delay100us();
  96.         SCL = 1;
  97.         Delay100us();
  98.         SDA = 1;
  99.         Delay100us();
  100. }

  101. unsigned char SMBusSendByte(unsigned char dat) //发送字节
  102. {
  103.          unsigned char a=0,b=0;
  104.          for(a = 0; a < 8; a ++)
  105.          {
  106.                  SDA = dat>>7;
  107.                 dat = dat<<1;
  108.                 Delay100us();
  109.                 SCL = 1;
  110.                 Delay100us();
  111.                 SCL = 0;
  112.                 Delay100us();
  113.          }
  114.          SDA = 1;
  115.          Delay100us();
  116.          SCL = 1;
  117.          while(SDA)
  118.          {
  119.                  b ++;
  120.                 if(b > 200)
  121.                 {
  122.                         SCL = 0;
  123.                         Delay100us();
  124.                         return 0;
  125.                 }       
  126.          }
  127.          SCL = 0;
  128.          Delay100us();
  129.          return 1;
  130. }

  131. unsigned  char SMBusReadByte() //读取字节
  132. {
  133.         unsigned char a=0,dat=0;
  134.         SDA = 1;
  135.         Delay100us();
  136.         for(a = 0; a < 8; a ++)
  137.         {
  138.                 SCL = 1;
  139.                 Delay100us();
  140.                 dat <<= 1;
  141.                 dat |= SDA;
  142.                 Delay100us();
  143.                 SCL = 0;
  144.                 Delay100us();
  145.         }
  146.         return dat;
  147. }

  148. unsigned MLX90614ReadTemp(void)          //读取温度数据 8bit
  149. {
  150.         SCL = 0;
  151.         SMBusStart();
  152.         SMBusSendByte(0x00);
  153.         SMBusSendByte(0x07);
  154.         SMBusStart();
  155.         SMBusSendByte(0x01);
  156.         tempL = SMBusReadByte();
  157.         tempH = SMBusReadByte();
  158.         err = SMBusReadByte();
  159.         SMBusStop();
  160.         return(tempH*256+tempL);
  161. }

  162. uint CALTEMP(uint TEMP)//温度数据计算处理
  163. {
  164.       uint T;
  165.       uint a,b;
  166.       uchar A4,A5,A6,A7,A8;
  167.           uchar mah[5];
  168.       T=TEMP*2;
  169.       if(T>=27315)         //温度为正值
  170.             {
  171.                T=T-27315;
  172.                a=T/100;
  173.                b=T-a*100;
  174.                if(a>=100)
  175.                    {
  176.                       A4=a/100;  //百
  177.                       a=a%100;          
  178.                       A5=a/10;           //十
  179.                       a=a%10;
  180.                       A6=a;           //个
  181.                     }
  182.                else if(a>=10)
  183.                     {
  184.                       A4=0;
  185.                       A5=a/10;
  186.                       a=a%10;
  187.                       A6=a;
  188.                     }
  189.                else  
  190.                     {
  191.                       A4=0;
  192.                       A5=0;
  193.                       A6=a;
  194.                     }
  195.                if(b>=10)
  196.                     {
  197.                       A7=b/10;
  198.                       b=b%10;
  199.                       A8=b;
  200.                     }
  201.                 else
  202.                     {
  203.                       A7=0;
  204.                       A8=b;
  205.                     }
  206.              }
  207.          else  //温度为负值
  208.                {
  209.                   T=27315-T;
  210.                   a=T/100;
  211.                   b=T-a*100;
  212.                   A4=9;
  213.                   if(a>=10)
  214.                       {
  215.                          A5=a/10;
  216.                          a=a%10;
  217.                          A6=a;
  218.                       }
  219.                   else  
  220.                       {
  221.                          A5=0;
  222.                          A6=a;
  223.                       }
  224.                   if(b>=10)
  225.                       {
  226.                          A7=b/10;
  227.                          b=b%10;
  228.                          A8=b;
  229.                       }
  230.                   else
  231.                       {
  232.                          A7=0;
  233.                          A8=b;
  234.                       }
  235.                 }
  236.              mah[4]=A4;
  237.              mah[3]=A5;
  238.              mah[2]=A6;
  239.              mah[1]=A7;
  240.              mah[0]=A8;
  241.                          return mah;   /////////////////////////////////////////////////////////
  242.                
  243. }

复制代码

我已经看了一整天了,实在是不懂为什么会无法在串口调试助手里面看到数据,也不知道模块正常工作了没有,求助


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top