?? wfrequence.lst
字號:
C51 COMPILER V7.05 WFREQUENCE 02/14/2006 09:27:39 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE WFREQUENCE
OBJECT MODULE PLACED IN WFREQUENCE.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WFREQUENCE.C DB OE
stmt level source
1 //參考程序A:WFREQUENCE.C 程序運行前將S3的第2和第4撥碼開關撥到ON,用跳線將T0和P0.0短接,撥碼開關S1打開任一方
-波信號通道(2000KHZ,1000KHZ,500KHZ,250KHZ);T0作為外部計數器,T1作為定時器,T1定時在1ms范圍內察看計數器T0所計的數。計算出
-被測信號的頻率并顯示在LCD上.
2 #include <c8051f020.h> // SFR declarations
3 #include <intrins.h>
4 unsigned long x;
5 unsigned char *lcdpoint; /*指向 lcddata數組的指針*/
6 unsigned char lcd_data_count; /*要顯示的數據個數 */
7 unsigned char temp,data1;
8 unsigned char HMS[9]={"FREQUECE:"},YMD[10]={0x0,0x00,0X0,0X0,"Khz"};
9 #define SYSCLK 11059200 /*外部晶振頻率*/
10 sbit P31 = P3^1;
11 void SYSCLK_Init (void); //系統時鐘初始化
12 void PORT_Init (void); //端口初始化
13 void Time01_Init(void); //定時器0/1初始化
14 void LCD_Init(void);
15 unsigned int Frequence; //外部脈沖數變量
16 unsigned int FF1,FF2,FF3,FF4,FF;
17 /*延時子程序*/
18 void sleep_ms(unsigned int count)
19 {
20 1 unsigned char ii,jj;
21 1 for(ii=0;ii<count;ii++)
22 1 {
23 2 for(jj=0;jj<250;jj++)
24 2 _nop_();
25 2 }
26 1 }
27 void main (void) {
28 1 WDTCN = 0xde; /*無效看門狗*/
29 1 WDTCN = 0xad;
30 1 LCD_Init();
31 1 SYSCLK_Init (); /*初始化時鐘*/
32 1 PORT_Init (); /*初始化交叉開關和IO口*/
33 1 Time01_Init(); /*初始化定時器0/1*/
34 1 while (1) {
35 2 P31=0;
36 2 sleep_ms(250);
37 2 EA=1; // 開總中斷
38 2 TR1=1; // 開定時器1
39 2 TR0=1; // 開定時器0
40 2 P6 = 0x0d;
41 2 for(x=0;x<1000;x++); //延時
42 2 lcdpoint=&HMS;
43 2 for(lcd_data_count=9;lcd_data_count>0;lcd_data_count--)//顯示"FREQUENCE:"
44 2 {
45 3 data1=*lcdpoint;
46 3 P7 = data1; /*送字符數據*/
47 3 P6 = 0x0c;
48 3 P6 = 0x0d;
49 3 lcdpoint++;
50 3 for(x=0;x<100;x++);
51 3 } //準備送數據
52 2 //for(x=0;x<5000;x++);
53 2 lcdpoint=&YMD;
C51 COMPILER V7.05 WFREQUENCE 02/14/2006 09:27:39 PAGE 2
54 2 for(lcd_data_count=7;lcd_data_count>0;lcd_data_count--) //顯示"XXXXKhz"
55 2 {
56 3 data1=*lcdpoint;
57 3 if(data1<0x40)
58 3 data1 += 0x30; /*轉化成字符碼*/
59 3 P7 = data1; /*送字符數據*/
60 3 P6 = 0x0c;
61 3 P6 = 0x0d;
62 3 lcdpoint++;
63 3 for(x=0;x<100;x++);
64 3 }
65 2 }
66 1 }
67 void SYSCLK_Init (void)
68 {
69 1 int i; /*延時計數器*/
70 1 OSCXCN = 0x67; /*啟動外部11.0592MHz晶振*/
71 1 for (i=0; i < 255; i++) ; /*等待外部晶體起振*/
72 1 while ((OSCXCN & 0x80)==0x00) ; /*查詢標志位*/
73 1 OSCICN = 0x08; /*選擇外部晶體作為系統時鐘并使能時鐘丟失檢測*/
-
74 1 }
75 void PORT_Init (void)
76 {
77 1 XBR0 = 0x00;
78 1 XBR1 = 0x02; /*交叉開關使能T0*/
79 1 XBR2 = 0x40; /*使能交叉開關和弱上拉*/
80 1 P74OUT = 0xf0; /*P6,P7為推挽輸出*/
81 1 }
82 void Time01_Init(void)
83 {
84 1 EA=0; //關總中斷
85 1 TR0=0; //關定時器0
86 1 TR1=0; //關定時器1
87 1 IE=0x0A; /*允許TF1/TF0標志位(TCON.7/TCON.5)的中斷請求*/
88 1 /*定時器1/0發生溢出*/
89 1 TMOD=0x15; /*定時器1是16位定時器方式,定時器0是16為計數器(T0腳)方式*/
90 1 IP=0x08; /*定時器1是高優先級中斷*/
91 1 CKCON=0x10; /*定時器1的時基是系統時鐘*/
92 1 TH1=(-SYSCLK/1000)>>8; /*定時1ms,定時器1使用系統時鐘*/
93 1 TL1=-SYSCLK/1000;
94 1 }
95 void TIMER1_ISR (void) interrupt 3 using 1
96 { P31=1; /*關閉被測信號源*/
97 1 TF1=0; /*清中斷標志*/
98 1 TR1=0; /*關定時器1*/
99 1 Frequence=TH0*0x100+TL0;/*外部脈沖數 單位 KHz*/
100 1 TR0=0;
101 1 FF4=Frequence/1000; /*將頻率數據轉化單字節并存入數組中*/
102 1 YMD[0]=FF4;
103 1 FF=(Frequence-FF4*1000);
104 1 FF3=FF/100;
105 1 YMD[1]=FF3;
106 1 FF=(FF-FF3*100);
107 1 FF2=FF/10;
108 1 YMD[2]=FF2;
109 1 FF=(FF-FF2*10);
110 1 FF1=FF;
111 1 YMD[3]=FF1;
112 1 TH0=0; /*清定時器0到零*/
113 1 TL0=0;
114 1 TH1=(-SYSCLK/1000)>>8; TL1=-SYSCLK/1000;
C51 COMPILER V7.05 WFREQUENCE 02/14/2006 09:27:39 PAGE 3
115 1 TR1=1; /*開定時器1*/
116 1 TR0=1; /*開定時器0*/
117 1 P31=0; /*打開被測信號源*/
118 1 }
119 void LCD_Init(void)
120 {
121 1 P6 = 0x09;
122 1 for(x=0;x<50000;x++);
123 1 P7 = 0x30; /*一行顯示*/
124 1 // P7 = 0x38; /*兩行顯示*/
125 1 P6 = 0x08;
126 1 P6 = 0x09;
127 1 for(x=0;x<1000;x++);
128 1 P7 = 0x0e; /*顯示開,光標顯示,光標不閃爍*/
129 1 P6 = 0x08;
130 1 P6 = 0x09;
131 1 for(x=0;x<1000;x++);
132 1 P7= 0x06; /*顯示增加,不平移*/
133 1 P6 = 0x08;
134 1 P6 = 0x09;
135 1 for(x=0;x<5000;x++);
136 1 P7 = 0x01; /*清屏*/
137 1 P6 = 0x08;
138 1 P6 = 0x09;
139 1 for(x=0;x<5000;x++);
140 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 863 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 41 ----
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 + -