?? wpcacapture.lst
字號(hào):
C51 COMPILER V7.05 WPCACAPTURE 02/14/2006 10:38:24 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE WPCACAPTURE
OBJECT MODULE PLACED IN WPCACAPTURE.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WPCACAPTURE.C DB OE
stmt level source
1 //參考程序B:WPCACAPTURE.C 用PCA模塊0負(fù)邊沿觸發(fā)的捕捉方式測量方波的頻
2 //率.測量固定頻率方波的100個(gè)周期的時(shí)間寬度,再求平均,可得方波的頻率和
3 //周期.測量結(jié)果用LCD顯示. 打開VIEW/DEBUG WINDOW/SFR'S/PCA窗口,
4 // 可直接從PCA0CPH0和PCA0CPL0中看到十六進(jìn)制表達(dá)的測量結(jié)果.
5
6 #include <c8051f020.h> // SFR declarations
7 #include <intrins.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10 sbit BELL=P3^5;
11 unsigned char *lcdpoint; /*指向 lcddata數(shù)組的指針*/
12 void SYSCLK_Init (void); /*時(shí)鐘初始化*/
13 void LCD_Init(void); /*LCD初始化*/
14 void LCD_disp_line1(void); /*顯示第一行數(shù)據(jù)*/
15 void LCD_disp_line2(void); /*顯示第二行數(shù)據(jù)*/
16 void handle(void); /*處理數(shù)據(jù)*/
17 void delay(uchar time);//延時(shí)
18 void PORT_Init (void); //I/O口初始化
19 void PCA_Init (void); //PCA初始化
20 void PCA_ISR (void); //PCA中斷服務(wù)子程序
21 float freq,data0;
22 unsigned int i,j,data2;
23 unsigned char FRE[8]={" FREQ: "},KHZ[10]={0x0,0x00,0x0,0x0,"Khz"};
24 signed char T[8]={" TIME: "},TIME0[10]={0x0,0x00,0x0,0x0,0x0,"us"};
25 unsigned char aa,bb,cc,ee;
26 void main (void) {
27 1 BELL=1;
28 1 /*關(guān)看門狗*/
29 1 WDTCN = 0xde;
30 1 WDTCN = 0xad;
31 1 LCD_Init(); /*LCD初始化*/
32 1 SYSCLK_Init (); /*時(shí)鐘初始化*/
33 1 PORT_Init (); /*IO口初始化*/
34 1 BELL = 0; /*響蜂鳴器*/
35 1 delay(100); /* 延時(shí)*/
36 1 BELL =1; /*關(guān)閉蜂鳴器*/
37 1 while (1) {
38 2 j=0;
39 2 EA = 1; /*開中斷*/
40 2 PCA_Init (); /*PCA初始化*/
41 2 while (j<0x64) ; /*PCA發(fā)生中斷100次 到否?;*/
42 2 PCA0CN=0x0; /*禁止PCA定時(shí)器/計(jì)數(shù)器*/
43 2 EIE1 = 0x0; /*禁止PCA0中斷*/
44 2 handle(); /*處理數(shù)據(jù)*/
45 2 LCD_disp_line1();
46 2 LCD_disp_line2();
47 2 delay(65000); /* 延時(shí)*/
48 2 delay(65000); /* 延時(shí)*/
49 2 delay(65000); /* 延時(shí)*/
50 2 delay(65000); /* 延時(shí)*/
51 2 delay(65000); /* 延時(shí)*/
52 2 delay(65000); /* 延時(shí)*/
53 2 delay(65000); /* 延時(shí)*/
54 2 }
55 1 }
C51 COMPILER V7.05 WPCACAPTURE 02/14/2006 10:38:24 PAGE 2
56 void handle(void)/*處理數(shù)據(jù)*/
57 {
58 1 data0=(PCA0CPH0*256+PCA0CPL0);/*處理來自PCA0CPH0,CA0CPL0的數(shù)據(jù)*/
59 1 data0=(PCA0CPH0*256+PCA0CPL0)/11.0592;
60 1 freq=(100000)/data0; /*計(jì)算被測波形的頻率*/
61 1 aa=data0/1000; //計(jì)算周期(TIME)
62 1 bb=(data0-aa*1000)/100;
63 1 cc=(data0-aa*1000-bb*100)/10;
64 1 ee=(data0-aa*1000-bb*100-cc*10);
65 1 TIME0[0]=aa; //存放萬位數(shù)
66 1 TIME0[1]=bb; //存放千位數(shù)
67 1 TIME0[2]=0x2e; //"."
68 1 TIME0[3]=cc; //存放百位數(shù)
69 1 TIME0[4]=ee; //存放十位數(shù)
70 1 aa=freq/1000; //計(jì)算頻率(FREQ)
71 1 bb=(freq-aa*1000)/100;
72 1 cc=(freq-aa*1000-bb*100)/10;
73 1 ee=(freq-aa*1000-bb*100-cc*10);
74 1 KHZ[0]=aa; //存放千位數(shù)
75 1 KHZ[1]=bb; //存放百位數(shù)
76 1 KHZ[2]=cc; //存放十位數(shù)
77 1 KHZ[3]=ee; //存放個(gè)位數(shù)
78 1 }
79 void PORT_Init (void) //I/O口初始化
80 {
81 1 XBR0 = 0x08; //CEX0-->P0.0
82 1 XBR2 = 0x40; // Enable crossbar and weak pull-ups
83 1 P74OUT = 0xf0; /*P6,P7為推挽輸出*/
84 1 }
85 void PCA_Init (void) //PCA初始化
86 {
87 1 EIE1 = 0x08; /*使能PCA0中斷*/
88 1 PCA0MD = 0x09; /*PCA定時(shí)器時(shí)鐘源SYSCLK選擇:01(1/12),03(1/4),09(1)*/
89 1 PCA0L = 0x00;
90 1 PCA0H = 0x00;
91 1 PCA0CPM0 = 0x11;/*PCA0負(fù)邊沿捕捉方式,CCF0=1,允許輔捉/比較標(biāo)志的中斷申請*/
92 1 PCA0CPL0 = 0x00;
93 1 PCA0CPH0 = 0x00;
94 1 PCA0CN=0x40; /*允許PCA定時(shí)器/計(jì)數(shù)器*/
95 1 }
96 /*PCA中斷服務(wù)子程序*/
97 void PCA_ISR (void) interrupt 9
98 {
99 1 j++; /*計(jì)中斷次數(shù)*/
100 1 CCF0 = 0; /*清匹配中斷標(biāo)志*/
101 1 }
102 void delay(uint time) //延時(shí)
103 {
*** WARNING C235 IN LINE 103 OF WPCACAPTURE.C: parameter 1: different types
104 1 uint k,h;
105 1 for(h=0;h<time;h++)
106 1 for(k=0;k<0x900;k++);
107 1 }
108 void LCD_disp_line1(void)
109 { uint x;
110 1 unsigned data1,count;
111 1 P7=0x80; // 顯示第一行,DDRAM地址為00
112 1 P6 = 0x1;
113 1 P6 = 0x0;
114 1 for(x=0;x<1000;x++);
115 1 lcdpoint=&T;
116 1 for(count=8;count>0;count--) //顯示文字"TIME :"
117 1 {
118 2 data1=*lcdpoint;
119 2 P7 = data1; /*送字符數(shù)據(jù)*/
120 2 P6 = 0x04;
121 2 P6 = 0x05;
122 2 lcdpoint++;
123 2 for(x=0;x<1000;x++);
124 2 } //準(zhǔn)備送數(shù)據(jù)
125 1 lcdpoint=&TIME0;
126 1 for(count=7;count>0;count--) //顯示數(shù)字"XXXXXns"
127 1 {
128 2 data1=*lcdpoint;
129 2 if(data1<0x40)
130 2 if(data1 !=0x2e)
131 2 data1 += 0x30; /*轉(zhuǎn)化成ASCII碼*/
132 2 P7 = data1; /*送字符數(shù)據(jù)*/
133 2 P6 = 0x04;
134 2 P6 = 0x05;
135 2 lcdpoint++;
136 2 for(x=0;x<100;x++);
137 2 }
138 1 }
139 void LCD_disp_line2(void)// 顯示第二行
140 { uint x;
141 1 unsigned data1,count;
142 1 P7=0xc0; // 顯示第二行,DDRAM地址為40H
143 1 P6 = 0x1;
144 1 P6 = 0x0;
145 1 for(x=0;x<1000;x++);
146 1 lcdpoint=&FRE; //顯示文字"FREQUENCE :"
147 1 for(count=8;count>0;count--)
148 1 {
149 2 data1=*lcdpoint;
150 2 P7 = data1; /*送字符數(shù)據(jù)*/
151 2 P6 = 0x04;
152 2 P6 = 0x05;
153 2 lcdpoint++;
154 2 for(x=0;x<1000;x++);
155 2 } //準(zhǔn)備送數(shù)據(jù)
156 1 lcdpoint=&KHZ;
157 1 for(count=7;count>0;count--) //顯示數(shù)字"XXXXKhz"
158 1 { data1=*lcdpoint;
159 2 if(data1<0x40)
160 2 data1 += 0x30; /*轉(zhuǎn)化成ASCII碼*/
161 2 P7 = data1; /*送字符數(shù)據(jù)*/
162 2 P6 = 0x04;
163 2 P6 = 0x05;
164 2 lcdpoint++;
165 2 for(x=0;x<100;x++);
166 2 }
167 1 }
168 void LCD_Init(void) /*LCD初始化*/
169 { uint x;
170 1 P6 = 0x09;
171 1 for(x=0;x<50000;x++);
172 1 //P7 = 0x30; /*設(shè)定一行顯示*/
173 1 P7 = 0x38; /*設(shè)定兩行顯示*/
174 1 P6 = 0x08;
175 1 P6 = 0x09;
176 1 for(x=0;x<1000;x++);
177 1 P7 = 0x0e; /*顯示開,光標(biāo)顯示,光標(biāo)不閃爍*/
178 1 P6 = 0x08;
C51 COMPILER V7.05 WPCACAPTURE 02/14/2006 10:38:24 PAGE 4
179 1 P6 = 0x09;
180 1 for(x=0;x<1000;x++);
181 1 P7= 0x06; /*顯示增加,不平移*/
182 1 P6 = 0x08;
183 1 P6 = 0x09;
184 1 for(x=0;x<5000;x++);
185 1 P7 = 0x01; /*清屏*/
186 1 P6 = 0x08;
187 1 P6 = 0x09;
188 1 for(x=0;x<5000;x++);
189 1 }
190 void SYSCLK_Init (void) /*時(shí)鐘初始化*/
191 {
192 1 int k; /*延時(shí)計(jì)數(shù)器*/
193 1 OSCXCN = 0x67; /*啟動(dòng)外部晶振*/
194 1 for (k=0; k < 255; k++) ; /*等待外部晶體起振*/
195 1 while ((OSCXCN & 0x80)==0x00) ; /*查詢標(biāo)志位*/
196 1 OSCICN=0x88 ; /* 選擇外部時(shí)鐘為11.0592MHZ*/
-
197 1 }
198
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1467 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 57 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -