📄 contact.lst
字号:
120 void write_remote(unsigned char *a,unsigned char len){//向串口发送数据
121 1 unsigned char i;
122 1 for(i=0;i<len;i++){
123 2 dst_buf[dst_head]=*(a+i);
124 2 dst_head++;
125 2 dst_head%=DST_LEN;
126 2 }
127 1 if(TDBdata_over){
128 2 TI=1;
129 2 TDBdata_over=0;
130 2 }
131 1 }
132 /*存储串口传输的信息*/
133 void store_remote(struct NOTICE *info,unsigned char *notice,unsigned int *eep_add){
134 1 unsigned int eeprom_address;
135 1 unsigned char buf[32];
136 1 eeprom_address=*eep_add;
137 1 eeprom_address *=NOTICE_EEPCONTENT_LEN;
138 1 eeprom_address +=EERPOM_NOTICE_START;
139 1 info->len=notice[2]-8;
140 1 if(info->len>62){
141 2 //remote len >62 error
142 2 info->len=62;
143 2 }
144 1 buf[0]=info->len;
145 1 info->font=notice[5];
146 1 buf[1]=info->font;
147 1 if(buf[0]>30){//write 2 page data
148 2 memcpy(buf+2,notice+6,30);
149 2 AT24C64_wbytes((unsigned char *)&eeprom_address,32,buf);
150 2 memcpy(buf,notice+36,info->len-30);
151 2 memcpy(info->buf,notice+6,info->len);
152 2 eeprom_address +=32;
153 2 AT24C64_wbytes((unsigned char *)&eeprom_address,info->len-30,buf);//write another page .
154 2 }
155 1 else{
156 2 memcpy(buf+2,notice+6,info->len);
157 2 memcpy(info->buf,notice+6,info->len);
158 2 AT24C64_wbytes((unsigned char *)&eeprom_address,info->len+2,buf);
159 2 }
160 1 }
161 unsigned char notice[256];
162 unsigned char rnotlen;
163 bit read_remote(void){//读串口传输的数据
164 1 static unsigned char fsm_remote=0x00;
165 1 static unsigned char rcnt;
166 1 unsigned char temp;
167 1 unsigned int eeprom_address;
168 1 struct yushi rmcrc;
169 1 if(dsr_tail!=dsr_head){//接收串口数据缓冲区不为空
170 2 if(dsr_buf[dsr_tail]==REMOTE_HEAD){//是帧的帧头
171 3 notice[0]=REMOTE_HEAD;
172 3 fsm_remote=0x01;//下一个接收长度字节
173 3 rcnt=1;
174 3 }
175 2 else if(fsm_remote==0x01){//接收帧长字节
176 3 notice[1]=dsr_buf[dsr_tail];
177 3 rnotlen=dsr_buf[dsr_tail];//把接收的帧长度给rnotlen
C51 COMPILER V7.06 CONTACT 10/13/2006 09:21:08 PAGE 4
178 3 if(rnotlen>128){//统一定义长度小于128字节,如果大于128则表明上个接收的字节不是帧头
179 4 fsm_remote=0x00;//重新搜索帧头
180 4 }
181 3 else
182 3 fsm_remote=0x02;//接收帧数据
183 3 rcnt=2;
184 3 }
185 2 else if(fsm_remote==0x02){//接收帧内容
186 3 notice[rcnt]=dsr_buf[dsr_tail];
187 3 rcnt++;
188 3 if(rcnt>=rnotlen){//接收了rnotlen个字节,帧接收完毕
189 4 fsm_remote=0x00;//状态转到重新搜索帧头.
190 4 switch(notice[2]){
191 5 case 0x00://改变消息
192 5 eeprom_address=notice[4];
193 5 eeprom_address=0;//串口传输的信息从地址0开始
194 5 store_remote(show_notice.ognd+notice[4],notice,&eeprom_address);
195 5 break;
196 5 case 0x01://调整RTC的时间
197 5 temp=0;
198 5 if((notice[6]<100)&&(notice[7]<13)){
199 6 if((notice[8]<32)&&(notice[9]<24)){
200 7 if((notice[10]<60)&&(notice[11]<60)){
201 8 temp=1;
202 8 }
203 7 }
204 6 }
205 5 if(temp==1){
206 6 rtc.year=chtobcd(notice[6]);
207 6 rtc.month=chtobcd(notice[7]);
208 6 rtc.dayom=chtobcd(notice[8]);
209 6 rtc.hour=chtobcd(notice[9]);
210 6 rtc.minute=chtobcd(notice[10]);
211 6 rtc.second=chtobcd(notice[11]);
212 6 SD2000_set_time(&rtc);
213 6 }
214 5 else{
215 6 //Set time error
216 6 }
217 5 break;
218 5 }
219 4 write_remote(notice,8);
220 4 }
221 3 }
222 2 else{
223 3 fsm_remote=0x00;
224 3 }
225 2 dsr_tail++;
226 2 dsr_tail %=DSR_LEN;//把串口接收的数据减一
227 2 return 1;
228 2 }
229 1 else{
230 2 return 0;
231 2 }
232 1 }
*** WARNING C280 IN LINE 168 OF CONTACT.C: 'rmcrc': unreferenced local variable
233
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1717 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.06 CONTACT 10/13/2006 09:21:08 PAGE 5
XDATA SIZE = 259 208
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -