写了个程序 有四个警告 前三个我知道怎么回事 但是这个警告我找不出原因*** 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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>