📄 serial1.lst
字号:
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL1
OBJECT MODULE PLACED IN .\out\Serial1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial1.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\K
-eil\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\Serial1.obj)
line level source
1
2 //*************************************************************************
3 #include "all.h"
4
5 void Open_URRA_1(void);
6
7
8
9 uchar xdata DiZh_Rx_Buff[DiZh_BUFF_MAX]; //地震
10 uchar xdata DiZh_Tx_Buff[DiZh_BUFF_MAX];
11
12 uchar xdata KEY_RX_Buff[KEY_BUFF_MAX]; //屏
13 uchar xdata KEY_TX_Buff[KEY_BUFF_MAX];
14
15 uchar xdata F76_RX_Buff[F76_BUFF_MAX]; //床体
16 uchar xdata F76_TX_Buff[F76_BUFF_MAX];
17
18 bit XinKey_Sound_b=0; //用于发声音
19 bit Xin_KeyJTX_RX_B=0; //甲天行来的标志位
20 bit XinKey_b=0; //手柄来的键值标志
21 uchar xdata XinKey_Value, itask; //手柄来的键值
22
23 bit Dis_All_Key_B=0; //不检测按键标志位 1:不检测 0:检测
24
25 void Fa_F76_buffer_0xee0xee(uchar Fun,uchar *Poit,uint Lenthg) reentrant ;
26
27
28 bit bUartBusy; //上位机串口发送状态标志,"1"表示上位机串口"忙"(正发送数据
29 //到子串口,新数据只需送入子串口发送缓冲区即可,"0"表示上位
30 //机串口"空闲",需用户程序将"TI=1"来启动子串口数据发送
31
32 bit bInstructFlag; //上位机发送指令请求标志,上位机需要发送指令时必须
33 //先将待发发送指令放到"InstructBuf",之后将该
34 //标志设置为"1"即可.标志变为"0"后可继续发送指令
35
36 bit KEY_TX_is_over_Start_cnt_B=0; // 帧间隔计时位
37 // //发送数据时要先检测此位为0才能发送数据
38
39 uchar KEY_TX_is_over_Start_cnt=0; // 帧间隔计时计数器
40
41
42 uchar xdata UartPointer; //子串口发送数据指针,中断服务程序通过该指针轮询
43 //发送数据到各子串口,保证各子串口的数据不丢失
44
45 uchar xdata InstructBuf; //指令缓冲(用户可将设置SP2328/SP2338的指令放入
46 //该寄存器,由驱动程序自动完成指令发送)
47
48
49
50 uchar MY_P4L;
51
52
53
54
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 2
55 uchar xdata Uart0RBuf,Uart1RBuf,Uart2RBuf; //接收子串口数据缓
56
57
58 unsigned char xdata F76_RX_Sta=0;
59 unsigned char xdata F76_RX_cnt=0;
60 unsigned char F76_Es_jie_cnt;
61 bit Xin_F76_RX_B=0;
62
63
64
65 unsigned char xdata KEY_RX_Sta=0;
66 unsigned int xdata KEY_RX_cnt=0;
67 unsigned char KEY_Es_jie_cnt;
68 bit Xin_KEY_RX_B=0;
69
70
71 unsigned char xdata DiZh_RX_Sta=0;
72 unsigned int xdata DiZh_RX_cnt=0;
73 unsigned char DiZh_Es_jie_cnt;
74 bit Xin_DiZh_RX_B=0;
75
76
77
78 uint xdata DiZh_TX_Len; //发送长度
79 uint xdata DiZh_TX_cnt=0; //发送计数器
80 bit DiZh_TX_is_over_B=1; //所完标志位
81 // GPRS_TX_is_over_B=0表示串口忙被 占用,
82 //谁得到 GPRS_TX_is_over_B=1谁就得到串口生理权
83
84 uint xdata KEY_TX_Len; //发送长度
85 uint xdata KEY_TX_cnt=0; //发送计数器
86 bit KEY_TX_is_over_B=1; //所完标志位
87 // KEY_TX_is_over_B=0表示串口忙被 占用,
88 //谁得到 KEY_TX_is_over_B=1谁就得到串口生理权
89
90 bit KEY_TX_Right_B=1; //key发送权标志
91
92
93 uint xdata F76_TX_Len; //发送长度
94 uint xdata F76_TX_cnt=0; //发送计数器
95 bit F76_TX_is_over_B=1; //所完标志位
96 // F76_TX_is_over_B=0表示串口忙被 占用,
97 //谁得到 F76_TX_is_over_B=1谁就得到串口生理权
98
99
100 //void Fa_F76_buffer(uint Lenthg);
101 //void Fa_Key_buffer(uint Lenthg);
102 //void Fa_DiZh_buffer(uint Lenthg);
103
104
105
106 /*****************************************************************************
107 功能:设定SP2328/SP2338输入、输出地址,可根据实际电路修改
108 *****************************************************************************/
109 //sbit AdrIn0 =P1^0; /* 连接到SP2328/SP2338的PIN0 (ADRO0)*/
110 //sbit AdrIn1 =P1^1; /* 连接到SP2328/SP2338的PIN1 (ADRO1)*/
111 //sbit AdrOut0=P1^2; /* 连接到SP2328/SP2338的PIN18(ADRI0)*/
112 //sbit AdrOut1=P1^3; /* 连接到SP2328/SP2338的PIN17(ADRI1)*/
113
114
115 void Fa_F76_buffer(uchar Fun,uchar *Poit,uint Lenthg) reentrant ;
116
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 3
117
118
119 void UART_1_ISR () interrupt 20 {
120 1
121 1
122 1 if (SCON1&0x01) //if (_testbit_(RI_1))
123 1 {
124 2
125 2 //RI=0; //准备解析刚接收到的数据来自于哪个子串口
126 2 if(AdrIn1)
127 2 { //子串口2接收到一个字节
128 3 //子串口2 来键盘的数据
129 3 Uart2RBuf=SBUF1; //缓存子串口2收到的数据,以便接收后续数据
130 3
131 3
132 3 switch(KEY_RX_Sta) {
133 4 case 0:
134 4 if(Uart2RBuf==0xee)
135 4 KEY_RX_Sta=1;
136 4
137 4 break;
138 4 case 1:
139 4 if(Uart2RBuf!=0xee) {
140 5 KEY_Es_jie_cnt=10; //时限计时值 500ms in : TIME_LIMITED (void) _task_ TIMELIMITED
141 5 KEY_RX_Sta=2;
142 5 KEY_RX_Buff[0]=Uart2RBuf;
143 5 KEY_RX_cnt=1;
144 5 }
145 4
146 4 break;
147 4 case 2:
148 4 KEY_RX_Buff[KEY_RX_cnt++]=Uart2RBuf;
149 4 if( KEY_RX_cnt>=KEY_BUFF_MAX) {
150 5 KEY_RX_Sta=0;
151 5
152 5 }
153 4 if(Dis_All_Key_B==1) //不检测按键标志位 1:不检测 0:检测==1)
154 4 break;
155 4 if(Uart2RBuf==0xab) { // over byte flag
156 5
157 5 Xin_KEY_RX_B=1;
158 5 XinKey_b=1; //手柄来的键值标志
159 5
160 5
161 5
162 5 //XinKey_Value=KEY_RX_Buff[2]; //手柄来的键值
163 5 KEY_RX_Sta=0;
164 5
165 5 //========以下是优先电话功能==只允许挂机和接听键有效================
166 5
167 5
168 5
169 5 ima_cnt=0; //键盘拔号复0 计数器,超过16秒没人按键则复位为 ima=3;
170 5 }
171 4
172 4 break;
173 4
174 4 default:
175 4 KEY_RX_Sta=0;
176 4
177 4 break;
178 4
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 4
179 4 }
180 3
181 3 //Out55:;
182 3
183 3 }
184 2 else if(AdrIn0)
185 2 { //子串口1接收到一个字节
186 3 //子串口1 来自报警板的数据
187 3 Uart1RBuf=SBUF1; //缓存子串口1收到的数据,以便接收后续数据
188 3 F76_RX_Buff[F76_RX_cnt++]=Uart1RBuf;
189 3 F76_Es_jie_cnt=16; //80ms 时限到认为接收结束in:
190 3 if(F76_RX_cnt>=F76_BUFF_MAX)
191 3 F76_RX_cnt=0;
192 3
193 3
194 3 /*
195 3 switch(F76_RX_Sta) {
196 3 case 0:
197 3 if(Uart1RBuf==0xee)
198 3 F76_RX_Sta=1;
199 3
200 3
201 3 break;
202 3 case 1:
203 3 if(Uart1RBuf!=0xee) {
204 3 F76_Es_jie_cnt=10; //时限计时值 500ms in : TIME_LIMITED (void) _task_ TIMELIMITED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -