?? t2t3t4.lst
字號:
C51 COMPILER V7.50 T2T3T4 08/20/2007 19:44:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE T2T3T4
OBJECT MODULE PLACED IN t2t3t4.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE t2t3t4.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //////////T法測頻調試程序/////////////
2 /////////t3 頻率方波輸出//////////////
3 /////////t4 脈沖計數/////////////////////
4 /////////t2 計時////////////////////////////
5 /////////t2t3t4.c//////////////////////////
6 //#include <C8051F040.h>
7 #include <lcd.h>
*** WARNING C235 IN LINE 48 OF LCD.H: parameter 1: different types
*** WARNING C236 IN LINE 216 OF LCD.H: '_showintmes': different length of parameter lists
8 #define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
9 #define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=1;SFRPAGE=temppage
10 #define T4STOP temppage=SFRPAGE;SFRPAGE=0x02;TR4=0;SFRPAGE=temppage
11 #define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
12 //typedef unsigned int uint;
13 //typedef unsigned char uchar;
14 //typedef unsigned long ulong;
15 sfr16 RCAP2=0xca;
16 sfr16 RCAP3=0xca;
17 sfr16 RCAP4=0xca;
18 sfr16 TMR4=0xcc;
19 sfr16 TMR3=0xcc;
20 sfr16 TMR2=0xcc;
21 uchar temppage;
22 uchar tf2num;
23 bit isnewdata;
24 ulong freTime;
25 long t3frequency;
26 void t4ISR();
27 void t2ISR();
28 /*void delay1ms(uint time){//延遲1ms
29 uint i;
30 uint j;
31 for (i=0;i<time;i++){
32 for(j=0;j<300;j++);
33 }
34 }*/
35 void t3_fre_set(uint val){//T3頻率設置,計算公式為:(T3時鐘頻率/(2*val))
36 1 temppage=SFRPAGE;
37 1 SFRPAGE=0x01;
38 1 RCAP3=~val+1;
39 1 TMR3=RCAP3;
40 1 SFRPAGE=temppage;
41 1 }
42 void t3_ini(){//t3為頻率輸出模式
43 1 temppage=SFRPAGE;
44 1 SFRPAGE=0x01;
45 1 TMR3CN=0x00;//TR3=0,T3尚未啟動
46 1 TMR3CF=0x0e;//T3采用系統時鐘,TOG3=1,T3不計數時輸出為1,DCEN=0
47 1 SFRPAGE=temppage;
48 1 }
49 void t4_ini(){//T4為計數模式
50 1 temppage=SFRPAGE;
51 1 SFRPAGE=0x02;
52 1 TMR4CF=0X00;//計數模式下,對T4M1-T4M0設置無效,DCEN=0,向下計數禁止
53 1 TMR4CN=0X02;//CT4=1,T4為計數器模式
C51 COMPILER V7.50 T2T3T4 08/20/2007 19:44:29 PAGE 2
54 1 SFRPAGE=0X00;
55 1 EIE2|=0X04;//T4中斷使能
56 1 SFRPAGE=temppage;
57 1 }
58 void t2_ini(){//t2為定時器模式,采用系統時鐘12分頻
59 1 temppage=SFRPAGE;
60 1 SFRPAGE=0x00;
61 1 TMR2CN=0X00;//定時器模式,自動重載
62 1 TMR2CF=0x00;//DCEN=0,向下計數禁止,采用系統時鐘
63 1 RCAP2=0x0000;
64 1 TMR2=0x0000;
65 1 SFRPAGE=0X00;
66 1 IE|=0X20;//T2中斷使能
67 1 SFRPAGE=temppage;
68 1 }
69 void t2_start(){
70 1 temppage=SFRPAGE;
71 1 SFRPAGE=0x00;
72 1 TMR2=0x0000;
73 1 TF2=0;
74 1 TR2=1;
75 1 SFRPAGE=temppage;
76 1 }
77 void t4_set(uint val){//val為計數脈沖數
78 1 temppage=SFRPAGE;
79 1 SFRPAGE=0x02;
80 1 RCAP4=~val+1;
81 1 TMR4=RCAP4;
82 1 SFRPAGE=temppage;
83 1 }
84 void startCount(uint val){//開始計時
85 1 t4_set(val);
86 1 T4RUN;
87 1 tf2num=0;
88 1 t2_start();
89 1 isnewdata=0;
90 1 }
91 void config(){
92 1 //看門狗禁止
93 1 WDTCN = 0x07;
94 1 WDTCN = 0xDE;
95 1 WDTCN = 0xAD;
96 1 SFRPAGE = 0x0F;
97 1 //交叉開關配置,T3=P0.0,T4=P0.1,測試時將T3與T4相連
98 1 XBR0 = 0x00;
99 1 XBR1 = 0x00;
100 1 XBR2 = 0x48;
101 1 XBR3 = 0x01;
102 1 //管腳輸出配置,P0口為開漏輸出,其中P0.0接上拉電阻,P0為數字輸入口
103 1 SFRPAGE = 0x0F;
104 1 P0MDOUT = 0x00;
105 1 P1MDIN = 0xFF;
106 1 P4MDOUT = 0x00; //P4口為開漏,也可推挽
107 1 P5MDOUT = 0x07;
108 1 //晶振配置,采用內部晶振8分頻
109 1 SFRPAGE = 0x0F;
110 1 CLKSEL = 0x00;
111 1 OSCXCN = 0x00;
112 1 OSCICN = 0x84;
113 1 }
114 void main(void){
115 1 uint frenum=100;
C51 COMPILER V7.50 T2T3T4 08/20/2007 19:44:29 PAGE 3
116 1 ulong fre_factor;
117 1 uchar k=0;
118 1 uchar test ;
119 1 //uchar i=0;
120 1 //uchar line[7] = "no data";
121 1 config();
122 1 //dispini();
123 1 t2_ini();
124 1 t3_ini();
125 1 t4_ini();
126 1 EA=1;
127 1 fre_factor=255208L*(ulong)frenum;
128 1 t3_fre_set(15321);
129 1 T3RUN;
130 1 startCount(frenum);
131 1 isnewdata=0;
132 1 while(1){
133 2 //showint(line,0);
134 2 temppage = SFRPAGE;
135 2
136 2 SFRPAGE = 1;
137 2 test = TMR3CF;
138 2 SFRPAGE = temppage;
139 2
140 2 if(isnewdata){
141 3 //i++;
142 3 //if(i>5){
143 3 //if(k>=5){
144 3 // k=0;//在此設斷點觀察數據
145 3 // k=0;
146 3 //}
147 3 t3frequency=fre_factor/freTime;
148 3 //showint(t3frequency,0);
149 3 ///delay1ms(100);
150 3 //i = 0;
151 3 //}
152 3
153 3 startCount(frenum);
154 3 }
155 2 }
156 1 }
157 void t4ISR() interrupt 16 {//frenum個頻率計滿,產生T4中斷
158 1 temppage=SFRPAGE;
159 1 SFRPAGE=0X00;
160 1 TR2=0;//將T2停止,并計算frenum個脈沖所需要的時間,從而可以計算頻率
161 1 freTime=TMR2;
162 1 SFRPAGE=0X02;
163 1 TR4=0;
164 1 TF4=0;
165 1 isnewdata=1;
166 1 freTime+=65536L*tf2num;//需要加上T2的溢出時間
167 1 //注意若頻率不是很高,frenum不宜過大,否則會使freTime計算溢出
168 1 //若精度有要求,可采用浮點運算
169 1 SFRPAGE=temppage;
170 1 }
171 void t2ISR() interrupt 5{//T2定時溢出處理
172 1 temppage=SFRPAGE;
173 1 SFRPAGE=0X00;
174 1 TF2=0;
175 1 tf2num++;
176 1 SFRPAGE=temppage;
177 1 }
C51 COMPILER V7.50 T2T3T4 08/20/2007 19:44:29 PAGE 4
178
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3131 ----
CONSTANT SIZE = 63 ----
XDATA SIZE = 32 4
PDATA SIZE = ---- ----
DATA SIZE = 10 47
IDATA SIZE = ---- 11
BIT SIZE = 1 6
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -