📄 3201.lst
字号:
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 3201
OBJECT MODULE PLACED IN 3201.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 3201.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2
3 #include "PL3200.h"
4 #define LIMIT_3105 0x30 // lxw载波序列捕获门限
5 #define LIMIT_3200 0x70 // lxw载波序列捕获门限
6
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 //I/O 口设置
11 sbit RS_TLED = P0^3; // 串口发送指示灯D3
12 sbit RS_RLED = P0^4; // 串口接收指示灯D4
13 sbit PLC_TLED = P0^5; // 载波发送指示灯D5
14 sbit PLC_RLED = P1^2; // 载波接收指示灯D6
15
16 sbit FUNC_LED = P0^2; // 载波通讯方式,亮:3200模式;灭:3105模式D2
17
18 sbit function = P1^3; // 载波通讯方式,0:3200模式;1:3105模式D12
19
20 sbit PSK_OUT = P3^7; //
21 sbit Rxd_p30 = P3^0; //
22 sbit Txd_p31 = P3^1; //
23
24 // 全局变量设置
25 uchar data function_now; // 当前的通讯方式,0:3200方式。0xff:为3105模式
26 uchar data function_flage; // time = 6 sec
27
28 uchar data COM_recv_len; // 串口接收数据长度
29 uchar data COM_State; // the state of com receive
30 uchar data COM_recv_pointer; // 表示串口接收控制变量
31 uchar data COM_send_timer; // 延时时间变量
32
33 uchar data PLC_Rxd_pointer; // 载波接收过程中的字节数
34 uchar data PLC_Rxd_tlen; // PLC 接收total len
35 uchar bdata PLC_data; // 发送字节缓冲
36 uchar data PLC_send_pointer; // 载波发送字节计数
37 uchar data PLC_timer; // 载波发送延时计数器
38 uchar data PLC_total_len; // 载波发送字节长度+8
39 uchar data PLC_Rxd_timer; // 载波发送延时时间变量
40 uchar data PLC_Rxd_tdata; // PLC_recieve cusion
41
42 uchar data WDI; // 软狗变量
43
44 // 位变量
45 bit bdata PLC_Rxd_flag; // 载波有接收标志
46 bit bdata PLC_Rxd_state; // 载波接收控制变量
47 bit bdata PLC_Rxd_OK; // 载波接收完成标志
48 bit bdata PLC_sending; // 载波正在发送标志
49
50 uchar xdata PLC_recv_buf[250]; // 载波接收缓冲区
51 uchar xdata COM_recv_buf[250]; // 串口接收缓冲区
52
53 uchar xdata R_T_buf_bak[250]; // 通讯数据备份
54
55 /**************************************************************************************
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 2
56 *
57 * FUNCTION: timeint0
58 *
59 * DESCRIPTION: 定时器0中断程序;
60 * 50 ms 发生一次中断
61 * 对延时变量进行减1处理
62 *
63 * PARAMETERS: none
64 *
65 * RETURNED: none
66 *************************************************************************************/
67 void timeint0 ( void ) interrupt 1
68 {
69 1 if ( COM_send_timer!=0 )
70 1 {
71 2 COM_send_timer--; // 串口发送延时
72 2 }
73 1
74 1 if ( PLC_Rxd_timer>0 )
75 1 {
76 2 PLC_Rxd_timer--;
77 2 }
78 1 else
79 1 {
80 2 PLC_Rxd_timer=0;
81 2 PLC_RLED=1; // turn off the lamp of receiving
82 2 PLC_Rxd_state=0; // resume receive state
83 2 }
84 1
85 1 if ( PLC_timer>0 ) //增加载波发送延时控制lxw2006-3-2
86 1 PLC_timer--;
87 1
88 1 if ( function_flage ) function_flage--;
89 1 else
90 1 {
91 2 function_flage=10;
92 2 if ( function ) //载波方式管脚判断
93 2 function_now = function_now *2 + 1; //function_now=0xff为3105方式lxw2006-2-10
94 2 else
95 2 function_now = function_now *2; //function_now=0为3200方式lxw 2006-2-10
96 2 }
97 1
98 1 TH0=0x63; // 置定时器计数 50ms 中断一次 ( 12MHz )
99 1 TL0=0xcc;
100 1
101 1 if ( WDI == 0x9a )
102 1 {
103 2 WDT_RST=0xa1; // 清看门狗
104 2 WDI=0;
105 2 }
106 1 }
107 /**************************************************************************************
108 *
109 * FUNCTION: txdbyte
110 *
111 * DESCRIPTION: 一字节串口发送函数
112 *
113 * PARAMETERS:
114 * in: dachar——要发送的1字节数据
115 * out: none
116 *
117 *
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 3
118 * RETURNED: none
119 *
120 *************************************************************************************/
121 void txdbyte ( uchar dachar ) // 单片机串口发送
122 {
123 1 SBUF=dachar;
124 1 COM_send_timer=10; // 500毫秒钟发送不成功退出
125 1
126 1 while ( !TI )
127 1 {
128 2 if ( COM_send_timer == 0 )
129 2 break;
130 2 }
131 1 TI=0;
132 1 }
133 /**************************************************************************************
134 *
135 * FUNCTION: PLC_int
136 *
137 * DESCRIPTION: 载波中断收、发程序
138 *
139 * PARAMETERS:
140 *
141 * out: PLC_Rxd_OK=1 载波接收成功
142 * R_T_buf_bak[] 载波接收成功的数据
143 *
144 * RETURNED: none
145 *************************************************************************************/
146 void PLC_int ( void ) interrupt 7
147 {
148 1 uchar data i;
149 1 uchar data state; // 载波通讯状态
150 1 uchar data SSC_adr_bak;
151 1
152 1 SSC_adr_bak=SSC_ADR; //PRTECT
153 1 SSC_ADR=0x00; //选择载波状态寄存器
154 1
155 1 state= SSC_DAT;
156 1 // if ( ( state&0x80 ) == 0x0 )
157 1 // return;
158 1 if ( ( state&0x01 ) == 1 ) //载波发送状态
159 1 { // 载波发送
160 2 if ( ( PLC_send_pointer < PLC_total_len ) &&
161 2 ( PLC_send_pointer < 240 ) )
162 2 {
163 3 SSC_BUF=R_T_buf_bak[PLC_send_pointer]; //发送下一个字节
164 3 PLC_send_pointer+=1;
165 3 }
166 2 else
167 2 { //发送完成
168 3 PLC_sending=0; // 清正在发送标志
169 3 PLC_data=0;
170 3 PLC_TLED=1; // 发送指示灯灭
171 3 }
172 2 }
173 1 else
174 1 { // 载波接收
175 2 PLC_Rxd_timer=20; // 最大字节接收延时时间为1S
176 2 if ( ( state&0x04 ) == 0x04 ) //如果接收的是祯头标志
177 2 {
178 3 if ( PLC_Rxd_state == 0 ) //如果处于等待接收状态
179 3 {
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 4
180 4 PLC_Rxd_tdata=SSC_BUF; //接收第一个字节,并准备接收后面的字节
181 4 PLC_Rxd_tlen=PLC_Rxd_tdata;
182 4 PLC_recv_buf[0]=PLC_Rxd_tdata;
183 4 PLC_Rxd_pointer=1; //lxw2006-3-2 17:07
184 4 //PLC_Rxd_tlen =60;
185 4 PLC_Rxd_state=1;
186 4 PLC_RLED=0; //接收指示灯亮
187 4 }
188 3 else // translate to rec
189 3 {
190 4 PLC_Rxd_state=0;
191 4 SSC_ADR=0X0;
192 4 SSC_DAT=0X0;
193 4 }
194 3 }
195 2 else
196 2 {
197 3 if ( PLC_Rxd_state == 1 ) // 如果已经接收了祯头,继续接收后续字节
198 3 {
199 4 PLC_Rxd_tdata=SSC_BUF;
200 4 PLC_recv_buf[PLC_Rxd_pointer]=PLC_Rxd_tdata;
201 4
202 4 /* if ( PLC_Rxd_pointer == 0x04 ) // 接收到了载波字节个数
203 4 {
204 4 PLC_Rxd_tlen=PLC_Rxd_tdata+7; // 加7的意思是3个地址码+1个控制码+1个长度码+2个校验
-码
205 4 if ( PLC_Rxd_tlen>100 )
206 4 PLC_Rxd_tlen=100; // 接收字节长度限制
207 4 }*/
208 4
209 4 PLC_Rxd_pointer+=1;
210 4 if ( PLC_Rxd_pointer>PLC_Rxd_tlen )
211 4 {
212 5 PLC_Rxd_OK=1;
213 5 PLC_RLED=1; //接收完毕灯灭
214 5 PLC_Rxd_state=0;
215 5 for ( i=0 ; i< ( PLC_Rxd_tlen+1 ) ; i++ )
216 5 {
217 6 R_T_buf_bak[i]=PLC_recv_buf[i];
218 6 }
219 5 SSC_ADR=0X0; // translate to rec
220 5 SSC_DAT=0X0;
221 5 }
222 4 }
223 3 else // translate to rec
224 3 {
225 4 PLC_Rxd_state=0;
226 4 SSC_ADR=0X0;
227 4 SSC_DAT=0X0;
228 4 }
229 3 }
230 2 }
231 1 SSC_ADR=SSC_adr_bak;
232 1 }
233 /**************************************************************************************
234 *
235 * FUNCTION: set_PLC_3200
236 *
237 * DESCRIPTION: set the PLC function of pl3201
238 *
239 * PARAMETERS: none
240 *
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 5
241 * RETURNED: none
242 * EDITION: V1.0
243 *************************************************************************************/
244 void set_PLC_3200 ( )
245 {
246 1 SSC_ADR=0XFF; // 2005.11.29 LXW
247 1 SSC_DAT=0XFF; // 禁止写保护
248 1
249 1 SSC_ADR=0x03; // 选择3201载波通讯控制寄存器3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -