📄 plji.lst
字号:
C51 COMPILER V7.06 PLJI 05/04/2005 18:04:53 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PLJI
OBJECT MODULE PLACED IN plji.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE plji.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------函数声明,变量定义--------------------------------------------------------
2 #include <reg51.h>
3 sbit GATE=P3^0; //预制门限
4 sbit CLR =P3^1; //请零
5 sbit RGATE=P3^2; //实际门限
6 sbit SEL0=P3^4; //数据选择位0
7 sbit SEL1=P3^5; //数据选择位1
8 sbit SEL2=P3^6; //数据选择位2
9 #define data_in P1
10 unsigned char Nx[4]; //待测频率计数值
11 unsigned char Ns[4]; //标准频率计数值
12 unsigned char GATE_time=1; //门限时间,预定义为1S
13 unsigned char time_count;
14 bit PRE_judge=1;
15 //-----------------------变量声明---------------------------------------------------------------------
16 void system_init(void ); //初始化,设置定时器0的工作方式,供主程序调用
17 void TIMER0_SCANkey(); //定时器0中断处理函数
18
19 //--------------------------------------------------------------------------------------------------
20 // 函数名称: system_init()
21 // 函数功能: 初始化设置
22 // 设定INT0的工作方式
23 //--------------------------------------------------------------------------------------------------
24 void system_init(void )
25 {
26 1 TMOD=0x01; //定时器0工作在方式1
27 1 ET0=1; //定时器0中断允许
28 1 TH0=-5000/256; //12M时钟时,定时0.01秒
29 1 TL0=-5000%256;
30 1 TR0=1; //定时器0开始计数
31 1 EA=1; //系统中断允许
32 1 }
33 //--------------------------------------------------------------------------------------------------
34 // 函数名称: read_result
35 // 函数功能: 将计数值读出到Nx、Ns
36 //--------------------------------------------------------------------------------------------------
37 void read_result()
38 {
39 1 GATE=0;
40 1 while(RGATE); //等待实际门限的结束
41 1 SEL0=0;
42 1 SEL1=0;
43 1 SEL2=0;
44 1 Nx[0]=data_in; //SEL=000
45 1 SEL0=1;
46 1 Nx[1]=data_in; //001
47 1 SEL1=1;
48 1 Nx[3]=data_in; //011
49 1 SEL0=0;
50 1 Nx[2]=data_in; //010
51 1 SEL0=0;
52 1 SEL1=0;
53 1 SEL2=1;
54 1 Ns[0]=data_in; //100
55 1 SEL0=1;
C51 COMPILER V7.06 PLJI 05/04/2005 18:04:53 PAGE 2
56 1 Ns[1]=data_in; //101
57 1 SEL1=1;
58 1 Ns[3]=data_in; //111
59 1 SEL0=0;
60 1 Ns[2]=data_in; //110
61 1 }
62 //--------------------------------------------------------------------------------------------------
63 // 函数名称: judge_Prage
64 // 函数功能: 判断频率范围,
65 // 大于1M 即Nx>0x00 0F 42 40, GATE=1
66 // 小于1M大于1k即0x00 00 03 E8<Nx<0x00 0F 42 40,GATE=5
67 // 小于1k 即 Nx<0x00 00 03 E8, GATE=10
68 //--------------------------------------------------------------------------------------------------
69 void judge_Prage()
70 {
71 1 if((Nx[3]==0)&&(Nx[2]==0))
72 1 if((Nx[1]<3)||((Nx[1]==3)&&(Nx[0]<0xE8)))
73 1 GATE_time=10;
74 1 else GATE_time=5;
75 1 else if((Nx[3]==0)&&(Nx[2]<0x0f))
76 1 GATE_time=5;
77 1 else if((Nx[3]==0)&&(Nx[2]==0x0f))
78 1 if(Nx[1]<0x42)
79 1 GATE_time=5;
80 1 else if((Nx[1]==0x42)&&(Nx[0]<0x40))
81 1 GATE_time=5;
82 1 else
83 1 GATE_time=1;
84 1 else GATE_time=1;
85 1 }
86 //--------------------------------------------------------------------------------------------------
87 // 函数名称: calcu_Fx
88 // 函数功能: 计算频率,根据Fx=(Nx/Ns)Fs 计算结果
89 //--------------------------------------------------------------------------------------------------
90 void calcu_Fx()
91 {
92 1
93 1 }
94 //--------------------------------------------------------------------------------------------------
95 // 函数名称: TIMER0_intrupt
96 // 函数功能: 定时器0中断处理程序
97 //--------------------------------------------------------------------------------------------------
98 void TIMER0_intrupt() interrupt 1 using 1
99 {
100 1 EA=0; //系统中断禁止
101 1 GATE=1;
102 1 TH0=-5000/256; //12M时钟时,定时0.01秒
103 1 TL0=-5000%256;
104 1 time_count++;
105 1 if(++time_count==100) GATE_time--;
106 1 while(GATE_time==0)
107 1 {
108 2 GATE=0;
109 2 read_result();
110 2 if(PRE_judge) //预测,判断频率范围
111 2 {
112 3 judge_Prage();
113 3 PRE_judge=0;
114 3 if(GATE_time) //如果频率大于1M,直接计算,无须再测
115 3 calcu_Fx();
116 3 }
117 2 else
C51 COMPILER V7.06 PLJI 05/04/2005 18:04:53 PAGE 3
118 2 calcu_Fx(); //不是预测,直接计算结果
119 2 }
120 1 EA=1;
121 1 }
122 //--------------------------------------------------------------------------------------------------
123 // 函数名称: main
124 // 函数功能: 主函数
125 //--------------------------------------------------------------------------------------------------
126 void main()
127 {
128 1 CLR=0;
129 1 GATE=1;
130 1 system_init();
131 1 }
132
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 224 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -