/********************引脚定义*********************/ #include "reg51.h" typedef unsigned int uint; typedef unsigned char uchar; #define Duty_cycle 35 //占空间 #define Cycle 100 //PWM周期 sbit sensor_1 = P1^1; //红外检测 sbit sensor_2 = P1^1; sbit sensor_3 = P1^3; sbit Motor_1H = P2^0; //电机驱动控制信号 sbit Motor_1L = P2^1; sbit Motor_2H = P2^2; sbit Motor_2L = P2^3; sbit En_pwm1 = P2^4; //使能信号(RWM) sbit En_pwm2 = P2^5; uchar timer1; //定义变量 /***************主函数*********************/ void mian( ) { TimelConfig();//定时器初始化 while(1) { if(Sensor_1==0 && Sensor_2==1 && Semsor_3==0) //状态:轨迹居中 Go_Straight(); //向前 else if(Sensor_1==0 && Sensor_2==0 && Semsor_3==1) //偏左 Turn_Right(); //右转 else if(Sensor_1==1 && Sensor_2==0 && Semsor_3==0) //偏右 Turn_left(); //左转 else if(Sensor_1==0 && Sensor_2==0 && Semsor_3==0) //偏离轨道 Go_Back(); //后退 else Go_Straight( ); //前进 } } /**************设置定时器***********/ void Time1Config() { TMOD|= 0x10; //设置定时计数器T1工作在模式1 /***定时器赋初始值, 12MHZ下定时0.5ms***/ TH1 = 0xFE; TL1 = 0x0c; ET1 = 1; //开启定时器1中断 EA = 1; TR1 = 1; //开启定时器 } /********************定时器1的中断函数********************/ void Time1(void) interrupt 3 //3 为定时器1的中断号 { timer1++; if(timer1>Cyc1e) //PWM周期为100*0.5ms { timer1=0; } if(timer1 < Duty_cyc1e) //改变Duty_cyc1e这个值可以改变直流电机的速度 { En_pwm1=1; En_pwm2=1; } e1se { En_pwm1=0; En_pwm2=0; } TH1 = 0xFE; //重新赋初值 TL1 = 0x0c; } |
write_add()函数在第12行被注释掉了但在第138行被调用。 |
错误太多,程序结构都有问题。 |