📄 wlm_n.lst
字号:
C51 COMPILER V6.12 WLM_N 06/12/2005 13:36:33 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE WLM_N
OBJECT MODULE PLACED IN .\wlm_n.OBJ
COMPILER INVOKED BY: E:\学习类软件\KeilC51v612\C51\BIN\C51.EXE .\wlm_n.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //////////相关内容可查阅计算机硬件技术基础、课件、自动控制理论与单片机等书籍/////////////////
2
3 ///////////////////////////////////程序基础//////////////////////////////////////////////////
4 #pragma small
5 #include<reg51f.h> ////包括51系列单片机的基本定义
6 #include<intrins.h>////
7 #include<math.h>
8 #include<absacc.h> ////扩展板必备
9 typedef unsigned char uchar;
10 typedef unsigned int uint;
11
12 ///////////////////电路设定////////////////////////
13 #define BASE1 0x8100////扩展片选信号CS1(触动开关扩展)
14 #define BASE2 0x8200////扩展片选信号CS2(双头检测板1)
15 #define BASE3 0x8300////扩展片选信号CS3 (双头检测板2)
16 #define BASE5 0x8500////发光二极管阵列
17 #define BASE6 0x8600////CS_P0IN0
18 #define BASE7 0x8700////CS_P0OUT0
19 #define BASE8 0x8800////CS_P0IN1
20 #define BASE9 0x8900////CS_P0OUT1
21
22 sbit dir1=P1^3; ////鉴向信号,实质为反馈标志
23 sbit dir2=P1^4;
24 sbit en=P1^0; ////电桥使能信号
25 sbit ddir1=P1^1;////左轮方向标志。
26 sbit ddir2=P1^2;////右轮方向标志。
27
28 //////////////////////基本参数//////////////////////////////
29 #define PI 3.1415926
30 #define D 0.122 ////轮子直径
31 #define DISTANCE 0.43 ////L轮子间距
32 #define PANE 1000 ////码盘线数
33 #define PRESPEED 9000 ////原始最高速度(单位:转/分)
34 #define RESPEED 300 ////减速最高速度(单位:转/分)
35 #define RATE 30 ////减速比(原始最高速度/减速最高速度)
36 #define CONST 0.3 ////( 减速最高速度与码盘线数之比(300(转/分)/1000=0.3),可任意)
37 #define RIGHT 1
38 #define LEFT 0
39 #define LINE 156546 ////走1米两个轮子的码盘线数(计算公式:2*(1/(PI*D))*RATE*PANE)
40 #define TURN 590 ////转1度两个轮子的码盘线数(计算公式:((DISTANCE/D)*RATE*PANE)/180)
41
42 /////////////////////////控制用变量//////////////////////////////
43 struct discount
44 {
45 int uk1; ////上次输出值
46 int videal;////理想速度(单位:转/分)
47 int ek; ////本次误差
48 int ek1; ////上次误差
49 int ek2; ////前次误差
50 };
51
52 /////////////////////////////////////////////////////////////////////////////////////////
53 data int ukx,uky; ////实际输出计数值
54 data struct discount sm2,sm1;////左右轮结构体变量
55 data uchar countl,counth; ////计数值高低位
C51 COMPILER V6.12 WLM_N 06/12/2005 13:36:33 PAGE 2
56 data long temp; ////每次中断时码盘线数(最大值为1500:((PRESPEED/60)*中断周期)/1000)*P
-ANE)
57 data long temp1=0,temp2=0; ////左右轮总的码盘线数
58 data long due; ////经PID调节后的偏差
59 data int uk; ////本次输出值
60 data int kp1,ki1,kd1; ////PID参数
61 data int kp2,ki2,kd2;
62 data uchar prestate=0x14,state;////巡线状态
63 data int dv; ////速度调节量
64 data int flag=0; ////巡线开关
65 data uchar keystate=0x3f; ////碰撞开关状态
66
67 //////////////////////结构体初始化//////////////////////////
68 void initstruct(struct discount *p)
69 {
70 1 p->ek2=0;
71 1 p->ek1=0;
72 1 p->ek=0;
73 1 p->uk1=0;
74 1 }
75
76 ///////////////////////延时////////////////////////
77 void delay(uchar i) ////以0.1秒为基本单位
78 {
79 1 uchar j,m;
80 1 int l;
81 1 for(j=0;j<i;j++)
82 1 {
83 2 for(l=0;l<100;l++)
84 2 {
85 3 for(m=0;m<250;m++)
86 3 {}
87 3 }
88 2 }
89 1 }
90
91 ///////////////////////电机1速度输出////////////////////
92 void motor1(int speed1)////PCA模块2
93 {
94 1 if(speed1>=0) ////正转
95 1 ddir1=0;
96 1 else
97 1 {
98 2 ddir1=1; ////反转
99 2 speed1=-speed1;
100 2 }
101 1 CCAP2L=speed1; ////转速,范围(-128,127)
102 1 CCAP2H=speed1;
103 1 CCAPM2=0x42; ////8位PWM
104 1 }
105
106 ///////////////////////电机2速度输出////////////////////
107 void motor2(int speed2)////PCA模块3
108 {
109 1 if(speed2>=0)
110 1 ddir2=1; ////正转
111 1 else
112 1 {
113 2 ddir2=0; ////反转
114 2 speed2=-speed2;
115 2 }
116 1 CCAP3L=speed2; ////转速,范围(-128,127
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -