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