📄 pca_capture.lst
字号:
C51 COMPILER V8.02 PCA_CAPTURE 04/04/2008 19:55:16 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PCA_CAPTURE
OBJECT MODULE PLACED IN PCA_Capture.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCA_Capture.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*===============================================================*/
2 /*函数名称: PCA_Capture.c */
3 /*函数功能: 主函数,调用各模块 */
4 /*基本思想: 正负边沿均捕捉脉冲 */
5 /*修改记录: 无修改记录 */
6 /*编写作者: t483-4-19chenyong */
7 /*编写日期: 2007-4-14 */
8 /*===============================================================*/
9 #include"common.h"
10 #include"PCA.h"
11 #include<math.h>
12
13 xdata uint PCA0_Value[12],i;
14 xdata ulong sum0,sum1,x,y;
15 uchar number=0;
16 float value;
17 bit isnewdata;
18 /*===============================================================*/
19 /* CAPPn----------------------------------------------上升沿捕捉*/
20 /* CAPNn----------------------------------------------下降沿捕捉*/
21 /* ECCFn--------------------------------------------允许捕捉中断*/
22 /*===============================================================*/
23 void PCA0_Initial()
24 { //PCA CEX0配置为正负边沿均捕捉
25 1 PCA0CPM0 = 0x31; //正负边沿触发模式,CEX0捕捉中断使能
26 1 PCA0CPL0 = 0x00;
27 1 PCA0CPH0 = 0x00;
28 1 }
29 void PCA_Initial()
30 {
31 1 PCA0MD=0x08; //PCA采用系统时钟,且PCA溢出中断禁止
32 1 PCA0CN=0x40; //启动PCA计数器
33 1 EIE1|=0x08; //PCA中断使能
34 1 }
35
36 float PCA_Capture()
37 {
38 1 //把捕捉端口配置到P0.0
39 1 if(isnewdata) //捕捉十次
40 1 {
41 2 isnewdata=0;
42 2 if(number>=12)
43 2 {
44 3 sum0=PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
45 3 sum1=PCA0_Value[2]+PCA0_Value[4]+PCA0_Value[6]+PCA0_Value[8]+PCA0_Value[10];
46 3 if(sum0<sum1)
47 3 {
48 4 value=sum0;
49 4 value=(float)value*0.2;
50 4 value=(float)value/3.999892398;
51 4 }
52 3 else
53 3 {
54 4 value=sum1;
55 4 value=(float)value*0.2;
C51 COMPILER V8.02 PCA_CAPTURE 04/04/2008 19:55:16 PAGE 2
56 4 value=(float)value/3.999892398;
57 4
58 4 }
59 3 // value=sum0<sum1? x:y;
60 3 // value=sum;
61 3 // value=(float)value*0.2;
62 3 // value=(float)value/3.999892398;
63 3 number=0;
64 3 }
65 2 }
66 1 return(value);
67 1 }
68 /*
69 捕捉思想:在中断程序中放个静态变量,电平的跳变间隔就是当前的捕捉值与上次捕捉
70 值之差。
71 */
72 void PCA_ISR(void) interrupt 9 using 1
73 {
74 1 static xdata uint temp_count=0;
75 1 if(CCF0)
76 1 {
77 2 PCA0_Value[number] = PCA0CPL0+PCA0CPH0*256-temp_count;
78 2 temp_count = PCA0CPL0+PCA0CPH0*256;
79 2 number++;
80 2 CCF0=0;
81 2 }
82 1 isnewdata=1;
83 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 378 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 44 ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -