📄 rscomm.lst
字号:
C51 COMPILER V7.50 RSCOMM 04/13/2007 13:24:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RSCOMM
OBJECT MODULE PLACED IN rscomm.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE rscomm.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <Reg931.h>
2 #include <Rscomm.h>
3 #include <Meter_def.h>
4 #include <General.h>
5 #include <Math.h>
6
7 #ifdef uchar
8 #define READYDEF 1 //宏uchar已定义
9 #else
#define uchar unsigned char
#endif
12
13
14
15 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
16 // 变量定义
17 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
18 // MeterFlag
19 extern uchar bdata MeterFlag;
20 extern bit Battery;
21 extern bit Hardware;
22 extern bit RsComm;
23 extern bit AdjTime;
24 extern bit EryRev;
25 extern bit AdjDate;
26 extern bit Fee0;
27 extern bit Fee1;
28 //Flag
29 extern uchar bdata Flag;
30 extern bit TimeAdj;
31 extern bit TimeProg ;
32 extern bit RxdFlag;
33 extern bit TxdFlag;
34 extern bit TxdWork;
35 extern bit DspType;
36 extern bit DspPage;
37 extern bit DspFlag;
38
39 //SystemStates
40 extern uchar bdata SystemStates;
41 extern bit Comm_RTC_Err;
42 extern bit Comm_EPM_Err;
43 extern bit Data_RTC_Err;
44 extern bit Data_EPM_Err;
45 extern bit EryBln_Flag;
46 extern bit Prog_Flag;
47 extern bit Fee_Flag;
48 extern bit CommFlag;
49
50 extern uchar DspSec;
51 extern uchar DspPtr;
52 extern uchar ComPtr;
53 extern uchar CommTimer;
54 extern uchar CommSec;
55
C51 COMPILER V7.50 RSCOMM 04/13/2007 13:24:53 PAGE 2
56 extern uchar Len[2];
57 extern uchar Addr[2];
58 extern uchar DspPara[4];
59 extern uchar PulseTmp[6];
60 extern uchar EryTmp[6];
61 extern uchar Ptr[8];
62 extern uchar RTC[8];
63 extern uchar idata ComBuf[RS_MaxSize];
64
65
66
67
68 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
69 // 函数定义
70 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
71 void Comm_Proc(void);
72 void ReadMeter(void);
73 void WriteMeter(void);
74
75 void Proc33(uchar procdata);
76 void ReadMeterData(uchar addr,uchar saddr,uchar DataLen);
77
78 bit TimeTerm(void);
79
80 uchar RxdCheck(void);
81 uchar PsWdCHK(uchar PsWdPtr);
82
83
84 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
85 // 函数外部引用
86 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
87 extern void RTC_Read(void);
88 //extern void Fee_CHK(void);
89 extern void WriteEPMData(uchar idata *ptr);
90 extern void RTC_Init(void);
91 extern void RTC_Set(uchar staddr,uchar idata *ptr,uchar len);
92 extern void ErrorModify(uchar addr,uchar idata *ptr);
93
94 extern bit DateTerm(void);
95 extern bit DateCHK(uchar idata *ptr);
96 extern bit TimeCHK(uchar idata *ptr);
97 extern bit ReadData(uchar idata *ptr);
98
99 extern uchar LastMonthSN(uchar sn);
100
101
102
103 //**********************************************************
104 //名称:Comm_Proc()
105 //功能:
106 //说明:通讯处理函数
107 //**********************************************************
108 void Comm_Proc(void)
109 {
110 1 uchar i;
111 1 uchar j;
112 1 uchar TFlag;
113 1
114 1 if( RxdFlag==1 )
115 1 {
116 2 Watchdog_feed(); //喂狗
117 2
C51 COMPILER V7.50 RSCOMM 04/13/2007 13:24:53 PAGE 3
118 2 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
119 2 //信道配置
120 2 HW38K = 1;
121 2
122 2 CTRL485 = 1; //打开默认:红外调制
123 2 TR1 = 1;
124 2
125 2 if(COMMSEL==1) //RS485发送配置
126 2 {
127 3 CTRL485 = 0;
128 3 TR1 = 0;
129 3 }
130 2 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
131 2
132 2 Flag &= 0xE0;
133 2 //TimeAdj = 0; //校时时间
134 2 //TimeProg = 0; //编程时间
135 2 //RxdFlag = 0; //接收状态
136 2 //TxdFlag = 0; //通信应答
137 2 //TxdWork = 0; //发送状态
138 2
139 2 TFlag = RxdCheck(); //通讯帧格式及通讯地址检查
140 2
141 2 if( TFlag!=0x00 )
142 2 {
143 3 Proc33(0xCD); //数据去0x33处理
144 3
145 3 if(TFlag==0x10) //广播校时,无应答
146 3 {
147 4 if((TimeCHK(&ComBuf[RS_CmdPtr]+0)==1)&&(DateCHK(&ComBuf[RS_CmdPtr+3])==1))
148 4 {
149 5 ComBuf[RS_CmdPtr+6] = ComBuf[RS_CmdPtr+0];
150 5 ComBuf[RS_CmdPtr+7] = ComBuf[RS_CmdPtr+1];
151 5 ComBuf[RS_CmdPtr+8] = ComBuf[RS_CmdPtr+2];
152 5
153 5 if(Prog_Flag==1||((ComBuf[RS_CmdPtr+3]==Day)&&(ComBuf[RS_CmdPtr+4]==Month)&&(ComBuf[RS_CmdPtr+5]==Yea
-r)&&(TimeTerm()==1)))
154 5 {
155 6 //RTC_Init();
156 6 RTC_Set(0x00,&ComBuf[RS_CmdPtr+0],0x03); //秒、分、时
157 6 RTC_Set(0x40,&ComBuf[RS_CmdPtr+3],0x03); //日、月、年
158 6
159 6 CommSec = CommLEDTime; //亮10秒
160 6 LED_COMM = 0;
161 6
162 6 Flag |= 0x03;
163 6 //TimeAdj = 1; //校时标志
164 6 //TimeProg = 1; //编程标志
165 6 Fee_Flag = 1; //时段费率判断
166 6
167 6 //*******
168 6 EryBln_Flag = 1; //电量结算
169 6 }
170 5 }
171 4 }
172 3
173 3
174 3 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※
175 3 else if( TFlag==0x11 ) //广播设置电表表号
176 3 {
177 4 for(i=0;i<6;i++)ComBuf[1+i] = ComBuf[RS_CmdPtr+i]; //表号数据返回
178 4
C51 COMPILER V7.50 RSCOMM 04/13/2007 13:24:53 PAGE 4
179 4 ComBuf[RS_CmdPtr+6] = SumCHK(&ComBuf[RS_CmdPtr],6); //表号检验和
180 4
181 4 Addr[0] = 0xA0;
182 4 Addr[1] = 0xF0; //写局编号
183 4 //Addr[1] = 0xF8; //写出厂编号
184 4 Len[1] = 0x07;
185 4 WriteEPMData(&ComBuf[RS_CmdPtr]);
186 4
187 4 RS_Len = 0x00;
188 4
189 4 Flag |= 0x0A;
190 4 //TimeProg = 1;
191 4 //TxdFlag = 1;
192 4 }
193 3
194 3 /*
195 3 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※
196 3 else if( TFlag==0x12) //自定义命令集
197 3 {
198 3 if( RS_CmdH==0x00 && RS_CmdL==0x00) //数据清零命令
199 3 {
200 3 LED_F = 0;
201 3 LED_G = 0;
202 3 LED_COMM = 0;
203 3 CommSec = CommLEDTime; //亮10秒
204 3
205 3 EA = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -