⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contact.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -