?? 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 + -