📄 366c.lst
字号:
C51 COMPILER V6.10 366C 03/06/2006 15:21:19 PAGE 1
C51 COMPILER V6.10, COMPILATION OF MODULE 366C
OBJECT MODULE PLACED IN E:\安\366\程序\下重\366C.OBJ
COMPILER INVOKED BY: E:\董\软件\lope\kc51\bin\C51.exe E:\安\366\程序\下重\366C.c SMALL OT(0,SIZE) SB OR DB OE
stmt level source
1 //----------------------------------------晶振480K 波特率7500--------------------------------------------/
-/
2 //---- ----------------简化版,不在24C02存储数据,仅仅简单收发;重庆高新区特别版,等待386回应时间延长--------/
-/
3 //-----------------------------------------2006年3月6日 董凯宁------------------------------------------//
-
4 #include "string.h"
5 #include <reg52.h>
6 #include <intrins.h>
7 #include <math.h>
8 //---------------------------------------定义部分----------------------------------------------
9 //P1
10 sbit MT8880_D0= P1^4; //OUT/IN 双向数据总线 5脚
11 sbit MT8880_D1= P1^5; //OUT/IN 双向数据总线 6脚
12 sbit MT8880_D2= P1^6; //OUT/IN 双向数据总线 7脚
13 sbit MT8880_D3= P1^7; //OUT/IN 双向数据总线 8脚
14 //P3
15 sbit MT8880_RW= P3^2; //OUT 读写选择控制 12脚
16 sbit MT8880_CP2= P3^3; //OUT 8880的系统时钟 13脚
17 sbit MT8880_CS= P3^4; //OUT 14脚
18 sbit MT8880_RS0= P3^5; //OUT 变低时,进入现场监听状态 15脚
19
20 //P2
21 sbit ToneTest= P2^2; //IN 峰值为3.5V的铃流脉冲信号检测 23脚
22 sbit J_LineToPhone= P2^3; //OUT 报警时,驱动继电器切断本地电话和外线的联系,同时模拟摘机 24脚
23
24 int JISHU;
25 unsigned char i;
26 typedef unsigned char Number[10]; //定义一个10字节长的数组类型,用来放6组电话,一组密码,次数振铃,报
-警延迟时间
27
28 //--------------------------------------函数部分-----------------------------------------------
29
30 void DELAY_50ms()
31 {
32 1 EA=0;
33 1 TMOD=0; //13位不重装定时器方式
34 1 TL0=48;
35 1 TH0=24;
36 1 TCON=0;
37 1 TR0=1; //定时器0启动,定时器1不启动
38 1 wait: if(TF0==0)
39 1 {
40 2 _nop_();
41 2 goto wait;
42 2 }
43 1 TCON=0;//停动定时器0
44 1 }
45
46 void MT8880_StatusRegister_READ()
47 {
48 1 MT8880_CP2=0;
49 1 MT8880_RW=1; //读状态寄存器
50 1 MT8880_RS0=1;
51 1 MT8880_CS=0;
C51 COMPILER V6.10 366C 03/06/2006 15:21:19 PAGE 2
52 1 MT8880_D0=1;
53 1 MT8880_D1=1;
54 1 MT8880_D2=1;
55 1 MT8880_D3=1;
56 1 MT8880_CP2=1;
57 1 }
58
59 void MT8880_DataRegister_READ()
60 {
61 1 MT8880_CP2=0;
62 1 MT8880_RW=1; //读接收数据寄存器
63 1 MT8880_RS0=0;
64 1 MT8880_CS=0; //给时钟信号
65 1 MT8880_D0=1;
66 1 MT8880_D1=1;
67 1 MT8880_D2=1;
68 1 MT8880_D3=1;
69 1 MT8880_CP2=1; //读状态寄存器值到D0-D3口
70 1 }
71
72 void MT8880_ControlRegister_Initialize()
73 {
74 1 MT8880_CP2=0;
75 1 MT8880_RS0=1; //du 1
76 1 MT8880_RW=1;
77 1 MT8880_CS=0;
78 1 MT8880_D0=1;
79 1 MT8880_D1=1;
80 1 MT8880_D2=1;
81 1 MT8880_D3=1;
82 1 MT8880_CP2=1;
83 1 MT8880_CP2=0;
84 1 MT8880_CS=1;
85 1
86 1 MT8880_RS0=1; //xie 1
87 1 MT8880_RW=0;
88 1 MT8880_CS=0;
89 1 MT8880_D0=0;
90 1 MT8880_D1=0;
91 1 MT8880_D2=0;
92 1 MT8880_D3=0;
93 1 MT8880_CP2=1;
94 1 MT8880_CP2=0;
95 1 MT8880_CS=1;
96 1
97 1 MT8880_RS0=1; //xie2
98 1 MT8880_RW=0;
99 1 MT8880_CS=0;
100 1 MT8880_D0=0;
101 1 MT8880_D1=0;
102 1 MT8880_D2=0;
103 1 MT8880_D3=0;
104 1 MT8880_CP2=1;
105 1 MT8880_CP2=0;
106 1 MT8880_CS=1;
107 1
108 1 MT8880_RS0=1; //xie3
109 1 MT8880_RW=0;
110 1 MT8880_CS=0;
111 1 MT8880_D0=0;
112 1 MT8880_D1=0;
113 1 MT8880_D2=0;
C51 COMPILER V6.10 366C 03/06/2006 15:21:19 PAGE 3
114 1 MT8880_D3=1;
115 1 MT8880_CP2=1;
116 1 MT8880_CP2=0;
117 1 MT8880_CS=1;
118 1
119 1 MT8880_RS0=1; //xie4
120 1 MT8880_RW=0;
121 1 MT8880_CS=0;
122 1 MT8880_D0=0;
123 1 MT8880_D1=0;
124 1 MT8880_D2=0;
125 1 MT8880_D3=0;
126 1 MT8880_CP2=1;
127 1 MT8880_CP2=0;
128 1 MT8880_CS=1;
129 1
130 1 MT8880_RS0=1; //du 2
131 1 MT8880_RW=1;
132 1 MT8880_CS=0;
133 1 MT8880_D0=1;
134 1 MT8880_D1=1;
135 1 MT8880_D2=1;
136 1 MT8880_D3=1;
137 1 MT8880_CP2=1;
138 1 MT8880_CP2=0;
139 1 MT8880_CS=1;
140 1
141 1 MT8880_D0=1; //总线复位
142 1 MT8880_D1=1;
143 1 MT8880_D2=1;
144 1 MT8880_D3=1;
145 1 }
146
147 void MT8880_ControlRegister_Write()
148 {
149 1 MT8880_CS=1;
150 1
151 1 MT8880_RW=0; //写控制寄存器
152 1 MT8880_RS0=1;
153 1 MT8880_D0=1; //使能tone输出
154 1 MT8880_D1=0; //选用双音多频方式,不用CP方式
155 1 MT8880_D2=0; //此脚在实际电路中未接,不管
156 1 MT8880_D3=1; //本次操作CRA,下一个写操作选择CRB
157 1 MT8880_CS=0;
158 1 MT8880_CP2=1;//给时钟信号,写D0-D3口值到控制寄存器
159 1 MT8880_CP2=0;
160 1 MT8880_CS=1;
161 1
162 1 MT8880_RW=0; //写控制寄存器
163 1 MT8880_RS0=1;
164 1 MT8880_D0=0;
165 1 MT8880_D1=0;
166 1 MT8880_D2=0;
167 1 MT8880_D3=0;
168 1 MT8880_CS=0;
169 1 MT8880_CP2=1; //给时钟信号,写D0-D3口值到控制寄存器
170 1 MT8880_CP2=0;
171 1 MT8880_CS=1;
172 1
173 1 MT8880_D0=1; //总线复位
174 1 MT8880_D1=1;
175 1 MT8880_D2=1;
C51 COMPILER V6.10 366C 03/06/2006 15:21:19 PAGE 4
176 1 MT8880_D3=1;
177 1 }
178
179 void MT8880_WriteOne(unsigned char SendData) //使用入口参数,即要发送的数
180 {
181 1 MT8880_CS=1;
182 1 MT8880_CP2=0;
183 1 MT8880_RW=0; //写传输数据寄存器
184 1 MT8880_RS0=0;
185 1
186 1 switch(SendData)
187 1 {
188 2 case 10: MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break;
189 2 case 1: MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=0;break;
190 2 case 2: MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
191 2 case 3: MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
192 2 case 4: MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
193 2 case 5: MT8880_D0=1; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
194 2 case 6: MT8880_D0=0; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
195 2 case 7: MT8880_D0=1; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
196 2 case 8: MT8880_D0=0; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
197 2 case 9: MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
198 2 case 11: MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break; // *
199 2 case 12: MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=1;break; // #
200 2 }
201 1 MT8880_CS=0; //给时钟信号,写D0-D3口值到控制寄存器
202 1 MT8880_CP2=1;
203 1
204 1 MT8880_CP2=0;
205 1 MT8880_CS=1;
206 1
207 1 MT8880_D0=1; //写操作完后一定要总线复位
208 1 MT8880_D1=1;
209 1 MT8880_D2=1;
210 1 MT8880_D3=1;
211 1 }
212
213 //------------------------------处理在一次下位机发送报警信息来过程中的读取 ,存储-------------------------
----------//
214
215 void READ_MESSAGE()
216 {
217 1 unsigned char Number_Note=1; //记录是第几个“下位机输入信号”
218 1 unsigned char Number_Key; //存储“电话机输入键值”的中间变量
219 1 Number NUMBER; //生成记录一次摘机过程的数组
220 1 JISHU=25000; //配合晶振,等待4秒
221 1
222 1 ReadStatus: MT8880_StatusRegister_READ();
223 1
224 1 if(MT8880_D2==1) //是否有键值生成
225 1 {
226 2 MT8880_CP2=0; //停动8880总线
227 2 MT8880_CS=1; //停动8880总线
228 2 MT8880_DataRegister_READ(); //读入的一个值出现在MT8880_D0-D3
229 2
230 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“1”
231 2 {Number_Key=1; }
232 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“2”
233 2 {Number_Key=2; }
234 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“3”
235 2 {Number_Key=3; }
236 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“4”
C51 COMPILER V6.10 366C 03/06/2006 15:21:19 PAGE 5
237 2 {Number_Key=4; }
238 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1) //输入“5”
239 2 {Number_Key=5; }
240 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0) //输入“6”
241 2 {Number_Key=6; }
242 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1) //输入“7”
243 2 {Number_Key=7;}
244 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0) //输入“8”
245 2 {Number_Key=8;}
246 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“9”
247 2 {Number_Key=9; }
248 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“0”
249 2 {Number_Key=0; }
250 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“*”
251 2 {Number_Key=11;}
252 2 if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“#”
253 2 {Number_Key=12;}
254 2
255 2 MT8880_CP2=0; //停动8880总线
256 2 MT8880_CS=1; //停动8880总线
257 2
258 2 if(Number_Note>=7) // 已经处理了6次数据
259 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -