?? 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:\學(xué)習(xí)類軟件\KeilC51v612\C51\BIN\C51.EXE .\wlm_n.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //////////相關(guān)內(nèi)容可查閱計(jì)算機(jī)硬件技術(shù)基礎(chǔ)、課件、自動控制理論與單片機(jī)等書籍/////////////////
2
3 ///////////////////////////////////程序基礎(chǔ)//////////////////////////////////////////////////
4 #pragma small
5 #include<reg51f.h> ////包括51系列單片機(jī)的基本定義
6 #include<intrins.h>////
7 #include<math.h>
8 #include<absacc.h> ////擴(kuò)展板必備
9 typedef unsigned char uchar;
10 typedef unsigned int uint;
11
12 ///////////////////電路設(shè)定////////////////////////
13 #define BASE1 0x8100////擴(kuò)展片選信號CS1(觸動開關(guān)擴(kuò)展)
14 #define BASE2 0x8200////擴(kuò)展片選信號CS2(雙頭檢測板1)
15 #define BASE3 0x8300////擴(kuò)展片選信號CS3 (雙頭檢測板2)
16 #define BASE5 0x8500////發(fā)光二極管陣列
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; ////鑒向信號,實(shí)質(zhì)為反饋標(biāo)志
23 sbit dir2=P1^4;
24 sbit en=P1^0; ////電橋使能信號
25 sbit ddir1=P1^1;////左輪方向標(biāo)志。
26 sbit ddir2=P1^2;////右輪方向標(biāo)志。
27
28 //////////////////////基本參數(shù)//////////////////////////////
29 #define PI 3.1415926
30 #define D 0.122 ////輪子直徑
31 #define DISTANCE 0.43 ////L輪子間距
32 #define PANE 1000 ////碼盤線數(shù)
33 #define PRESPEED 9000 ////原始最高速度(單位:轉(zhuǎn)/分)
34 #define RESPEED 300 ////減速最高速度(單位:轉(zhuǎn)/分)
35 #define RATE 30 ////減速比(原始最高速度/減速最高速度)
36 #define CONST 0.3 ////( 減速最高速度與碼盤線數(shù)之比(300(轉(zhuǎn)/分)/1000=0.3),可任意)
37 #define RIGHT 1
38 #define LEFT 0
39 #define LINE 156546 ////走1米兩個(gè)輪子的碼盤線數(shù)(計(jì)算公式:2*(1/(PI*D))*RATE*PANE)
40 #define TURN 590 ////轉(zhuǎn)1度兩個(gè)輪子的碼盤線數(shù)(計(jì)算公式:((DISTANCE/D)*RATE*PANE)/180)
41
42 /////////////////////////控制用變量//////////////////////////////
43 struct discount
44 {
45 int uk1; ////上次輸出值
46 int videal;////理想速度(單位:轉(zhuǎn)/分)
47 int ek; ////本次誤差
48 int ek1; ////上次誤差
49 int ek2; ////前次誤差
50 };
51
52 /////////////////////////////////////////////////////////////////////////////////////////
53 data int ukx,uky; ////實(shí)際輸出計(jì)數(shù)值
54 data struct discount sm2,sm1;////左右輪結(jié)構(gòu)體變量
55 data uchar countl,counth; ////計(jì)數(shù)值高低位
C51 COMPILER V6.12 WLM_N 06/12/2005 13:36:33 PAGE 2
56 data long temp; ////每次中斷時(shí)碼盤線數(shù)(最大值為1500:((PRESPEED/60)*中斷周期)/1000)*P
-ANE)
57 data long temp1=0,temp2=0; ////左右輪總的碼盤線數(shù)
58 data long due; ////經(jīng)PID調(diào)節(jié)后的偏差
59 data int uk; ////本次輸出值
60 data int kp1,ki1,kd1; ////PID參數(shù)
61 data int kp2,ki2,kd2;
62 data uchar prestate=0x14,state;////巡線狀態(tài)
63 data int dv; ////速度調(diào)節(jié)量
64 data int flag=0; ////巡線開關(guān)
65 data uchar keystate=0x3f; ////碰撞開關(guān)狀態(tài)
66
67 //////////////////////結(jié)構(gòu)體初始化//////////////////////////
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 ///////////////////////延時(shí)////////////////////////
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 ///////////////////////電機(jī)1速度輸出////////////////////
92 void motor1(int speed1)////PCA模塊2
93 {
94 1 if(speed1>=0) ////正轉(zhuǎn)
95 1 ddir1=0;
96 1 else
97 1 {
98 2 ddir1=1; ////反轉(zhuǎn)
99 2 speed1=-speed1;
100 2 }
101 1 CCAP2L=speed1; ////轉(zhuǎn)速,范圍(-128,127)
102 1 CCAP2H=speed1;
103 1 CCAPM2=0x42; ////8位PWM
104 1 }
105
106 ///////////////////////電機(jī)2速度輸出////////////////////
107 void motor2(int speed2)////PCA模塊3
108 {
109 1 if(speed2>=0)
110 1 ddir2=1; ////正轉(zhuǎn)
111 1 else
112 1 {
113 2 ddir2=0; ////反轉(zhuǎn)
114 2 speed2=-speed2;
115 2 }
116 1 CCAP3L=speed2; ////轉(zhuǎn)速,范圍(-128,127
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -