📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 08/05/2008 10:21:25 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\obj\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\main.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND PRINT(.\list\main.lst) OBJE
-CT(.\obj\main.obj)
line level source
1
2 /**********************************************************************
3 prjname:
4 author:
5 version:0.2
6 控制过程分析说明:
7 系统进入后就不停的查询P3.2和P1.0,
8 由此分开P3.2程序和P1.0程序
9
10 P3.2程序:负责检测呼入情况
11 没有呼入就进入P1.0程序
12 有呼入,需要进入检测对方取消和本地取消
13 检测到本地取消就进入本地取消处理然后退到主循环
14 检测到对方取消就进入对方取消处理然后退到主循环
15
16 P1.0程序:负责检测本地呼叫情况
17 没有本地呼叫情况进入P3.2程序
18 检测呼叫结果
19 本次呼叫不成功,进入下次呼叫,直到结束退到主循环
20 本次呼叫成功,进入成功处理
21 检测本地取消和对方取消
22 检测到本地取消就进入本地取消处理然后退到主循环
23 检测到对方取消就进入对方取消处理然后退到主循环
24 *********************************************************************/
25 #include "micro.h"
26
27 void InitSystem(void);
28 void Singal_Scan(void);
29 void PLOW_Scan(void);
30 void TimerCounterJudge(void);
31 void PinCtr(uchar pinS,uchar delays,uchar Seconds,uchar PinST);
32 void Low_Scan(void);
33 void Reset_Check(void);
34
35 main()
36 {
37 1
38 1 InitSystem();
39 1
40 1 while(1)
41 1 {
42 2
43 2 /*****************************************************/
44 2 if(Flag_10ms)
45 2 {//这是一个系统运行的核心程序,单独独立出来
46 3 Flag_10ms = 0;
47 3 Singal_Scan();
48 3 Low_Scan();
49 3 PLOW_Scan();
50 3 }
51 2 if(Flag_100ms)
52 2 {//这也是一个系统运行的核心程序,单独独立出来
53 3 Flag_100ms = 0;
54 3 TimerCounterJudge();
C51 COMPILER V8.08 MAIN 08/05/2008 10:21:25 PAGE 2
55 3 }
56 2 /*****************************************************/
57 2 if(FlagP32) //系统的P32程序 块
58 2 {
59 3 if((SYSPINSTA & Check_Signal)==Signal_En) //检测到有对方取消
60 3 {
61 4 if((SYSPINSTA & Check_type)==Busy_Tone) //确认有对方取消
62 4 {
63 5 PinCtr(1,0,HOLDON,Low);
64 5 PinCtr(7,0,HOLDON,Hight);
65 5 Reset_Check(); //所有信号标志复位
66 5 continue; //P32程序完成退出循环
67 5 }
68 4 }
69 3 if(SYSPINSTA & Line_Close) //检查p3.5脚低脉冲
70 3 {
71 4 PinCtr(0,0,HOLDON,Low);
72 4 PinCtr(7,0,HOLDON,Hight);
73 4 Reset_Check(); //所有信号标志复位
74 4 continue; //P32程序完成退出循环
75 4 }
76 3 continue; //P32程序未完成,直接退出到主循环等待事件发生
77 3 }
78 2 /*****************************************************/
79 2 if(FlagP10) //系统的P10程序 块
80 2 {
81 3 if((SYSPINSTA & Check_Signal)==Signal_En) //检测到有对方无确认
82 3 {
83 4 if((SYSPINSTA & Check_type)==Ring_respond) //确认有对方无确认
84 4 {
85 5 Dailtimes++; //系统只进行5次尝试
86 5 if(Dailtimes>=5)
87 5 {
88 6 PinCtr(1,0,HOLDON,Low);
89 6 PinCtr(7,0,HOLDON,Hight);
90 6 Reset_Check(); //所有信号标志复位
91 6 continue; //P10程序完成退出循环
92 6 }
93 5 pinnop11 = 0; //P11先送低
94 5 PinCtr(1,20,HOLDON,Hight); //P11在2S后保持高
95 5 PinCtr(2+Dailtimes,30,2,Hight); //P1(2+Dailtimes)在3S后送200ms高
96 5 Reset_Check(); //所有信号标志复位
97 5 FlagP10 = 1; //保证下次还是进入P10程序块
98 5 continue; //P32程序完成退出循环
99 5 }
100 4 }
101 3 if((SYSPINSTA & Check_Signal)==Signal_En) //检测到有对方取消
102 3 {
103 4 if((SYSPINSTA & Check_type)==Busy_Tone) //确认有对方取消
104 4 {
105 5 PinCtr(1,0,HOLDON,Low);
106 5 PinCtr(7,0,HOLDON,Hight);
107 5 Reset_Check(); //所有信号标志复位
108 5 continue; //P32程序完成退出循环
109 5 }
110 4 }
111 3 if(SYSPINSTA & H_F) //P10程序块检测到免提就退出P10程序块
112 3 {
113 4 PinCtr(1,0,HOLDON,Low);
114 4 PinCtr(7,0,HOLDON,Hight);
115 4 Reset_Check();
116 4 Dailtimes=0;
C51 COMPILER V8.08 MAIN 08/05/2008 10:21:25 PAGE 3
117 4 continue; //确认进入P10程序块,需要立即进入下一次
118 4 }
119 3 continue; //P10程序未完成,直接退出到主循环等待事件发生
120 3 }
121 2 /*****************************************************/
122 2 if(SYSPINSTA & Ring_In) //检查p3.2脚低脉冲
123 2 {
124 3 PinCtr(1,0,HOLDON,Hight); //P1.1->H
125 3 PinCtr(7,0,HOLDON,Low); //P1.7->L
126 3 PinCtr(0,5,20,Hight); //将P3.7延时500ms,置高2s(200*10ms)钟
127 3 Reset_Check();
128 3 FlagP32 = 1; //要求系统下次进入P32程序
129 3 continue; //确认进入P32程序块,需要立即进入下一次
130 3 }
131 2 if(SYSPINSTA & H_F) //主程序检测到免提就打开系统
132 2 {
133 3 PinCtr(1,0,HOLDON,Hight); //P11保持高
134 3 PinCtr(7,0,HOLDON,Low); //P17保持低
135 3 PinCtr(2,10,2,Hight); //P12在1S后送200ms高
136 3 Reset_Check();
137 3 Dailtimes=0;
138 3 FlagP10 = 1; //要求系统下次进入P10程序
139 3 continue; //确认进入P10程序块,需要立即进入下一次
140 3 }
141 2 }
142 1 }
143
144 /***********************************************************************
145 subroutine name: initsystem
146 input variable: /
147 output variable: /
148 description: initialize the system variable,for interrupt\timer\uart\
149 ***********************************************************************/
150 void InitSystem(void)
151 {
152 1
153 1 uchar i;
154 1
155 1 IE = 0;
156 1 TMOD = 0x21;
157 1 PCON = 0x80;
158 1 SCON = 0x50;
159 1 IP = 0x02;
160 1 ET0 = 1;
161 1 TCON = 0;
162 1 LOAD_TIMER0(TimerH_1ms, TimerL_1ms);
163 1 TI = 0;
164 1 RI = 0;
165 1 for(i=0;i<TrkTal;i++)
166 1 {
167 2 CHECK_Reg[i] = 0;
168 2 TimerCount[i] = 0;
169 2 }
170 1
171 1 SYSPINSTA = 0;
172 1 FlagP10 = 0;
173 1 FlagP32 = 0;
174 1
175 1 Counter1ms = 0;
176 1 Flag_10ms = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -