keil 编程问题

2020-01-27 11:46发布

写了个程序 有四个警告 前三个我知道怎么回事 但是这个警告我找不出原因*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS     SEGMENT: ?CO?循迹调速

大神指教
代码如下
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include <stdio.h>
#include <string.h>
#define        uchar unsigned char
#define uint  unsigned  int
uchar m1=0;                  //左右电机的占空比
uchar m2=0;
uchar temp1=0 ;
uchar temp2=0 ;                   //当前占空比
uchar t=0;            //中断次数

/***----小车直流电机定义----***/
sbit pwma=P1^0;
sbit pwmb=P1^1;
sbit out1=P1^2;
sbit out2=P1^3;
sbit out3=P1^4;
sbit out4=P1^5;
/*****1602显示定义*****************/
sbit rs=P0^4;                 //数据命令控制端
sbit rw=P0^5;                 //读写控制端
sbit en=P0^6;                 //使能端
unsigned char code init1[]="The distance" ;
unsigned char code init2[]="iscm" ;
unsigned char code init3[]="Danger close!" ;
uchar tracking1[]="   Welcome to  ";       
uchar tracking2[]=" tracking mode ";
/****************************************
/--------------红外循迹模块定义-------***/
sbit right1_ray=P0^0;
sbit right2_ray=P0^1;
sbit left1_ray=P0^2;
sbit left2_ray=P0^3;
/********************************************
**************按键控制模式定义***************/
uchar mode=1;              //模式变量 分为壁障模式 循迹模式 蓝牙控制模式

void delay(uint j)
{
  while(j--);
  }
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--)  ;
}
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--)  ;
}

void Carturn_right()
{

  pwma=1;
  pwmb=1;
  out1=0;                                                   //左转
  out2=1;
  out3=1;
  out4=0;
  
  }
void Carturn_left()                               
{
  pwma=1;
  pwmb=1;
  out1=1;                                                   //左边 前进
  out2=0;
  out3=0;                                                   //右边后退
  out4=1;
  
  }
void Carfoward_move()
{
/* pwma=1;
  pwmb=1;*/
  out1=1;                                                 //前进
  out2=0;
  out3=1;
  out4=0;
  
  }
void Carback_move()
{

  pwma=1;
  pwmb=1;
  out1=0;                                                 //后退
  out2=1;
  out3=0;
  out4=1;
  
  }
void Car_stop()
{

  pwma=1;
  pwmb=1;
  out1=0;                                                 //停止
  out2=0;
  out3=0;
  out4=0;

}
void write_command(unsigned char com)           /***lcd1602写指令***/
{
  rs=0;
  rw=0;
  en=0;       //先拉低使能端,因为初始化默认为高电平
  P2=com;
  delay_50us(6);
  en=1;
  delay_50us(20);
  en=0;

}
void write_data(unsigned int dat)
{
  rs=1;
  rw=0;
  en=0;
  P2=dat;
  delay_50us(6);
  en=1;
  delay_50us(20);
  en=0;
}
void disp_string(uchar x,uchar y,uchar k,uchar *s,uchar z)        //x y指定液晶位置 k决定输出字符串还是单个数字 传递数组首地址给形参
{
  if(y==1)
    {
          write_command(0x80+x);
          }
   if(y==2)
   {
      write_command(0xc0+x);                  //确定地址
          
          }
        switch(k)
    {
          case 1:        if(*s) {  write_data(s[z]);}  break;          //单个字符字符显示 z为数组的第几位数
          case 2:        while(*s) { write_data(*s) ;  s++; }  break;  //字符串显示
          default: break;
          }
                   
  }
void motor_foward(uchar speed_left,uchar speed_right)
{
  if((speed_left>=0&&speed_left<=100)&&(speed_right>=0&&speed_right<=100))
   {
              m1=abs(speed_left);
                m2=abs(speed_right);
            Carfoward_move();
                 }
    }
  

void timer2(void) interrupt 5
{

TF2=0;            /**定时器2的中断标志必须软件清零,由于定时器设置为是自动重装,不用赋值*/
if(t==0)
{
  temp1=m1;
  temp2=m2;
  }
if(t<temp1)pwma=1;else pwma=0;
if(t<temp2)pwmb=1;else pwmb=0;
t++;
if(t>=100) t=0;      //一次中断计数100us 100次10ms
}

void init_speed()
{
  RCAP2H=(65536-100)/256;                                                  //16位重装模式
  RCAP2L=(65536-100)%256;
  ET2=1;
  TR2=1;
  EA=1;
  }
void init_displyTracking()
{
  write_command(0x38);
  delay(20);
  write_command(0x0f);
  delay(20);
  write_command(0x06);
  delay(20);
  disp_string(0,1,2,tracking1,0);
  delay(20);
  disp_string(0,2,2,tracking2,0);
  delay(20);
  }
void main()                                                       //红外循
{
  uchar i;
  PX1=1;                   //外部中断1优先级最高
  init_speed();                 /*调速设置 还要调试********/
  Car_stop();
  init_displyTracking();
  while(mode==1)                                //为1时 红外循迹
    {  
           for(i=0;i<60;i++)
           {
                     motor_foward(i,i);
                 
                }
        if(P0&0x0f)
           {
               if(right2_ray==1||right1_ray==1)
            {
                    Carturn_right();
                }
                  
       else if(left1_ray==1||left2_ray==1)
                 {
                   Carturn_left();
                     }
               }
                }
    TR2=0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。