中间循迹不好用,谁帮忙看一下为什么?
时间:10-02
整理:3721RD
点击:
C51 COMPILER V9.00 MAIN 02/18/2016 14:27:20 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************ZYWIFI0939C-WIFI机器人实验板例程************************
2 * 平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
3 * 名称:ZY-1智能小车参考程序
4 * 公司:湖南智宇科教设备有限公司
7 * 编写:智宇公司研发一部
8 * 日期:2015-1-15
9 * 交流:智能车QQ:261339276
10 * 晶振:11.0592MHZ
11 * 说明:免费开源,不提供源代码分析
12 * 硬件设置:要有自己动手能力,才能完成实验
13 * 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
14 * 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
15 重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
16
17 /******************************************************************/
18
19 //注意程序只做参考之用,要达到最理想的寻迹效果,还需要同学们细心调试。
20 #include<AT89X52.H> //包含51单片机头文件,内部有各种寄存器定义
21 #include<ZY-4WD_PWM.H> //包含HL-1蓝牙智能小车驱动IO口定义等函数
22
23 //主函数
24 void main(void)
25 {
26 1
27 1 unsigned char i;
28 1 P1=0X00; //关电机
29 1
30 1 TMOD=0X01;
31 1 TH0= 0XFc; //1ms定时
32 1 TL0= 0X18;
33 1 TR0= 1;
34 1 ET0= 1;
35 1 EA = 1; //开总中断
36 1
37 1
38 1 while(1) //无限循环
39 1 {
40 2
41 2 //有信号为0 没有信号为1
42 2
43 2 if(Left_1_led==0 && interm_1_led ==1 && Right_1_led == 0)
44 2
45 2 run(); //调用前进函数
46 2 //delay(40);
47 2 else
48 2 {
49 3 if(Left_1_led==1 && interm_1_led ==0 && Right_1_led == 0) //左边检测到黑线
50 3 {
51 4 leftrun(); //调用小车左转 函数
52 4 delay(2);
53 4 }
54 3
55 3
C51 COMPILER V9.00 MAIN 02/18/2016 14:27:20 PAGE 2
56 3 if(Left_1_led==1 && interm_1_led ==1 && Right_1_led == 0) //左边检测到黑线
57 3 {
58 4 leftrun(); //调用小车左转 函数
59 4 delay(2);
60 4 }
61 3
62 3 if(Left_1_led==0 && interm_1_led ==0 && Right_1_led == 1) //右边检测到黑线
63 3 {
64 4 rightrun(); //调用小车右转 函数
65 4 delay(2);
66 4 }
67 3
68 3 if(Left_1_led==0 && interm_1_led ==1 && Right_1_led == 1) //左边检测到黑线
69 3 {
70 4 rightrun(); //调用小车右转 函数
71 4 delay(2);
72 4 }
73 3 if(Left_1_led==1 && interm_1_led ==1 && Right_1_led == 1) //悬空状态 避悬崖
74 3 {
75 4 stop(); //调用小车停止
76 4
77 4 }
78 3
79 3 if(Left_1_led==0 && interm_1_led ==0 && Right_1_led == 0) //
80 3 {
81 4 run(); //调用小车后退
82 4 delay(2);
83 4 //rightrun(); //调用小车左转 函数
84 4 //delay(10);
85 4
86 4 }
87 3
88 3 }
89 2 }
90 1 }
*** WARNING C280 IN LINE 27 OF MAIN.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 316 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
* 名称:ZY-1智能小车参考程序
* 公司:湖南智宇科教设备有限公司
* * 日期:2015-1-15
* 交流:智能车QQ:261339276
* 晶振:11.0592MHZ
* 说明:免费开源,不提供源代码分析
* 硬件设置:要有自己动手能力,才能完成实验
* 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
* 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
ZYWIFI0939WIFI控制智能机器人杜邦线接线方法,请一定照做,否则可能不工作,并烧毁小车。
******************************************************************/
#ifndef _LED_H_
#define _LED_H_
//定义小车驱动模块输入IO口
sbit L293D_IN1=P1^2;
sbit L293D_IN2=P1^3;
sbit L293D_IN3=P1^4;
sbit L293D_IN4=P1^5;
sbit L293D_EN1=P1^6;
sbit L293D_EN2=P1^7;
/***蜂鸣器接线定义*****/
sbit BUZZ=P2^3;
#define Left_1_led P3_7 //左传感器
#define Right_1_led P3_6 //右传感器
#define interm_1_led P0_0 //中传感器
#define Left_moto_pwm P1_6 //PWM信号端
#define Right_moto_pwm P1_7 //PWM信号端
#define Left_moto_go {P1_2=1,P1_3=0;} //左电机向前走
#define Left_moto_back {P1_2=0,P1_3=1;} //左边电机向后转
#define Left_moto_Stop {P1_2=0,P1_3=0;} //左边电机停转
#define Right_moto_go {P1_4=1,P1_5=0;} //右边电机向前走
#define Right_moto_back {P1_4=0,P1_5=1;} //右边电机向后走
#define Right_moto_Stop {P1_4=0,P1_5=0;} //右边电机停转
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
void run(void)
{
push_val_left=15; //速度调节变量 0-20。0最小,20最大
push_val_right=15;
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}
//后退函数
void backrun(void)
{
push_val_left=15; //速度调节变量 0-20。0最小,20最大
push_val_right=15;
Left_moto_back; //左电机往后走
Right_moto_back; //右电机往后走
}
//左转
void leftrun(void)
{
push_val_left=6;
push_val_right=15;
Left_moto_back ; //左电机往后走
Right_moto_go ; //右电机往前
}
//右转
void rightrun(void)
{
push_val_left=15;
push_val_right=6;
Right_moto_back ; //左电机往前走
Left_moto_go ; //右电机往后
}
//停止
void stop(void)
{
Right_moto_Stop ; //右电机停止
Left_moto_Stop ; //左电机停止
}
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
// Left_moto_pwm1=1;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
// Right_moto_pwm1=1;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
}
/***************************************************/
///*TIMER0中断服务子函数产生PWM信号*/
void timer0()interrupt 1 using 2
{
TH0=0XFc; //1Ms定时
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*********************************************************************/
#endif
AT89X52.H
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X52_H__
#define __AT89X52_H__
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0 = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr P1 = 0x90;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr P2 = 0xA0;
sfr IE = 0xA8;
sfr P3 = 0xB0;
sfr IP = 0xB8;
sfr T2CON = 0xC8;
sfr T2MOD = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_ 0x01
#define STOP_ 0x02
#define PD_ 0x02 /* Alternate definition */
#define GF0_ 0x04
#define GF1_ 0x08
#define SMOD_ 0x80
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0 = 0x88;
sbit IE0 = 0x89;
sbit IT1 = 0x8A;
sbit IE1 = 0x8B;
sbit TR0 = 0x8C;
sbit TF0 = 0x8D;
sbit TR1 = 0x8E;
sbit TF1 = 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
sbit T2 = 0x90; /* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91; /* Timer/Counter 2 capture/reload trigger & dir ctl */
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI = 0x98;
sbit TI = 0x99;
sbit RB8 = 0x9A;
sbit TB8 = 0x9B;
sbit REN = 0x9C;
sbit SM2 = 0x9D;
sbit SM1 = 0x9E;
sbit SM0 = 0x9F;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0 = 0xA8; /* 1=Enable External interrupt 0 */
sbit ET0 = 0xA9; /* 1=Enable Timer 0 interrupt */
sbit EX1 = 0xAA; /* 1=Enable External interrupt 1 */
sbit ET1 = 0xAB; /* 1=Enable Timer 1 interrupt */
sbit ES = 0xAC; /* 1=Enable Serial port interrupt */
sbit ET2 = 0xAD; /* 1=Enable Timer 2 interrupt */
sbit EA = 0xAF; /* 0=Disable all interrupts */
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
sbit RXD = 0xB0; /* Serial data input */
sbit TXD = 0xB1; /* Serial data output */
sbit INT0 = 0xB2; /* External interrupt 0 */
sbit INT1 = 0xB3; /* External interrupt 1 */
sbit T0 = 0xB4; /* Timer 0 external input */
sbit T1 = 0xB5; /* Timer 1 external input */
sbit WR = 0xB6; /* External data memory write strobe */
sbit RD = 0xB7; /* External data memory read strobe */
/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0 = 0xB8;
sbit PT0 = 0xB9;
sbit PX1 = 0xBA;
sbit PT1 = 0xBB;
sbit PS = 0xBC;
sbit PT2 = 0xBD;
/*------------------------------------------------
T2CON Bit Registers
------------------------------------------------*/
sbit CP_RL2= 0xC8; /* 0=Reload, 1=Capture select */
sbit C_T2 = 0xC9; /* 0=Timer, 1=Counter */
sbit TR2 = 0xCA; /* 0=Stop timer, 1=Start timer */
sbit EXEN2= 0xCB; /* Timer 2 external enable */
sbit TCLK = 0xCC; /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit RCLK = 0xCD; /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit EXF2 = 0xCE; /* Timer 2 external flag */
sbit TF2 = 0xCF; /* Timer 2 overflow flag */
/*------------------------------------------------
T2MOD Bit Values
------------------------------------------------*/
#define DCEN_ 0x01 /* 1=Timer 2 can be configured as up/down counter */
#define T2OE_ 0x02 /* Timer 2 output enable */
/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P = 0xD0;
sbit F1 = 0xD1;
sbit OV = 0xD2;
sbit RS0 = 0xD3;
sbit RS1 = 0xD4;
sbit F0 = 0xD5;
sbit AC = 0xD6;
sbit CY = 0xD7;
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1 /* 0x0B Timer 0 */
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3 /* 0x1B Timer 1 */
#define SIO_VECTOR 4 /* 0x23 Serial port */
#define TF2_VECTOR 5 /* 0x2B Timer 2 */
#define EX2_VECTOR 5 /* 0x2B External Interrupt 2 */
#endif
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************ZYWIFI0939C-WIFI机器人实验板例程************************
2 * 平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
3 * 名称:ZY-1智能小车参考程序
4 * 公司:湖南智宇科教设备有限公司
7 * 编写:智宇公司研发一部
8 * 日期:2015-1-15
9 * 交流:智能车QQ:261339276
10 * 晶振:11.0592MHZ
11 * 说明:免费开源,不提供源代码分析
12 * 硬件设置:要有自己动手能力,才能完成实验
13 * 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
14 * 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
15 重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
16
17 /******************************************************************/
18
19 //注意程序只做参考之用,要达到最理想的寻迹效果,还需要同学们细心调试。
20 #include<AT89X52.H> //包含51单片机头文件,内部有各种寄存器定义
21 #include<ZY-4WD_PWM.H> //包含HL-1蓝牙智能小车驱动IO口定义等函数
22
23 //主函数
24 void main(void)
25 {
26 1
27 1 unsigned char i;
28 1 P1=0X00; //关电机
29 1
30 1 TMOD=0X01;
31 1 TH0= 0XFc; //1ms定时
32 1 TL0= 0X18;
33 1 TR0= 1;
34 1 ET0= 1;
35 1 EA = 1; //开总中断
36 1
37 1
38 1 while(1) //无限循环
39 1 {
40 2
41 2 //有信号为0 没有信号为1
42 2
43 2 if(Left_1_led==0 && interm_1_led ==1 && Right_1_led == 0)
44 2
45 2 run(); //调用前进函数
46 2 //delay(40);
47 2 else
48 2 {
49 3 if(Left_1_led==1 && interm_1_led ==0 && Right_1_led == 0) //左边检测到黑线
50 3 {
51 4 leftrun(); //调用小车左转 函数
52 4 delay(2);
53 4 }
54 3
55 3
C51 COMPILER V9.00 MAIN 02/18/2016 14:27:20 PAGE 2
56 3 if(Left_1_led==1 && interm_1_led ==1 && Right_1_led == 0) //左边检测到黑线
57 3 {
58 4 leftrun(); //调用小车左转 函数
59 4 delay(2);
60 4 }
61 3
62 3 if(Left_1_led==0 && interm_1_led ==0 && Right_1_led == 1) //右边检测到黑线
63 3 {
64 4 rightrun(); //调用小车右转 函数
65 4 delay(2);
66 4 }
67 3
68 3 if(Left_1_led==0 && interm_1_led ==1 && Right_1_led == 1) //左边检测到黑线
69 3 {
70 4 rightrun(); //调用小车右转 函数
71 4 delay(2);
72 4 }
73 3 if(Left_1_led==1 && interm_1_led ==1 && Right_1_led == 1) //悬空状态 避悬崖
74 3 {
75 4 stop(); //调用小车停止
76 4
77 4 }
78 3
79 3 if(Left_1_led==0 && interm_1_led ==0 && Right_1_led == 0) //
80 3 {
81 4 run(); //调用小车后退
82 4 delay(2);
83 4 //rightrun(); //调用小车左转 函数
84 4 //delay(10);
85 4
86 4 }
87 3
88 3 }
89 2 }
90 1 }
*** WARNING C280 IN LINE 27 OF MAIN.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 316 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
* 名称:ZY-1智能小车参考程序
* 公司:湖南智宇科教设备有限公司
* * 日期:2015-1-15
* 交流:智能车QQ:261339276
* 晶振:11.0592MHZ
* 说明:免费开源,不提供源代码分析
* 硬件设置:要有自己动手能力,才能完成实验
* 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
* 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
ZYWIFI0939WIFI控制智能机器人杜邦线接线方法,请一定照做,否则可能不工作,并烧毁小车。
******************************************************************/
#ifndef _LED_H_
#define _LED_H_
//定义小车驱动模块输入IO口
sbit L293D_IN1=P1^2;
sbit L293D_IN2=P1^3;
sbit L293D_IN3=P1^4;
sbit L293D_IN4=P1^5;
sbit L293D_EN1=P1^6;
sbit L293D_EN2=P1^7;
/***蜂鸣器接线定义*****/
sbit BUZZ=P2^3;
#define Left_1_led P3_7 //左传感器
#define Right_1_led P3_6 //右传感器
#define interm_1_led P0_0 //中传感器
#define Left_moto_pwm P1_6 //PWM信号端
#define Right_moto_pwm P1_7 //PWM信号端
#define Left_moto_go {P1_2=1,P1_3=0;} //左电机向前走
#define Left_moto_back {P1_2=0,P1_3=1;} //左边电机向后转
#define Left_moto_Stop {P1_2=0,P1_3=0;} //左边电机停转
#define Right_moto_go {P1_4=1,P1_5=0;} //右边电机向前走
#define Right_moto_back {P1_4=0,P1_5=1;} //右边电机向后走
#define Right_moto_Stop {P1_4=0,P1_5=0;} //右边电机停转
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
void run(void)
{
push_val_left=15; //速度调节变量 0-20。0最小,20最大
push_val_right=15;
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}
//后退函数
void backrun(void)
{
push_val_left=15; //速度调节变量 0-20。0最小,20最大
push_val_right=15;
Left_moto_back; //左电机往后走
Right_moto_back; //右电机往后走
}
//左转
void leftrun(void)
{
push_val_left=6;
push_val_right=15;
Left_moto_back ; //左电机往后走
Right_moto_go ; //右电机往前
}
//右转
void rightrun(void)
{
push_val_left=15;
push_val_right=6;
Right_moto_back ; //左电机往前走
Left_moto_go ; //右电机往后
}
//停止
void stop(void)
{
Right_moto_Stop ; //右电机停止
Left_moto_Stop ; //左电机停止
}
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
// Left_moto_pwm1=1;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
// Right_moto_pwm1=1;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
}
/***************************************************/
///*TIMER0中断服务子函数产生PWM信号*/
void timer0()interrupt 1 using 2
{
TH0=0XFc; //1Ms定时
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*********************************************************************/
#endif
AT89X52.H
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X52_H__
#define __AT89X52_H__
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0 = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr P1 = 0x90;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr P2 = 0xA0;
sfr IE = 0xA8;
sfr P3 = 0xB0;
sfr IP = 0xB8;
sfr T2CON = 0xC8;
sfr T2MOD = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_ 0x01
#define STOP_ 0x02
#define PD_ 0x02 /* Alternate definition */
#define GF0_ 0x04
#define GF1_ 0x08
#define SMOD_ 0x80
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0 = 0x88;
sbit IE0 = 0x89;
sbit IT1 = 0x8A;
sbit IE1 = 0x8B;
sbit TR0 = 0x8C;
sbit TF0 = 0x8D;
sbit TR1 = 0x8E;
sbit TF1 = 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
sbit T2 = 0x90; /* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91; /* Timer/Counter 2 capture/reload trigger & dir ctl */
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI = 0x98;
sbit TI = 0x99;
sbit RB8 = 0x9A;
sbit TB8 = 0x9B;
sbit REN = 0x9C;
sbit SM2 = 0x9D;
sbit SM1 = 0x9E;
sbit SM0 = 0x9F;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0 = 0xA8; /* 1=Enable External interrupt 0 */
sbit ET0 = 0xA9; /* 1=Enable Timer 0 interrupt */
sbit EX1 = 0xAA; /* 1=Enable External interrupt 1 */
sbit ET1 = 0xAB; /* 1=Enable Timer 1 interrupt */
sbit ES = 0xAC; /* 1=Enable Serial port interrupt */
sbit ET2 = 0xAD; /* 1=Enable Timer 2 interrupt */
sbit EA = 0xAF; /* 0=Disable all interrupts */
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
sbit RXD = 0xB0; /* Serial data input */
sbit TXD = 0xB1; /* Serial data output */
sbit INT0 = 0xB2; /* External interrupt 0 */
sbit INT1 = 0xB3; /* External interrupt 1 */
sbit T0 = 0xB4; /* Timer 0 external input */
sbit T1 = 0xB5; /* Timer 1 external input */
sbit WR = 0xB6; /* External data memory write strobe */
sbit RD = 0xB7; /* External data memory read strobe */
/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0 = 0xB8;
sbit PT0 = 0xB9;
sbit PX1 = 0xBA;
sbit PT1 = 0xBB;
sbit PS = 0xBC;
sbit PT2 = 0xBD;
/*------------------------------------------------
T2CON Bit Registers
------------------------------------------------*/
sbit CP_RL2= 0xC8; /* 0=Reload, 1=Capture select */
sbit C_T2 = 0xC9; /* 0=Timer, 1=Counter */
sbit TR2 = 0xCA; /* 0=Stop timer, 1=Start timer */
sbit EXEN2= 0xCB; /* Timer 2 external enable */
sbit TCLK = 0xCC; /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit RCLK = 0xCD; /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit EXF2 = 0xCE; /* Timer 2 external flag */
sbit TF2 = 0xCF; /* Timer 2 overflow flag */
/*------------------------------------------------
T2MOD Bit Values
------------------------------------------------*/
#define DCEN_ 0x01 /* 1=Timer 2 can be configured as up/down counter */
#define T2OE_ 0x02 /* Timer 2 output enable */
/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P = 0xD0;
sbit F1 = 0xD1;
sbit OV = 0xD2;
sbit RS0 = 0xD3;
sbit RS1 = 0xD4;
sbit F0 = 0xD5;
sbit AC = 0xD6;
sbit CY = 0xD7;
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1 /* 0x0B Timer 0 */
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3 /* 0x1B Timer 1 */
#define SIO_VECTOR 4 /* 0x23 Serial port */
#define TF2_VECTOR 5 /* 0x2B Timer 2 */
#define EX2_VECTOR 5 /* 0x2B External Interrupt 2 */
#endif