📄 pca_cap.lst
字号:
C51 COMPILER V7.50 PCA_CAP 08/22/2007 14:50:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PCA_CAP
OBJECT MODULE PLACED IN PCA_CAP.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE PCA_CAP.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /////////t3 频率方波输出//////////////
2 /////////PCA CEX4 捕捉 测试程序//////
3 /////////PCA_CAP.c//////////////////////////
4 #include <C8051F040.h>
5 #define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
6 #define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
7 typedef unsigned int uint;
8 typedef unsigned char uchar;
9 typedef unsigned long ulong;
10 sfr16 RCAP2=0xca;
11 sfr16 RCAP3=0xca;
12 sfr16 RCAP4=0xca;
13 sfr16 TMR4=0xcc;
14 sfr16 TMR3=0xcc;
15 sfr16 TMR2=0xcc;
16 sfr16 PCA0CP0=0xfb;
17 sfr16 PCA0CP1=0xfd;
18 sfr16 PCA0CP2=0xe9;
19 sfr16 PCA0CP3=0xeb;
20 sfr16 PCA0CP4=0xed;
21 sfr16 PCA0CP5=0xe1;
22 uchar temppage;
23 xdata uint pcacap4[10];
24 uchar num1=0;
25 bit isnewdata;
26 void delay1ms(){
27 1 uchar j;
28 1 for(j=0;j<25;j++);
29 1 }
30 void t3_fre_set(uint val){//T3频率设置,计算公式为:(T3时钟频率/(2*val))
31 1 temppage=SFRPAGE;
32 1 SFRPAGE=0x01;
33 1 RCAP3=~val+1;
34 1 TMR3=RCAP3;
35 1 SFRPAGE=temppage;
36 1 }
37 void t3_ini(){//t3为频率输出模式
38 1 temppage=SFRPAGE;
39 1 SFRPAGE=0x01;
40 1 TMR3CN=0x00;//TR3=0,T3尚未启动
41 1 TMR3CF=0x0e;//T3采用系统时钟,TOG3=1,T3不计数时输出为1,DCEN=0
42 1 SFRPAGE=temppage;
43 1 }
44 void pca4ini(){//PCA CEX4配置为正负边沿均捕捉
45 1 SFRPAGE=0x00;
46 1 PCA0CPM4 = 0x31; // 正负边沿触发模式,CEX4捕捉中断使能
47 1 PCA0CPL4 = 0x00;
48 1 PCA0CPH4 = 0x00;
49 1 }
50 void pcaini(){
51 1 SFRPAGE=0x00;
52 1 PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
53 1 PCA0CN=0x40;//启动PCA计数器
54 1 EIE1|=0x08;//PCA中断使能
55 1 }
C51 COMPILER V7.50 PCA_CAP 08/22/2007 14:50:11 PAGE 2
56 void config(){
57 1 //看门狗禁止
58 1 WDTCN = 0x07;
59 1 WDTCN = 0xDE;
60 1 WDTCN = 0xAD;
61 1 SFRPAGE = 0x0F;
62 1 //交叉开关配置,CEX4配置在P0.4,T3输出配置在P0.6
63 1 XBR0 = 0x30;
64 1 XBR1 = 0x00;
65 1 XBR2 = 0x40;
66 1 XBR3 = 0x01;
67 1 //管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P1为数字输入口
68 1 SFRPAGE = 0x0F;
69 1 P0MDOUT = 0x00;
70 1 P1MDIN = 0xFF;
71 1 //晶振配置,采用内部晶振8分频
72 1 SFRPAGE = 0x0F;
73 1 CLKSEL = 0x00;
74 1 OSCXCN = 0x00;
75 1 OSCICN = 0x84;
76 1 }
77 uchar idata x;
78 uchar idata fifo[60]; //用数组构建产度为60的队列
79 uchar fifoAdd(uchar a){//队列元素增加
80 1 uchar i;
81 1 for(i= 0;i<59;i++){
82 2 fifo[59-i]=fifo[58-i];
83 2 }
84 1 fifo[0] = a;
85 1 return fifo[0];
86 1 }
87 void main(void){//测试时将P0.6与P0.4口相连
88 1 xdata uint freset=1000;
89 1 config();
90 1 t3_ini();
91 1 t3_fre_set(freset);
92 1 T3RUN;
93 1 EA=1;
94 1 num1=0;
95 1 isnewdata=0;
96 1 pcaini();
97 1 pca4ini();
98 1 while(1){
99 2 if(isnewdata){
100 3 isnewdata=0;
101 3 fifoAdd(x);
102 3 /*if(num1>=10)
103 3 num1=0;*/
104 3 }
105 2 }
106 1 }
107 void PCA_ISR(void) interrupt 9 using 1 {
108 1 /* static xdata uint tmpcnt=0;
109 1 if(CCF4){
110 1 pcacap4[num1]=PCA0CP4-tmpcnt;
111 1 tmpcnt=PCA0CP4;
112 1 num1++;
113 1 CCF4=0;
114 1 }*/
115 1 //delay1ms();
116 1 P1 = 0xff;
117 1 x = P1;
C51 COMPILER V7.50 PCA_CAP 08/22/2007 14:50:11 PAGE 3
118 1 isnewdata=1;
119 1
120 1 }
121
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 233 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 20 2
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = 61 ----
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 + -