📄 serial.lst
字号:
C51 COMPILER V7.50 SERIAL 06/10/2007 23:11:21 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\out\Serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\Ke
-il\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\Serial.obj)
line level source
1 #include "all.h"
2
3 //串口0 中断服务程序,仅需做简单调用即可完成串口输入输出的处理
4 //出入均设有缓冲区,大小可任意设置。
5 //*************************************************************************
6
7
8
9 #define BAUDRATE0 4800 // 用户定义的UART0 波特率
10
11 uchar *Poiter_GPRS_TX;
12 uchar xdata GPRS_RX_Buff[GPRS_RX_Buff_MAX];
13 uchar xdata GPRS_TX_Buff[GPRS_RX_Buff_MAX];
14 uint xdata GPRS_TX_cnt=0;
15 //uchar *Poiter_GPRS_TX=GPRS_RX_Buff;
16 uint xdata GPRS_TX_Len;
17
18
19 bit GPRS_TX_is_over_B=1; //所完标志位
20 // GPRS_TX_is_over_B=0表示串口忙被 占用,
21 //谁得到 GPRS_TX_is_over_B=1谁就得到串口生理权
22
23 xdata uchar GPRS_Xin_485_b_FLAG=0; //GPRS 标志寄存器
24
25
26
27
28 xdata uchar GPRS_Es_jie_cnt; //时限计时值
29
30
31 xdata uchar GPRS_Es_jie_cnt; //时限计时值
32 xdata uint Gprs_i_485;
33 xdata uchar Tem_sbuf;
34
35
36 uchar DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg,uchar *Re_Poit) r
-eentrant ;
37 //void Get_Fa_Gprs_buffer_Right( );
38
39
40
41
42
43
44
45
46 void Open_URRA_0(void)
47 {
48 1 PCON |= 0x80; // SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
49 1 TMOD = 0x20; // Configure Timer 1 for use by UART0
50 1 CKCON |= 0x10; // Timer 1 derived from SYSCLK
51 1
52 1 RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
53 1 RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
C51 COMPILER V7.50 SERIAL 06/10/2007 23:11:21 PAGE 2
54 1 TH2=RCAP2H;TL2=RCAP2L;
55 1 CT2=0; //T2:timer mode
56 1 TR2=1;
57 1 TCLK0=1;
58 1 RCLK0=1; //说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
59 1 // SIO1只能用T1作为波特率发生器
60 1 //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
61 1
62 1 RI0=0; // Clear HW_UART receive and transmit
63 1 TI0=0; // complete indicators.
64 1 SCON0 = 0x50; // Configure UART0 for mode 1, receiver enabled.
65 1 ES0=1; // allow the serial interrupt
66 1
67 1 }
68
69
70
71
72
73
74
75
76
77 /**********************************************************************
78 **函数原型: void DiJi_ZhengJuan()
79 **入口参数:
80 **出口参数: 无
81 **返 回 值: 无
82 **说 明: uart0 中断 用于GPRS
83 ************************************************************************/
84 void URRA_0_ISR(void) interrupt 4 using 3 {
85 1
86 1
87 1 if (_testbit_(RI0))
88 1 {
89 2 RI0=0;
90 2 //if(GPRS_Xin_485_b_FLAG==0) { //数据未处理就是来新数据也不能接收
91 2 if(Gprs_i_485>=GPRS_RX_Buff_MAX) //防止超出数组范围
92 2 Gprs_i_485=0;
93 2 GPRS_Es_jie_cnt=20; //时限计时值 100ms
94 2 GPRS_RX_Buff[Gprs_i_485++]=SBUF0;
95 2 //}
96 2 }
97 1 if (_testbit_(TI0))
98 1 {
99 2 TI0=0; //发送中断 发送入口,TX_Len:所发送的字节数
100 2 // TX_Buff[]: 发送缓冲区
101 2 if(GPRS_TX_Len>=GPRS_RX_Buff_MAX)
102 2 GPRS_TX_Len=GPRS_RX_Buff_MAX;
103 2 if(GPRS_TX_Len!=0) {
104 3 // GPRS_TX_is_over_B=0;
105 3 Tem_sbuf=GPRS_TX_Buff[1+GPRS_TX_cnt++];
106 3 SBUF0=Tem_sbuf;
107 3 }
108 2 else {
109 3 GPRS_TX_cnt=0;
110 3 // GPRS_TX_is_over_B=1; //所完标志位
111 3 }
112 2 GPRS_TX_Len--;
113 2 }
114 1 }
115
C51 COMPILER V7.50 SERIAL 06/10/2007 23:11:21 PAGE 3
116 //==========================================================
117 //================以上是串口中断,用于接收GPRS
118
119
120 //等待得到控制权
121 //等待得到控制权
122 //只有得到权限才能更新缓冲区数据
123 /*
124 void Get_Fa_Gprs_buffer_Right( )
125 { xdata uchar ttt=0;
126
127 while(GPRS_TX_is_over_B==0) { //TX所完标志位,没发完再发时要等待
128 os_wait2(K_TMO, 50); //100ms
129 if(ttt++>100) //延时5秒 到也认为发送有空
130 break;
131 }
132 GPRS_TX_is_over_B=0; //抢到标志,处暑、延时100MS再发, 串间隔
133 os_wait2(K_TMO, 50); //100ms
134
135 }
136 //==============================w2812837@163.com=================================================
137 */
138
139
140
141 /**********************************************************************
142 **函数原型: void Fa_Gprs_buffer(uint Lenthg)
143 **入口参数: 无
144 **出口参数: 无
145 **返 回 值: 无
146 **说 明: 将GPRS_TX_Buff[]发送子程序。
147 // 发送入口,TX_Len:所发送的字节数
148 // GPRS_TX_Buff[]: 发送缓冲区
149 // TxIe=1;
150 // GPRS_TX_cnt=0; 100MS 串间隔
151 ************************************************************************/
152
153 /*
154 void Fa_Gprs_buffer(uint Lenthg)
155 {
156
157 // En_FA_485;
158 GPRS_TX_Len=Lenthg-1; //TX_LEN发送前置好数值
159 GPRS_TX_cnt=0;
160 SBUF0=GPRS_TX_Buff[0];
161 }
162 //==============================w2812837@163.com=================================================
163
164 */
165
166
167
168
169
170 /**********************************************************************
171 **函数原型: void Fa_Gprs_buffer(uint Lenthg)
172 **入口参数: 无
173 **出口参数: 无
174 **返 回 值: 无
175 **说 明: 先取得控制权,然后
176 、、将指针指向的数组发给GPRS_TX_Buff[] 发送子程序。
177 // 发送入口,TX_Len:所发送的字节数
C51 COMPILER V7.50 SERIAL 06/10/2007 23:11:21 PAGE 4
178 // GPRS_TX_Buff[]: 发送缓冲区
179 // TxIe=1;
180 // GPRS_TX_cnt=0; 100MS 串间隔
181 ************************************************************************/
182 /*
183 void Fa_Gprs_Other2buffer(char *Poiter,uint Lenthg)
184 {
185 uchar i;
186
187 Get_Fa_Gprs_buffer_Right( );
188 Clr_GPRS_RX_Buff();
189 GPRS_Xin_485_b_FLAG=GPRS_Xin_485_b_FLAG&(~XIN_GSM_R_B); //clr bit
190
191 for(i=0;i<Lenthg;i++)
192 GPRS_TX_Buff[i]=*Poiter++;
193
194 // En_FA_485;
195 GPRS_TX_Len=Lenthg-1; //TX_LEN发送前置好数值
196 GPRS_TX_cnt=0;
197 SBUF0=GPRS_TX_Buff[0];
198 }
199 //==============================w2812837@163.com=================================================
200
201 */
202
203
204
205
206
207
208
209 //清接收区为0
210 void Clr_GPRS_RX_Buff() reentrant {
211 1 uint i;
212 1
213 1 for (i=0;i<GPRS_RX_Buff_MAX;i++)
214 1 GPRS_RX_Buff[i]=0;
215 1
216 1 }
217
218
219 /**********************************************************************
220 **函数原型: void DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg)
221 **入口参数: ttt X 2ms = 时限 char *pppp 为要找的字符串
222 **出口参数: 无
223 **返 回 值: 整个包的长度
224 **说 明: 发GPRS数据
225 ************************************************************************/
226 uchar DABAO_EEEE_GPRA_buffer(uchar qian1,uchar qian2,uchar Fun,uchar *Poit,uint Lenthg,uchar *Re_Poit) r
-eentrant
227 {
228 1 uchar i,j;
229 1
230 1
231 1 Gprs_i_485=0; //接收数组下标复位;
232 1
233 1 Re_Poit[0]=qian1;
234 1 Re_Poit[1]=qian2;
235 1 Re_Poit[2]=Fun ;
236 1 Re_Poit[3]=Lenthg;
237 1 for(i=0;i<Lenthg;i++) {
238 2 Re_Poit[4+i]=*Poit++;
C51 COMPILER V7.50 SERIAL 06/10/2007 23:11:21 PAGE 5
239 2 }
240 1 Re_Poit[4+i]=0;
241 1 j=0;
242 1 for(j=0;j<(Lenthg+2);j++)
243 1 Re_Poit[4+i]+= Re_Poit[j+2];
244 1 Re_Poit[4+i+1]=0xab;
245 1 Re_Poit[4+i+2]=0x1A; // ctr+z
246 1 Re_Poit[4+i+3]=0; // '0'
247 1
248 1
249 1
250 1 //GPRS_TX_Len=Lenthg+6+1; //TX_LEN发送前置好数值
251 1 return(Lenthg+6+1);
252 1 //Fa_F76_buffer(uchar Fun, uchar * Poit, uint Lenthg)
253 1
254 1 }
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 694 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 732 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -