📄 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
8 #define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=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 + -