📄 gai0809.lst
字号:
C51 COMPILER V6.02 GAI0809 08/21/2006 18:51:43 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE GAI0809
OBJECT MODULE PLACED IN E:\STUDY\WAVEWO~1\CAR\CAR_AD\GAI0809.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\STUDY\WAVEWO~1\CAR\CAR_AD\GAI0809.C DB SB OE
stmt level source
1 #include <intrins.h>//这个头文件中有_nop_();
2 #include <reg52.h>
3 #include<stdio.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 //----------------------------------------------------------------------------------------------------
7 char bdata gate=0x00; //三—八译码器
8 char bdata sensors=0xff;//存放采集来的数的逻辑电平
9 sbit l1=sensors^0;
10 sbit l2=sensors^1;
11 sbit l3=sensors^2;
12 sbit l4=sensors^3;
13 //-----------
14 sbit lun=P1^6;
15 //----------------------------------------------------------------------------------------------------
16 sbit left=P1^0; //左电机使能
17 sbit right=P1^1;//右电机使能
18 //---------------------------------
19 sbit you=P3^7;
20 sbit hou=P3^6;
21 sbit qian=P3^5;
22 sbit zuo=P3^4;
23 //---------------AD模拟通道选择
24 sbit gat_3=gate^2;///存放 A
25 sbit c=P2^6; ////////////// A
26 sbit gat_2=gate^1;// 存放 B
27 sbit b=P2^5; ///////////// B
28 sbit gat_1=gate^0;// 存放 C
29 sbit a=P2^4; ///////////// C
30
31 sbit eoc=P2^2;//---转换结束标志
32 sbit oe=P2^3; //---取值允许
33 sbit ale=P2^7;//--允许转换
34 uint data dat[8],i;
35 uint sum=0;
36 uint max=200;
37 uint min=134;
38 int tim=0; //--进中断次数100为一个周期
39 uint speedleft,speedright;//--左右轮转速控制
40 //---------------------------------------------------------------------------------------------------
41 void get_0809(void);//--读0809数据 0809用到的程序
42 void start(void);//--初始化
43 void test(void); //--检测
44 void cotor_car(void);//--控制小车
45 void hold(void);
46 void stop(void);
47 //---------------------------------------------------------------------------------------------------
48 void Forward(char speed);//前进 293用到的程序
49 void Reverse(char speed,int dely,bit r);//speed--速度,dely--时间,r--左(右)
50 void TurnRight(uint dey);//右拐
51 void TurnLeft(uint dey);//左拐
52 void delay(unsigned int time);//--延时
53 void stop(void);//---停止
54 void delay(uint e);//--延时
55 //---------------------------延时程序-------------------------------------------------------------
C51 COMPILER V6.02 GAI0809 08/21/2006 18:51:43 PAGE 2
56 void delay(uint e)
57 {
58 1 while(e--)
59 1 {
60 2 _nop_();_nop_();_nop_();
61 2 _nop_();_nop_();}
62 1 }
63 //-----------------------前进程序----------------------------------------------------------------
64 void Forward(char speed)
65 {
66 1 P1=0x1b;lun=1;
67 1 speedleft=speed;
68 1 speedright=speed+4;
69 1 TR0=1;
70 1 delay(15);
71 1 TR0=0;
72 1 }
73 //----------------------左转程序-------------------------------------------------------------------
74 void TurnLeft(uint dey)
75 {
76 1 P1=0x2b;lun=1;
77 1 speedleft=35;
78 1 speedright=25;
79 1 TR0=1;
80 1 delay(dey);
81 1 TR0=0;
82 1 }
83 //----------------------右转程序-------------------------------------------------------------------
84 void TurnRight(uint dey)
85 {
86 1 P1=0x17; lun=0;
87 1 speedleft=25;
88 1 speedright=35;
89 1 TR0=1;
90 1 delay(dey);
91 1 TR0=0;
92 1
93 1 }
94 /*----------------------------------后退程序----------------------------------------------------
95 void Reverse(char speed,int dely,bit r)
96 {
97
98 }
99 //-----------------------------------停止程序---------------------------------------
100 void stop(void)
101 {
102 TR0=0;right=0;left=0;
103 } */
104 //-------------------------控制小车程序------------------------------------------------------------
105 void cotor_car(void) /* 中间的两个对管为 a b */
106 { /* 左边为 c右边为 d */
107 1 switch(sensors)
108 1 { //--设收到返回光为高电平
109 2 //------------------------------------------------------------------------------------
110 2 /* //case 0x00:hold();break;
111 2 case 0x01:if(temp==1)
112 2 {TurnLeft(50);temp=2;}
113 2 // else hold();
114 2 break;
115 2 case 0x02:hold();break;
116 2 case 0x03:if(temp==2)
117 2 {TurnRight(10);temp=1;}
C51 COMPILER V6.02 GAI0809 08/21/2006 18:51:43 PAGE 3
118 2 // else hold();
119 2 break;
120 2 case 0x04:hold();break;
121 2 case 0x05:if(temp==1)
122 2 {TurnLeft(10);temp=2;}
123 2 //hold();
124 2 break;
125 2 case 0x06:Forward(80);temp=0;break;
126 2 case 0x07:TurnRight(5);temp=1;break;
127 2 case 0x08:if(temp==2)
128 2 {TurnRight(50);temp=1;}
129 2 //else hold();
130 2 break;
131 2 case 0x09:hold();break;
132 2 case 0x0a:if(temp==1)
133 2 {TurnLeft(10);temp=2;}
134 2 //else hold();
135 2 break;
136 2 case 0x0b:hold();break;
137 2 case 0x0c:if(temp==2)
138 2 {TurnRight(10);temp=1;}
139 2 //hold();
140 2 break;
141 2 case 0x0d:hold();break;
142 2 case 0x0e:TurnLeft(5);temp=2;break;
143 2 case 0x0f:hold();break; */
144 2
145 2 case 0x07:TurnLeft(20);break;
146 2 case 0x0e:TurnLeft(20);break;
147 2 case 0x06:Forward(80);break;
148 2 case 0x05:TurnLeft(10);break;
149 2 case 0x0c:TurnRight(20);break;
150 2 case 0x03:TurnLeft(20);break;
151 2 case 0x0a:TurnRight(20);break;
152 2 default:Forward(30);
153 2 }
154 1
155 1 }
156 //---------------------检测程序-----------------------------------------------------------------------
157 void test(void)
158 {
159 1 float ave=0;
160 1 uint how;
161 1 sensors=0x00;
162 1 dat[0]-=40;dat[1]-=2;dat[2]+=10;dat[3]-=9;
163 1 for(how=0;how<i;how++)
164 1 {
165 2 if((max<dat[how])&&((dat[how]-max<=80)))//-------取最大值
166 2 max=dat[how];
167 2 if((min>dat[how])&&((min-dat[how])<=80))//-----取最小值
168 2 min=dat[how];
169 2 ave=(max+min)/2;
170 2 sensors<<=1;
171 2 if(dat[how]>=(ave-2))
172 2 l1=1;
173 2 }
174 1 /*
175 1 if(l1|l4)
176 1 {
177 1 if((dat[0]-dat[3])>4)
178 1 {l1=0;l4=1; }
179 1 else if((dat[3]-dat[0])>4)
C51 COMPILER V6.02 GAI0809 08/21/2006 18:51:43 PAGE 4
180 1 {l1=1;l4=0;}
181 1 }
182 1 /*
183 1 ave/=2;
184 1 //ave+=2;
185 1 sensors=0x00;
186 1 for(how=0;how<i;how++)
187 1 {
188 1 sensors<<=1;
189 1 if((dat[how]>=ave))
190 1 sensors|=0x01;
191 1 else sensors&=0xfe;
192 1 } */
193 1 zuo=l4;qian=l3;hou=l2;you=l1;
194 1 }
195 /*-----------------------------------------------------------------------
196 void hold(void)
197 {
198 } */
199 //------------------------------------------初始化程序--------------------------------------------------
200 void start(void)
201 {
202 1 uint j;
203 1 EA=1; ET0=1;//-----开中断-----------
204 1 TMOD=0x02; //方式二
205 1 TH0=0xe0; //
206 1 TL0=0xe0;
207 1 i=4; //四个对管只取四路模拟量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -