📄 pca.lst
字号:
C51 COMPILER V8.02 PCA 07/20/2007 20:16:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PCA
OBJECT MODULE PLACED IN PCA.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCA.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 #define M 0.32653061
13
14 float value;
15 float xdata PCA0_Value[10];
16 long pca_temp;
17 float period;
18 float frequncy;
19 uchar number=0;
20 bit pca_flag;
21 /*===============================================================*/
22 /* CAPPn----------------------------------------------上升沿捕捉*/
23 /* CAPNn----------------------------------------------下降沿捕捉*/
24 /* ECCFn--------------------------------------------允许捕捉中断*/
25 /*===============================================================*/
26 void PCA0_Initial()
27 { //PCA CEX0配置为正负边沿均捕捉
28 1 PCA0CPM0 = 0x31; //正负边沿触发模式,CEX0捕捉中断使能
29 1 PCA0CPL0 = 0x00;
30 1 PCA0CPH0 = 0x00;
31 1 }
32 void PCA_Initial()
33 {
34 1 PCA0MD=0x08; //PCA采用系统时钟,且PCA溢出中断禁止
35 1 PCA0CN=0x40; //启动PCA计数器
36 1 EIE1|=0x08; //PCA中断使能
37 1 }
38
39 float PCA_Capture()
40 {
41 1
42 1 if(pca_flag) //捕捉十次
43 1 {
44 2 pca_flag=0;
45 2 if(number>=10)
46 2 {
47 3 pca_temp = PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
48 3 period = (float)pca_temp/5;
49 3 period = (float)M*period*2;
50 3 frequncy = (float)1000/period;
51 3 frequncy = (float)1000*frequncy;
52 3 number=0;
53 3 }
54 2 }
55 1 return(period);
C51 COMPILER V8.02 PCA 07/20/2007 20:16:00 PAGE 2
56 1 }
57 /*捕捉思想:在中断程序中放个静态变量,电平的跳变间隔就是当前的捕捉值与上次捕捉
58 值之差。
59 */
60 void PCA_ISR(void) interrupt 9 using 1
61 {
62 1 static xdata uint temp_count=0,cnum=0;
63 1 if(CF)
64 1 {
65 2 cnum++;
66 2 CF=0;
67 2 }
68 1 if(CCF0)
69 1 {
70 2 if(PCA0CP0<temp_count)
71 2 cnum--;
72 2 if(number>=10)
73 2 number=0;
74 2 PCA0_Value[number] = PCA0CP0-temp_count;
75 2 PCA0_Value[number]+=65536L*cnum;
76 2 cnum=0;
77 2 temp_count=PCA0CP0;
78 2 number++;
79 2 CCF0=0;
80 2 }
81 1 pca_flag=1;
82 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 449 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 44 ----
PDATA SIZE = ---- ----
DATA SIZE = 17 ----
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 + -