?? tm-801.lst
字號:
C51 COMPILER V7.06 TM_801 07/16/2008 16:14:09 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TM_801
OBJECT MODULE PLACED IN TM-801.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TM-801.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include "TypeDefines.h"
4 #include "delay.h"
5 #define STOP 0
6 #define START 1
7 #define POSITIVE 0 //定義正向(推力)
8 #define NEGATIVE 1 //定義反向(拉力)
9 #define ADJUST 0xaa //校準判定值
10 /****************************************
11 ***I/O口定義
12 *****************************************/
13 sbit sda=P1^0;
14 sbit rclk=P1^1;
15 sbit sclk=P1^2;
16 sbit stop=P2^0;
17 sbit ad_CLK=P2^5;
18 sbit ad_CS=P2^7;
19 sbit ad_DO=P2^6;
20 sbit conrtol=P1^6;
21 sbit ZERO=P3^5;
22
23 /*******************************************
24 ***函數聲明
25 *********************************************/
26 void disp(uint disp_dat); //顯示函數
27 uint ad_read(uchar flag) reentrant;
28 uint lvbo(uint *buf) reentrant;
29 void delay_xus(uchar x);
30 void delay_xms(uint x);
31 /********************************************
32 ***數據表
33 ********************************************/
34 uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //7段字碼表"0"~"9"
35
36 /*******************************************
37 ***全局變量
38 *********************************************/
39 uint old_result=0;
40 uint new_result=0;
41 uint adj=0;
42 uchar polar=0;
43 uchar adj_way=POSITIVE;
44 /*******************************************
45 ***主函數
46 *********************************************/
47 void main(void)
48 {
49 1
50 1 TMOD=0x11;
51 1 TH1=(65536-50000)/256;
52 1 TL1=(65536-50000)%256;
53 1 EA=1;
54 1 ET1=1;
55 1 delay_xms(1000);
C51 COMPILER V7.06 TM_801 07/16/2008 16:14:09 PAGE 2
56 1 adj=ad_read(ADJUST);
57 1 TR1=1;
58 1 for(;;)
59 1 {
60 2 if(ZERO==0)
61 2 {
62 3 delay_xms(30);
63 3 if(ZERO==0)
64 3 {
65 4 adj=ad_read(ADJUST);
66 4 }
67 3 }
68 2 }
69 1
70 1 }
71 /********************************************
72 ***顯示函數
73 **********************************************/
74 void disp(uint disp_dat)
75 {
76 1 uchar i,j,dat;
77 1 for(j=0;j<4;j++)
78 1 {
79 2 dat=table[disp_dat%10];
80 2 for(i=0;i<8;i++)
81 2 {
82 3 dat<<=1;
83 3 if(CY)
84 3 sda=1;
85 3 else
86 3 sda=0;
87 3 sclk=0;
88 3 sclk=1;
89 3 }
90 2 disp_dat/=10;
91 2 }
92 1
93 1 if(polar==POSITIVE) //顯示正負號(正:顯示”0“,負:顯示”-“)
94 1 {
95 2 dat=table[0];
96 2 }
97 1 else
98 1 {
99 2 dat=0xbf;
100 2 }
101 1 for(i=0;i<8;i++)
102 1 {
103 2 dat<<=1;
104 2 if(CY)
105 2 sda=1;
106 2 else
107 2 sda=0;
108 2 sclk=0;
109 2 sclk=1;
110 2 }
111 1 rclk=0;
112 1 rclk=1;
113 1 }
114
115 /**********************************************
116 ***A/D采樣函數
117 **********************************************/
C51 COMPILER V7.06 TM_801 07/16/2008 16:14:09 PAGE 3
118 uint ad_read(uchar flag) reentrant
119 {
120 1 ulong temp=0;
121 1 uint dat[9]={0};
122 1 uchar i=0,j=0;
123 1 ad_CLK=0;
124 1 for(j=0;j<9;j++)
125 1 {
126 2 ad_CS=0;
127 2 _nop_();
128 2 ad_CLK=1;
129 2 _nop_();
130 2 ad_CLK=0;
131 2 _nop_();
132 2 ad_CLK=1;
133 2 _nop_();
134 2 ad_CLK=0;
135 2 _nop_();
136 2 ad_CLK=1;
137 2 _nop_();
138 2 ad_CLK=0;
139 2 _nop_();
140 2 for(i=0;i<12;i++)
141 2 {
142 3 ad_CLK=1;
143 3 dat[j]=dat[j]<<1;
144 3 if(ad_DO)
145 3 dat[j]++;
146 3 ad_CLK=0;
147 3 _nop_();
148 3 }
149 2 ad_CS=1;
150 2 ad_CLK=1;
151 2 delay_xus(70);
152 2 }
153 1
154 1 temp=lvbo(dat);
155 1 if(flag==ADJUST)
156 1 {
157 2 temp*=10000;
158 2 temp/=4096;
159 2 }
160 1 if(flag!=ADJUST)
161 1 {
162 2 temp*=10000;
163 2 temp/=4096;
164 2
165 2 if(temp>=adj)
166 2 {
167 3 temp=temp-adj;
168 3 polar=POSITIVE;
169 3 }
170 2 else
171 2 {
172 3 temp=adj-temp;
173 3 polar=NEGATIVE;
174 3 }
175 2 // temp=temp*2000;
176 2 // temp=temp/912;
177 2 temp=temp*1000;
178 2 temp=temp/945;
179 2 if(temp<50)
C51 COMPILER V7.06 TM_801 07/16/2008 16:14:09 PAGE 4
180 2 {
181 3 //temp=0;
182 3 }
183 2 else
184 2 {
185 3 temp=temp-30;
186 3 }
187 2 }
188 1
189 1 return (uint)temp;
190 1 }
191
192 /****************************************************
193 ***中值濾波
194 *****************************************************/
195 uint lvbo(uint *buf) reentrant
196 {
197 1 uint temp=0;
198 1 uchar i,j;
199 1 for(i=0;i<8;i++)
200 1 {
201 2 for(j=i+1;j<9;j++)
202 2 {
203 3 if(buf[i]>buf[j])
204 3 {
205 4 temp=buf[i];
206 4 buf[i]=buf[j];
207 4 buf[j]=temp;
208 4 }
209 3 }
210 2 }
211 1 temp=buf[1]+buf[2]+buf[3]+buf[4]+buf[5]+buf[6]+buf[7];
212 1 temp=temp/7;
213 1 return temp;
214 1 }
215
216
217
218 /**********************************************
219 ***time1中斷
220 ***********************************************/
221 void timer1() interrupt 3
222 {
223 1 static uchar disp_time=0;
224 1
225 1 TH1=(65536-50000)/256;
226 1 TL1=(65536-50000)%256;
227 1 disp_time++;
228 1 if(disp_time==4)
229 1 {
230 2 disp_time=0;
231 2 new_result=ad_read(0);
232 2 //********************************************
233 2 if(new_result < old_result)
234 2 {
235 3 if(new_result<100)
236 3 {
237 4 TR1=0;
238 4 delay_xms(1000);
239 4 old_result=new_result;
240 4 TR1=1;
241 4 }
C51 COMPILER V7.06 TM_801 07/16/2008 16:14:09 PAGE 5
242 3 else
243 3 new_result=old_result;
244 3 }
245 2 else
246 2 {
247 3 old_result=new_result;
248 3 }
249 2 //*************************************************/
250 2 disp(new_result);
251 2 }
252 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1217 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -