找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2078|回复: 6
收起左侧

单片机程序编译完 有一个警告 没找到原因 那位帮忙看看 万分感谢!

[复制链接]
ID:516910 发表于 2019-4-25 20:29 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. //#include <stdio.h>
  3. sbit Mr0 = P1^0;
  4. sbit Ml0 = P1^1;
  5. sbit Mr1 = P1^2;
  6. sbit Ml1 = P1^3;
  7. #define uint unsigned int
  8. #define uchar unsigned char

  9. #define card_go    {Mr0=0,Ml0=1,Mr1=0,Ml1=1;}//前进
  10. #define card_back  {Mr0=1,Ml0=0,Mr1=1,Ml1=0;}//后退
  11. #define Left_card_go   {Mr0=0,Ml0=1,Mr1=1,Ml1=0;}//左转圈
  12. #define Right_card_go   { Mr0=1,Ml0=0,Mr1=0,Ml1=1;}//右转圈
  13. #define stop_card   { Mr0=0,Ml0=0,Mr1=0,Ml1=0;}//stop
  14. #define up       'A'
  15. #define down     'B'
  16. #define left     'C'
  17. #define right    'D'
  18. #define stop     'F'
  19. //#define guohua_left         'C'
  20. //#define guohua_right        'D'
  21. //#define wang_left    '1'
  22. //#define wang_right   '3'
  23. //#define guo_left     '9'
  24. //#define guo_right     '7'
  25. char code str[] =  "收到指令,向前!\n";
  26. char code str1[] =  "收到指令,向后!\n";
  27. char code str2[] =  "收到指令,向左!\n";
  28. char code str3[] =  "收到指令,向右!\n";
  29. char code str4[] =  "收到指令,停止!\n";
  30. uchar  i=0;
  31. uchar  dat=0;
  32. uchar  buff[3]=0; //缓冲字节
  33. bit  flag_REC=0;
  34. bit  flag    =0;
  35. ////毫秒级延时函数定义
  36. ////void delay(uint z)
  37. ////{
  38. //// uint x,y;
  39. //// for(x = z; x > 0; x--)
  40. ////  for(y = 114; y > 0 ; y--);   
  41. ////}
  42. //
  43. ////字符串发送
  44. ////   void send_str( )
  45. ////{
  46. ////     unsigned char i = 0;
  47. ////     while(str[i] != '\0')
  48. ////    {
  49. ////    SBUF = str[i];
  50. ////    while(!TI);
  51. ////    TI = 0;
  52. ////    i++;
  53. ////    }
  54. ////}
  55. //
  56. ////   void send_str1( )
  57. ////{
  58. ////     unsigned char i = 0;
  59. ////     while(str1[i] != '\0')
  60. ////    {
  61. ////    SBUF = str[i];
  62. ////    while(!TI);
  63. ////    TI = 0;
  64. ////    i++;
  65. ////    }
  66. ////}
  67. ////
  68. ////   void send_str2( )
  69. ////{
  70. ////     unsigned char i = 0;
  71. ////     while(str2[i] != '\0')
  72. ////    {
  73. ////    SBUF = str[i];
  74. ////    while(!TI);
  75. ////    TI = 0;
  76. ////    i++;
  77. ////    }
  78. ////}
  79. ////
  80. ////   void send_str3( )
  81. ////{
  82. ////     unsigned char i = 0;
  83. ////     while(str3[i] != '\0')
  84. ////    {
  85. ////    SBUF = str[i];
  86. ////    while(!TI);
  87. ////    TI = 0;
  88. ////    i++;
  89. ////    }
  90. ////}
  91. ////
  92. ////   void send_str4( )
  93. ////{
  94. ////     unsigned char i = 0;
  95. ////     while(str4[i] != '\0')
  96. ////    {
  97. ////    SBUF = str[i];
  98. ////    while(!TI);
  99. ////    TI = 0;
  100. ////    i++;
  101. ////    }
  102. ////}
  103. void sint() interrupt 4   //中断接收3字节
  104. {
  105.     if(RI)                  
  106.     {
  107.        RI=0;
  108.     P1 = 0;
  109.        dat=SBUF;
  110.        if(dat=='O'&&(i==0)) //数据第一帧
  111.          {
  112.             buff[i]=dat;
  113.             flag=1;        
  114.          }
  115.        else
  116.       if(flag==1)
  117.      {
  118.       i++;
  119.       buff[i]=dat;
  120.       if(i>=2)
  121.       {i=0;flag=0;flag_REC=1 ;}  
  122.      }
  123.   }
  124. }
  125. //串口初始化
  126. void UART_INIT()
  127. {
  128. SM0 = 0; SM1 = 1;//串口工作方式1
  129. REN = 1;//允许串口接收
  130. EA = 1;//开总中断
  131. ES = 1;//开串口中断
  132. TMOD = 0x20;//8位自动重装模式
  133. TH1 = 0xfd;
  134. TL1 = 0xfd;//9600波特率
  135. TR1 = 1;//启动定时器1
  136. }
  137. void main()
  138. {
  139. UART_INIT(); //串口初始化
  140. while(1)
  141. {
  142.   if(flag_REC==1)        //中断接收完成
  143.     {
  144.     flag_REC=0;
  145.     if(buff[0]=='O'&&buff[1]=='N') //第一个字节0,第二个N,第三个控制码
  146.     switch(buff[2])
  147.        {
  148.           case up : card_go; break;
  149.      case down : card_back; break;
  150.      case left : Left_card_go; break;
  151.      case right : Right_card_go; break;
  152.      case stop : stop_card; break;
  153.    
  154.          
  155.    }
  156.   }
  157. }
  158. }
  159. /*************************************
  160. 备注:
  161. 使用printf()puts()前都应软件置位TI = 1;
  162. printf()puts()  使用putchar函数发送字节
  163. void putchar(uchar sbyte )
  164. {
  165.     while(!TI);   //等待发送完
  166.     SBUF=sbyte;
  167. }
  168. 所以第一次调用putchar前没TI=1 永远等待
  169. *************************************/
