📄 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 + -