📄 startcount.lst
字号:
C51 COMPILER V8.02 STARTCOUNT 04/10/2007 15:24:17 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE STARTCOUNT
OBJECT MODULE PLACED IN startCount.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE startCount.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*===============================================================*/
2 /*函数名称: startCount.c */
3 /*函数功能: 对frenum个脉冲进行计时 */
4 /*入口参数: val-----------------------------------所计的脉冲数目*/
5 /*函数说明: T4被配置在P0.0口上面,加外部脉冲时最好加个3 k的上拉电阻
6 */
7 /*修改记录: 无修改记录 */
8 /*编写作者: t483-4-19chenyong */
9 /*编写日期: 2007-4-06 */
10 /*===============================================================*/
11 #include"common.h"
12 extern ulong freTime;
13 uchar tf2num;
14 extern bit isnewdata;
15 bit isfilter;
16 /*================================================================*/
17 /*开始计时 */
18 /*================================================================*/
19 void startCount(uint val)
20 {
21 1 // T4_Setvalue(1);
22 1 // while(!isfilter); //等待上升沿的到来
23 1 T4_Setvalue(val); //设定要计数的脉冲个数
*** WARNING C206 IN LINE 23 OF STARTCOUNT.C: 'T4_Setvalue': missing function-prototype
*** ERROR C267 IN LINE 23 OF STARTCOUNT.C: 'T4_Setvalue': requires ANSI-style prototype
24 1 T4CON|=0x04;
25 1 tf2num=0;
26 1 T2_Start();
27 1 isnewdata=0;
28 1 }
29 /*================================================================*/
30 /*计数器初始化说明: 计数器工作在自动重载模式下,采用系统时钟12分频
31 中断益处时需要软件对标志位清0,但是不能位寻址,只
32 能进行字操作.计数时,不需时钟设置.
33 C/T2(计数模式)-------------------------------1
34 CP/RL4(自动重载)-----------------------------0
35 */
36 /*================================================================*/
37 void T4_Initial() //T4为计数模式
38 {
39 1 T4CON=0X02; //CT4=1,T4为计数器模式,下降沿触发加1
40 1 EIE2|=0X04; //T4中断使能
41 1 }
42 /*================================================================*/
43 /*定时器2初始化说明:定时器2工作在自动重载模式下,采用系统时钟12分频
44 中断益处时需要软件对标志位清0,
45 C/T2(定时器模式)-----------------------------0
46 CP/RL2(自动重载)-----------------------------0
47 T2M(系统时钟12分频)--------------------------0
48 */
49 /*================================================================*/
50 void T2_Initial() //t2为定时器模式,采用系统时钟12分频
51 {
52 1 T2CON=0X00; //定时器模式,自动重载
53 1 CKCON=0x00; //采用系统时钟12分频
C51 COMPILER V8.02 STARTCOUNT 04/10/2007 15:24:17 PAGE 2
54 1 RCAP2H=0x00;
55 1 RCAP2L=0x00;
56 1 TH2=0x00;
57 1 TL2=0x00; //定时初始化
58 1 IE|=0X20; //T2中断使能
59 1 }
60 /*================================================================*/
61 /*定时器2开始工作 */
62 /*================================================================*/
63 void T2_Start()
64 {
65 1 TH2=0x00;
66 1 TL2=0x00;
67 1 TF2=0;
68 1 TR2=1; //启动定时器
69 1 }
70 /*================================================================*/
71 /*设置计数器要计的脉冲数 */
72 /*================================================================*/
73 void T4_Setvalue(uint val)
74 {
75 1 RCAP4H=(~val+1)/256;
76 1 RCAP4L=(~val+1)%256;
77 1 TH4=RCAP4H;
78 1 TL4=RCAP4L; //装载初始值
79 1 }
80 /*================================================================*/
81 /*中断服务函数 */
82 /*================================================================*/
83 void T2_Service() interrupt 5
84 { //T2定时溢出处理
85 1 TF2=0;
86 1 tf2num++;
87 1 }
88 void T4_Service() interrupt 16
89 {
90 1 //frenum个频率计满,产生T4中断
91 1 TR2=0;
92 1 freTime=256*TH2+TL2; //计算所用时间
93 1 T4CON=0x00; //关闭计数器
94 1 isnewdata=1;
95 1 isfilter=1;
96 1 freTime+=65536L*tf2num; //需要加上T2的溢出时间
97 1 freTime=freTime*0.344140206;
98 1 //0.3441402此数据为经验值,对50个数据处理的结果
99 1 }
100 /*=============================end=================================*/
101
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -