📄 0809.lst
字号:
C51 COMPILER V6.02 0809 09/11/2006 19:43:49 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE 0809
OBJECT MODULE PLACED IN E:\STUDY\WAVEWO~1\CAR\CAR_AD\0809.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\STUDY\WAVEWO~1\CAR\CAR_AD\0809.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 0809 09/11/2006 19:43:49 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 0x07:TurnLeft(20);break;
111 2 case 0x0e:TurnLeft(20);break;
112 2 case 0x06:Forward(80);break;
113 2 case 0x05:TurnLeft(10);break;
114 2 case 0x0c:TurnRight(20);break;
115 2 case 0x03:TurnLeft(20);break;
116 2 case 0x0a:TurnRight(20);break;
117 2 default:Forward(30);
C51 COMPILER V6.02 0809 09/11/2006 19:43:49 PAGE 3
118 2 }
119 1
120 1 }
121 //---------------------检测程序-----------------------------------------------------------------------
122 void test(void)
123 {
124 1 float ave=0;
125 1 uint how;
126 1 sensors=0x00;
127 1 dat[0]-=40;dat[1]-=2;dat[2]+=10;dat[3]-=9;
128 1 for(how=0;how<i;how++)
129 1 {
130 2 if((max<dat[how])&&((dat[how]-max<=80)))//-------取最大值
131 2 max=dat[how];
132 2 if((min>dat[how])&&((min-dat[how])<=80))//-----取最小值
133 2 min=dat[how];
134 2 ave=(max+min)/2;
135 2 sensors<<=1;
136 2 if(dat[how]>=(ave-2))
137 2 l1=1;
138 2 }
139 1 zuo=l4;qian=l3;hou=l2;you=l1;
140 1 }
141 /*-----------------------------------------------------------------------
142 void hold(void)
143 {
144 } */
145 //------------------------------------------初始化程序--------------------------------------------------
146 void start(void)
147 {
148 1 uint j;
149 1 EA=1; ET0=1;//-----开中断-----------
150 1 TMOD=0x02; //方式二
151 1 TH0=0xe0; //
152 1 TL0=0xe0;
153 1 i=4; //四个对管只取四路模拟量
154 1 a=b=c=0;
155 1 for(j=0;j<8;j++) //清空逻辑量存贮区
156 1 {dat[j]=0x00;}
157 1 max=200;
158 1 min=134;
159 1
160 1 }
161 //-----------------------------------------------------------------------------------------------------
162 void get_0809(void) /*读AD0809数据程序*/
163 {
164 1 int s;
165 1 for(gate=0;gate<i;gate++)
166 1 {
167 2 c=gat_3; b=gat_2; a=gat_1;
168 2 _nop_();_nop_();_nop_();_nop_();
169 2 ale=1;
170 2 ale=0;
171 2 delay(5);
172 2 while(eoc);
173 2 oe=1;sum=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -