找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MAX6675测温数据发送串口单片机程序求助,有8处警告

[复制链接]
跳转到指定楼层
楼主


单片机源码:
  1. #include<reg52.h>
  2. #include "intrins.h"//_nop_()延时函数使用
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. extern uchar lowEightBit[2],highEightBit[2];        /*用于存储 2 个通道的数据,每个通道两个字节*/
  6. sbit SO=P0^0; //P0.0 口与 SO 相连
  7. sbit CS=P1^0; //P1.0 口与 CS 相连
  8. sbit SCK=P0^1; //P0.1 口与 SCK 相连
  9. sbit SO_TWO=P0^2; //P0.2 口与 SO 相连
  10. sbit CS_TWO=P1^1; //P1.1 口与 CS 相连
  11. sbit SCK_TWO=P0^3; //P0.3 口与 SCK 相连
  12. uint temperatureDetectionOne();
  13. uint temperatureDetectionTwo();
  14. void ConfigUART(unsigned int baud);
  15. void mdelay(unsigned int xms);
  16. void send_byte(unsigned char c); /*发送单个字符*/
  17. void send_str(unsigned char *str);/*发送单字符串*/
  18. unsigned int j;
  19. unsigned int i;
  20. unsigned int n;
  21. unsigned char *start = "lzh";

  22. void main()//主程序
  23. {
  24. EA = 1; //使能总中断
  25. ConfigUART(9600); //配置波特率为 9600
  26. while(1)
  27. {
  28. for(j=250;j>0;j--)
  29. {
  30. if(j==250)
  31. { /*依次进行 10 个通道数据的采集,每隔一秒采集一
  32. 次*/
  33. temperatureDetectionOne();
  34. temperatureDetectionTwo();
  35. }
  36. mdelay(4); //延时,1s 采集一次,更新温度数据
  37. }
  38. }
  39. }
  40. void ConfigUART(unsigned int baud)
  41. {
  42. SCON = 0x50; //配置串口为模式 1
  43. TMOD &= 0x0F; //清零 T1 的控制位
  44. TMOD |= 0x20; //配置 T1 为模式 2
  45. TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
  46. TL1 = TH1; //初值等于重载值
  47. ET1 = 0; //禁止 T1 中断
  48. ES = 1; //使能串口中断
  49. TR1 = 1; //启动 T1
  50. }

  51. uint temperatureDetectionOne() //热电偶数据读取,返回温度
  52. {
  53. uchar i;
  54. unsigned long Temp_2;
  55. Temp_2=0;
  56. CS=1;
  57. SCK=0; _nop_(); _nop_();
  58. //这个_nop_()等效与汇编里面的 NOP 指令,也就是空一个机器周期,
  59. //在 51 单片机中_nop_()等于空 12 个时钟周期【即一个机器周期】
  60. CS=0;
  61. for(i=0;i<16;i++)//16 位数据读取
  62. {
  63. Temp_2<<=1;//向左移一位
  64. _nop_();
  65. SCK=1;//上升
  66. if(SO==1)
  67. {Temp_2=Temp_2|0x01;}
  68. else
  69. Temp_2=Temp_2|0x00; _nop_();
  70. SCK=0; _nop_();
  71. }
  72. CS=1; //读取完后对 CS 置 1 进行温度转换!MAX6675 的
  73. /*热电偶断开*/
  74. if((Temp_2>>2)&(0x01) || Temp_2 == 0x1fff)
  75. {
  76. Temp_2 = 0x0000;
  77. }
  78. else /*正常*/
  79. {
  80. Temp_2=Temp_2<<1;
  81. Temp_2=Temp_2>>4;
  82. }
  83. lowEightBit[0] = Temp_2 & (0xff);
  84. highEightBit[0] = (Temp_2>>8)&(0xff);
  85. Temp_2=Temp_2*100/4; //变换为温度值--每 LSB 代表 0.25 度,注意:在此处先
  86. return(Temp_2);
  87. }

  88. uint temperatureDetectionTwo()
  89. {
  90. uchar i;
  91. unsigned long Temp_2;
  92. Temp_2=0;
  93. CS_TWO=1;
  94. SCK_TWO=0; _nop_(); _nop_();
  95. CS_TWO=0;
  96. for(i=0;i<16;i++)
  97. {
  98. Temp_2<<=1; _nop_();
  99. SCK_TWO=1;
  100. if(SO_TWO==1)
  101. {Temp_2=Temp_2|0x01;}
  102. else
  103. Temp_2=Temp_2|0x00; _nop_();
  104. SCK_TWO=0; _nop_();
  105. }
  106. CS_TWO=1;
  107. /*热电偶断开*/
  108. if((Temp_2>>2)&(0x01) || Temp_2 == 0x1fff)
  109. {
  110. Temp_2 = 0x0000;
  111. }
  112. else /*正常*/
  113. {
  114. Temp_2=Temp_2<<1;
  115. Temp_2=Temp_2>>4;
  116. }
  117. lowEightBit[1] = Temp_2 & (0xff);
  118. highEightBit[1] = (Temp_2>>8)&(0xff);
  119. Temp_2=Temp_2*100/4;
  120. return(Temp_2);
  121. }

  122. void mdelay(unsigned int xms)
  123. {
  124. unsigned i,j;
  125. for(i=xms;i>0;i--)
  126. for(j=112;j>0;j--);
  127. }

  128. void InterruptUART() interrupt 4
  129. {
  130. if(RI)
  131. {
  132. RI = 0;
  133. send_str(start); //发送头
  134. for(n =0;n<2;n++) //发送 2 个通道的数据
  135. {
  136. SBUF = lowEightBit[n];
  137. while(!TI);
  138. TI = 0;
  139. SBUF = highEightBit[n];
  140. while(!TI);
  141. TI = 0;
  142. }
  143. SBUF = 'e'; //发送尾
  144. }
  145. if(TI)
  146. {
  147. TI = 0;
  148. }
  149. }

  150. void send_byte(unsigned char c)
  151. {
  152. SBUF=c;
  153. while(!TI);//等待发送完数据
  154. TI=0;
  155. }

  156. void send_str(unsigned char *str)
  157. {
  158. while(*str!='\0')
  159. {
  160. send_byte(*str);
  161. str++;
  162. }
  163. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:471762 发表于 2019-1-22 17:26 | 只看该作者
有8处警告。。全是loweightbit higheightbit,到底是定义数组出了问题还是下面引用出了问题呢?
回复

使用道具 举报

板凳
ID:471762 发表于 2019-1-22 17:28 | 只看该作者
8处警告。。全是loweightbit 和 higheightbit ,到底是定义数组出了问题还是下面引用出了问题呢?  上面是整个程序,是用两个6675芯片实现测温,然后把数据传到串口的功能,有大佬帮忙看看哪里有问题吗?
回复

使用道具 举报

地板
ID:149389 发表于 2019-1-23 11:54 | 只看该作者
本帖最后由 weidoit 于 2019-1-23 13:09 编辑

//extern uchar lowEightBit[2],highEightBit[2];        /*用于存储 2 个通道的数据,每个通道两个字节*/  
/*第5行去掉  extern */
uchar lowEightBit[2],highEightBit[2];        /*用于存储 2 个通道的数据,每个通道两个字节*/Keil编译通过,Proteus 仿真如图。

0x 02 00>>2 = 0x80= 128(DEC)   0x0200%0x04=0    0/4=0
0x 02 05>>2 = 0x81= 129 (DEC)    0x0205%0x04=1    1/4=0.25   129+0.25=129.25


回复

使用道具 举报

5#
ID:213173 发表于 2019-1-23 13:42 | 只看该作者
新手啊啊啊啊 发表于 2019-1-22 17:28
8处警告。。全是loweightbit 和 higheightbit ,到底是定义数组出了问题还是下面引用出了问题呢?  上面是 ...

extern uchar lowEightBit[2],highEightBit[2];//多了extern
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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