复制代码

回复

使用道具 举报

ID:164602 发表于 2019-4-26 08:33 | 显示全部楼层
没找到原因。
警告内容是说有一个“CO”的函数未被调用,但是我没有找到这个函数。真的很怪。
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?CO?01
回复

使用道具 举报

ID:516910 发表于 2019-4-26 09:38 来自手机 | 显示全部楼层
HC6800-ES-V2.0 发表于 2019-4-26 08:33
没找到原因。
警告内容是说有一个“CO”的函数未被调用,但是我没有找到这个函数。真的很怪。
*** WARNIN ...

我也是觉得费解,找不到原因。有没有可能串口数据与寄存器地址冲突,但是烧录到单片机能够正常运行,没有异常,单片机是STC89C52
回复

使用道具 举报

ID:80221 发表于 2019-4-26 16:09 | 显示全部楼层
有的定义的常量根本没用到,这些屏蔽掉就不会waring了
回复

使用道具 举报

ID:337069 发表于 2019-4-26 17:26 | 显示全部楼层
char code str[] 定义了没用,可能code类型会一直占用ROM存储空间,所以会有个警告
回复

使用道具 举报

ID:213173 发表于 2019-4-26 23:13 | 显示全部楼层
chtyise 发表于 2019-4-26 17:26
char code str[] 定义了没用,可能code类型会一直占用ROM存储空间,所以会有个警告

5楼正解,楼主定义的5个code类型常量数组没有调用,占用ROM存储空间。
char code str[] =  "收到指令,向前!\n";
char code str1[] =  "收到指令,向后!\n";
char code str2[] =  "收到指令,向左!\n";
char code str3[] =  "收到指令,向右!\n";
char code str4[] =  "收到指令,停止!\n";
回复

使用道具 举报

ID:516910 发表于 2019-4-29 13:18 | 显示全部楼层
chtyise 发表于 2019-4-26 17:26
char code str[] 定义了没用,可能code类型会一直占用ROM存储空间,所以会有个警告

感谢 感谢 原来如此
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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