📄 stepmotor.lst
字号:
C51 COMPILER V7.09 STEPMOTOR 04/29/2007 19:22:53 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE STEPMOTOR
OBJECT MODULE PLACED IN stepmotor.OBJ
COMPILER INVOKED BY: D:\c51\C51\BIN\C51.EXE stepmotor.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 爬楼梯机器人
3 谭安助
4 2007,4,28
5 ***********************************************************/
6 /*-----------------------------------------
7 REF I/0:
8 P0.0 - P0.6 行程开关输入
9 P1.0 p2.6- 上升电机控制
10 P1.1 p1.6 - 前后电机控制
11 -----------------------------------------*/
12 #include <Reg932.h> //Keil header file name
13 #include <stdio.h>
14 #define uchar unsigned char
15 #define uint unsigned int
16 #define ulong unsigned long
17 #define ccu_inter_count 2
18 #define TH0_DATA 0x0d4 // 0xd4cc<-->2mS (0xa999<-->4mS)
19 #define TL0_DATA 0x0cc
20 #define CSM 6 //参数设定范围,有6个参数
21 #define CMID 0x80
22
23 sbit sw1=P0^1 ;
24 sbit sw2=P0^0 ;
25 sbit sw3=P0^2 ;
26 sbit sw4=P0^3 ;
27 sbit sw5=P0^4 ;
28 sbit sw6=P0^5 ;
29 sbit sw7=P0^6 ;
30 sbit wait=P0^7;
31 sbit P22=P2^2;
32 sbit P23=P2^3;
33 sbit P24=P2^4;
34 sbit P25=P2^5;
35 sbit wait_down=P1^7;
36 sbit direct_A=P1^0;
37 sbit direct_B=P1^1;
38 sbit power_A=P2^6;
39 sbit RCLK=P2^4;
40 sbit IN=P2^2; //数据发送口
41 sbit SCLK=P2^5; //同步时钟信号
42 sbit KEY=P2^3; //读键口
43 sbit st=P1^5 ; //复位
44 bit SF=0; //闪烁标志位
45 uchar TK=0x09; //按键按下位寄存器1
46 uchar DATA0[8],DATA1[8];//发送数据库
47 uchar EDATA[2]; //E^2PROM读写暂存器
48 uint CS[CSM]; //修改参数寄存器组(CS[0],CS[1]为,CS[2]为RA,CS[3]为KPB,CS[4]为KIB,CS[5]为RB,CS[
-6]为外环调整基量)
49 uchar x=0,y=0,k=0,j=0,p=0,l=0; //指针型变量,k对DATA0&DATA1&selectable;x&y对digitable;j对EDATA;p/l对FA&
-FB;
50 uchar w=0; //取数计数器 ,定时器T0中断计数
51 uchar M=0,R=4;//M用于参数选择,M等于0时没有键按下,不等到0时有键按下;R为右移选择.
52 uchar floor=1;
53 uchar row=1;
C51 COMPILER V7.09 STEPMOTOR 04/29/2007 19:22:53 PAGE 2
54 sbit A_up=P2^0;
55 sbit A_down=P2^7;
56 sbit B_up=P1^2;
57 sbit B_down=P1^3;
58 //sbit power_B=P1^6;
59 //uint i=0;
60
61 uchar flag_over=1;
62 uchar idata digitable[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
63 uchar idata selectable[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
64 //extern void _nop_(void);
65 void Delays(uint i);
66 void init(void)
67 {
68 1
69 1 sw1=1;
70 1 sw2=1;
71 1 sw3=1;
72 1 sw4=1;
73 1 sw5=1;
74 1 sw6=1;
75 1 sw7=1;
76 1
77 1 direct_A=1;
78 1 direct_B=1;
79 1 power_A=0;
80 1
81 1 P1=0xff;
82 1 P2=0xff;
83 1 }
84
85 void Delays(uint i)
86 {
87 1 //j=1000;
88 1 //j1=1000;
89 1 //j1=i;
90 1 uint s;
91 1 for(i;i>0;i--)
92 1 for(s=3000;s>0;j--);
93 1 // for(j1=1000;j1>0;j1--);
94 1 }
95
96 //**********************************************************************************************
97 // 初始化CCU单元: void InitCCU(void);
98 void InitCCU(void)
99 {
100 1 TOR2H=0xFF;
101 1 TOR2L=0xFF;
102 1 TH2=0xFF;
103 1 TL2=0xFF; //SET THE T2 REPEAT VALUE
104 1 TPCR2H=0x00;
105 1 TPCR2L=0x00; //SET CCUCLK=PLLCLK/((TPCR2H,TPCR2L)+1);
106 1
107 1 // CCCRA=0x19;
108 1 OCB=1;
109 1 CCCRB=0x19; //SET CCCRX REGISTER,OCM1 AND OCM2
110 1 // CCCRC=0x01;
111 1 // CCCRD=0x01;
112 1
113 1 TCR21=0x86; //SET TCOU2=1 AND ENTER THE VALUE,PLLCLK=((Fosc/2)/(TCR21&0x0F+1))*32;
114 1 TCR20=0x00;
115 1
C51 COMPILER V7.09 STEPMOTOR 04/29/2007 19:22:53 PAGE 3
116 1 OCRBH=0x00;
117 1 OCRBL=0x00;
118 1 TCR20=0x86;
119 1 }
120
121 void start_B(void)
122 {
123 1 OCRBH=0xa0; //原文件中是0x66
124 1 OCRBL=0x00; //原文件中是0x66
125 1 TCR21=0x86;
126 1 }
127
128 void stop_B(void)
129 {
130 1 OCRBH=0x00;
131 1 OCRBL=0x00;
132 1 TCR21=0x86;
133 1 }
134 /*********************************************************
135 二进制数转BCD码
136 **********************************************************/
137 //二进制数转BCD码子程序0
138 void CONVBIT0(uint num,uchar hor)
139 {
140 1 DATA0[hor] = num/1000;
141 1 DATA0[hor+1] = num%1000/100;
142 1 DATA0[hor+2] = num%100/10;
143 1 DATA0[hor+3] = num%10/1;
144 1
145 1 }
146
147 //二进制数转BCD码子程序1
148 void CONVBIT1(uint num,uchar hor)
149 {
150 1 DATA1[hor] = num/1000;
151 1 DATA1[hor+1] = num%1000/100;
152 1 DATA1[hor+2] = num%100/10;
153 1 DATA1[hor+3] = num%10/1;
154 1 }
155
156 /*********************************************************
157 数据发送子程序
158 **********************************************************/
159
160 void SEND()
161 {
162 1 SPSTAT=0x80;
163 1 SPDAT=digitable[x];
164 1 while(SPSTAT!=0xbf)
165 1 {
166 2 };
167 1 SPSTAT=0x80;
168 1 SPDAT=digitable[y];
169 1 while(SPSTAT!=0xbf)
170 1 {
171 2 };
172 1 SPSTAT=0x80;
173 1 SPDAT=selectable[k];
174 1 while(SPSTAT!=0xbf)
175 1 {
176 2 };
177 1 RCLK=0;
C51 COMPILER V7.09 STEPMOTOR 04/29/2007 19:22:53 PAGE 4
178 1 RCLK=0;
179 1 RCLK=0;
180 1 RCLK=1;
181 1 RCLK=1;
182 1 RCLK=1;
183 1 RCLK=1;
184 1 RCLK=0;
185 1 RCLK=0;
186 1 RCLK=0;
187 1
188 1 }
189
190 /*********************************************************
191 读取EEPROM子程序
192 **********************************************************/
193
194 void rEEPROM()
195 {
196 1 for(j=1;j<2*CSM;j++)
197 1 {
198 2 DEECON=0x00; //初始化DEECON
199 2 DEEADR=(2*j-2);
200 2 while((DEECON&0x80)==0);
201 2 EDATA[0]=DEEDAT;
202 2 DEECON&=0x7F;
203 2 DEEADR=(2*j-1);
204 2 while((DEECON&0x80)==0);
205 2 EDATA[1]=DEEDAT;
206 2 CS[j-1]=(EDATA[0]*0x100+EDATA[1]);
207 2 DEECON&=0x7F;
208 2 }
209 1 }
210 /*********************************************************
211 初始化定时器优先级
212 **********************************************************/
213
214 void IP_ini(void)
215 {
216 1 IP0H=IP0H&0xFD;
217 1 IP0=IP0&0xFD; //将定时器0中断优先级降最低
218 1 IP1H=IP1H|0x10;
219 1 IP1=IP1|0x10; //将CCU中断优先级升为最高
220 1 }
221 /*********************************************************
222 初始化SPI
223 **********************************************************/
224
225 void SPI_ini(void)
226 {
227 1 IN=1;
228 1 SCLK=1;
229 1 RCLK=0;
230 1 SPCTL=0xD0;
231 1 SPDAT=0x00;
232 1 }
233 /*********************************************************
234 初始化定时器
235 **********************************************************/
236
237 void TIME_ini(void)
238 {
239 1 TMOD=0x01;
C51 COMPILER V7.09 STEPMOTOR 04/29/2007 19:22:53 PAGE 5
240 1 TAMOD=0x00;
241 1 TH0=TH0_DATA; // 0xd4cc<-->2mS (0xa999<-->4mS)
242 1 TL0=TL0_DATA;
243 1 EA=1;
244 1 ET0=1;
245 1 TR0=1;
246 1 }
247
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -