找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2015|回復(fù): 4
收起左側(cè)

MAX6675測(cè)溫?cái)?shù)據(jù)發(fā)送串口單片機(jī)程序求助,有8處警告

[復(fù)制鏈接]
ID:471762 發(fā)表于 2019-1-22 17:25 | 顯示全部樓層 |閱讀模式
5.jpg 4.jpg 3.jpg 2.jpg 1.jpg

單片機(jī)源碼:
  1. #include<reg52.h>
  2. #include "intrins.h"//_nop_()延時(shí)函數(shù)使用
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. extern uchar lowEightBit[2],highEightBit[2];        /*用于存儲(chǔ) 2 個(gè)通道的數(shù)據(jù),每個(gè)通道兩個(gè)字節(jié)*/
  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); /*發(fā)送單個(gè)字符*/
  17. void send_str(unsigned char *str);/*發(fā)送單字符串*/
  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. { /*依次進(jìn)行 10 個(gè)通道數(shù)據(jù)的采集,每隔一秒采集一
  32. 次*/
  33. temperatureDetectionOne();
  34. temperatureDetectionTwo();
  35. }
  36. mdelay(4); //延時(shí),1s 采集一次,更新溫度數(shù)據(jù)
  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; //計(jì)算 T1 重載值
  46. TL1 = TH1; //初值等于重載值
  47. ET1 = 0; //禁止 T1 中斷
  48. ES = 1; //使能串口中斷
  49. TR1 = 1; //啟動(dòng) T1
  50. }

  51. uint temperatureDetectionOne() //熱電偶數(shù)據(jù)讀取,返回溫度
  52. {
  53. uchar i;
  54. unsigned long Temp_2;
  55. Temp_2=0;
  56. CS=1;
  57. SCK=0; _nop_(); _nop_();
  58. //這個(gè)_nop_()等效與匯編里面的 NOP 指令,也就是空一個(gè)機(jī)器周期,
  59. //在 51 單片機(jī)中_nop_()等于空 12 個(gè)時(shí)鐘周期【即一個(gè)機(jī)器周期】
  60. CS=0;
  61. for(i=0;i<16;i++)//16 位數(shù)據(jù)讀取
  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; //讀取完后對(duì) CS 置 1 進(jìn)行溫度轉(zhuǎn)換!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); //發(fā)送頭
  134. for(n =0;n<2;n++) //發(fā)送 2 個(gè)通道的數(shù)據(jù)
  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'; //發(fā)送尾
  144. }
  145. if(TI)
  146. {
  147. TI = 0;
  148. }
  149. }

  150. void send_byte(unsigned char c)
  151. {
  152. SBUF=c;
  153. while(!TI);//等待發(fā)送完數(shù)據(jù)
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:471762 發(fā)表于 2019-1-22 17:26 | 顯示全部樓層
有8處警告。。全是loweightbit higheightbit,到底是定義數(shù)組出了問題還是下面引用出了問題呢?
回復(fù)

使用道具 舉報(bào)

ID:471762 發(fā)表于 2019-1-22 17:28 | 顯示全部樓層
8處警告。。全是loweightbit 和 higheightbit ,到底是定義數(shù)組出了問題還是下面引用出了問題呢?  上面是整個(gè)程序,是用兩個(gè)6675芯片實(shí)現(xiàn)測(cè)溫,然后把數(shù)據(jù)傳到串口的功能,有大佬幫忙看看哪里有問題嗎?
回復(fù)

使用道具 舉報(bào)

ID:149389 發(fā)表于 2019-1-23 11:54 | 顯示全部樓層
本帖最后由 weidoit 于 2019-1-23 13:09 編輯

//extern uchar lowEightBit[2],highEightBit[2];        /*用于存儲(chǔ) 2 個(gè)通道的數(shù)據(jù),每個(gè)通道兩個(gè)字節(jié)*/  
/*第5行去掉  extern */
uchar lowEightBit[2],highEightBit[2];        /*用于存儲(chǔ) 2 個(gè)通道的數(shù)據(jù),每個(gè)通道兩個(gè)字節(jié)*/Keil編譯通過,Proteus 仿真如圖。
max.png
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


回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-1-23 13:42 | 顯示全部樓層
新手啊啊啊啊 發(fā)表于 2019-1-22 17:28
8處警告。。全是loweightbit 和 higheightbit ,到底是定義數(shù)組出了問題還是下面引用出了問題呢?  上面是 ...

extern uchar lowEightBit[2],highEightBit[2];//多了extern
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表