📄 amr_cctr.lst
字号:
C51 COMPILER V8.01 AMR_CCTR 12/22/2005 17:03:08 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE AMR_CCTR
OBJECT MODULE PLACED IN amr_cctr.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE amr_cctr.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND P
-REPRINT
line level source
1 /*=============================================================================*/
2 // amr_cctr.c - source file for lme2200 API
3 //
4 // Copyright 2005, Leaguer MicroElectronics Co., Ltd
5 // www.leaguerme.com
6 /*=============================================================================*/
7
8 #include <REG922.H>
9
10 #include "sart.h"
11 #include "plc.h"
12 #include "string.h"
13 #include "amr_cctr.h"
14 #include "amr_config.h"
15 #include "wr_flash.h"
16 #include "pc_com.h"
17 #include "timer.h"
18 #define uint unsigned int
19 #define uchar unsigned char
20
21
22 extern idata uchar amr_frame[]; // AMR frame buffer
23 extern idata uchar plc_frame[18];
24 extern uchar code return_frame[] = {0xfe,0xfe,0xfe,0xfe,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x01,0x02,
-0x43,0xc3,0xd9,0x16}; //18bybe;
25 extern code uchar METER_ADDR[6];
26 extern bit NO_METER;
27
28 /*=============================================================================*/
29
30 void amr_init()
31 {
32 1 test_meter();
33 1 }
34
35 /*=============================================================================*/
36
37 // Check the checksum of the frame
38 uchar amr_check_cs(uchar frame[],bit Q)
39 {
40 1 uchar i;
41 1 uchar len;
42 1 uchar cs = 0xd0; ///2 * 68
43 1
44 1 if(Q) len = frame[1] + 2; //*<---1*
45 1 else len = frame[AMR_OS_L] + 8; //*<---7*
46 1
47 1
48 1 for(i = 0; i < len; i++)
49 1 cs += frame[i];
50 1
51 1 return cs;//(cs == frame[i]);
52 1 }
53 /*=============================================================================*/
C51 COMPILER V8.01 AMR_CCTR 12/22/2005 17:03:08 PAGE 2
54
55
56 uchar amr_calcu_cs(uchar frame[], uint len,uchar i)
57 {
58 1 uchar cs;
59 1 uchar j;
60 1 cs = 0;
61 1 for (j = i; j < len; j++)
62 1 cs += frame[j];
63 1
64 1 return cs;
65 1 }
66
67 /*=============================================================================*/
68 /* 数据发送到PC */
69 /*=============================================================================*/
70
71 void amr_send_frame(uchar addr[6], uchar buf[])
72 {
73 1 idata uchar frame[23];
74 1 uchar i;
75 1 uchar En;
76 1
77 1 En = buf[AMR_OS_L] +2;
78 1 for (i = 0; i < En+1; i++)
79 1 frame[i] = buf[6 + i];//从C开始存放
80 1 // preamble
81 1 for (i = 0; i < 4; i++) amr_frame[i] = AMR_PREAMBLE; //放入0xFE
82 1
83 1 // address
84 1 amr_frame[4] = AMR_FRAMESYNC; //0x68
85 1 clr_wdt();
86 1 for (i = 5; i < 11; i++) amr_frame[i] = addr[i-5]; //6位地址
87 1
88 1 amr_frame[11] = AMR_FRAMESYNC;
89 1
90 1 // C, L and data including CS
91 1 for (i = 0; i < En+1; i++) amr_frame[12+i] = frame[i];
92 1
93 1 amr_frame[13 + En] = 0x16; //多补16h
94 1
95 1 uart_sendblock(amr_frame, 14 + En); //串口送至表
96 1 clr_wdt();
97 1 }
98
99 /*=============================================================================*/
100 void test_meter()
101 {
102 1 uchar chr = 0;
103 1 uint i,cone;
104 1 for(i = 0; i < 18; i++)
105 1 plc_frame[i] = return_frame[i];
106 1
107 1 for(i = 0;i < 6;i ++)
108 1 plc_frame[5+i] = METER_ADDR[i];
109 1
110 1 plc_frame[16] = 0x00;
111 1 plc_frame[16] = amr_calcu_cs(plc_frame, 16,4); //校验和
112 1
113 1 uart_sendblock(plc_frame, 18);
114 1
115 1 while(1){//
C51 COMPILER V8.01 AMR_CCTR 12/22/2005 17:03:08 PAGE 3
116 2 if(uart_recved()) { // AMR frame recved from meter
117 3 if (recv_amr_frame()) {
118 4 for(i = 0; i < 14; i++)chr += amr_frame[i];
119 4 chr += 0xd0;
120 4 if( amr_frame[14] == chr){
121 5 NO_METER = 1;//有表
122 5 }
123 4 }
124 3 }
125 2 if(cone++ > 25000)return;//已定好时间
126 2 }
127 1
128 1 }
129
130 /*=============================================================================*/
131
132 /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
133 软件修改说明在main.c,敬请留意
134
135 !!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
136 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
137
138 /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
139
140
141
142
143
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 485 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- 23
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 + -