亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 16f877_modbus.c

?? ModBus通訊
?? C
?? 第 1 頁 / 共 5 頁
字號:
    TMR0IE=0;
    MainSendNoack=0;
    buffer.a=get_crc(n);
    data_buf[n+1]=buffer.b[1];
    data_buf[n]=buffer.b[0];
    TXREG=data_buf[0];
    TXIE=1;
    TXEN=1;
    while(send_ok!=0);
    while(TRMT==0);
    
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    
    TXEN=0;
    send_counter=1;
    /* swich to the receve mode*/
    RB0=0;
    RCIE=1;
    CREN=1;
    /* wait the slave equipment ack with 200mS */
    TMR0L=0;
    TMR0H=0;
    Delay200=0;
    TMR0ON=1;
    TMR0IF=0;
    TMR0IE=1;
}
/*******************************************************************************
* Function Name  : UsartReceveSlave
* Description    : UsartReceveSlave
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void UsartReceveSlave(void)
 {
    uint crc_buf;
    uchar i;
    if(rece_counter==0)return;
    rece_ok=1;
    if(rece_counter>5){
        RCIE=0;
        CREN=0;
        CREN=1;
        CREN=0;
        CREN=1;
        RCIE=1;
        rece_counter=0;
        BufferPointOut = Buffer;
        BufferPointIn = Buffer;
        return;
    }
    DataPoint=data_buf;
    for(i=0;i<8;i++){
      *DataPoint++=*BufferPointOut++;
       
      if(BufferPointOut==BufferPointIn){
        RCIE=0;
        CREN=0;
        CREN=1;
        CREN=0;
        CREN=1;
        RCIE=1;
        rece_counter=0;
        BufferPointOut = Buffer;
        BufferPointIn = Buffer;
        return;
      }
      
      if(BufferPointOut==(Buffer+159))BufferPointOut=Buffer;
    }

    rece_counter--;
    
    if(data_buf[1]==0x00){  
       rece_ok=0;
       return;
     }
     
     buffer.b[1]=data_buf[7];
     buffer.b[0]=data_buf[6];
     crc_buf=get_crc(0x06);

    if((buffer.a)!=crc_buf){ 
       rece_ok==0;
       data_buf[0]=0;
       data_buf[1]=0;
       CREN=1;
       RCIE=1;
       return;
     }
}

/*******************************************************************************
* Function Name  : interrupt isr
* Description    : interrupt isr
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void interrupt isr(void)
{
   char i;
   
   /* save the register */
   
   
   /* None */
   if(TMR1IF&&TMR1IE){
    TMR1IF=0;
    TMR1H=T1HValue;
    TMR1L=T1LValue;
    
    KeyScanTime++;
    if(KeyScanTime==100){
      KeyScanTime=0;
      KeyScanFlag=1;
      LcdFlag=1;
      Flag10ms=1;
    }
    return;
   } 
   /* None */ 
   if(RBIF&&RBIE){  
     i=PORTB; 
     RBIF=0;  
    // rbint();
    return;
   } 
    
    /* receve the message */   
    if(RCIF&&RCIE){
          *BufferPointIn=RCREG;
          BufferPointIn++;
          if(BufferPointIn==&Buffer[159]) BufferPointIn=Buffer;
          if(BufferPointIn==BufferPointOut) UsartInit();
          TMR3ON=1;
          TMR3L=T3LValue;
          TMR3H=T3HValue; 
       return;       
     }
   
    /* send the message */
    if(TXIF&&TXIE){
       TXREG=data_buf[send_counter];
       send_counter++;
       if(send_counter==send_number){
         TXIE=0;
         send_ok=1;
       }  
       return;
     }
   
    /* wait for receve end */
    if(TMR3IF&&TMR3IE){
       TMR3IF=0;
       TMR3ON=0;
       TMR0ON=0;
       rece_counter++;
       return;
     } 
      
   
    /* wait for the slave ack and return message */
    if(TMR0IF&&TMR0IE){
       TMR0IF=0;
       Delay200++;
       if(Delay200==30){
         Delay200=0;
         TMR0ON=0;
         MainSendNoack=1;
       }
       return;
     }   
   
    /* reout the register */
   
}

/*******************************************************************************
* Function Name  : get_crc
* Description    : get_crc
* Input          : the nuber of bytes 
* Output         : None
* Return         : the byte of crc 
*******************************************************************************/
uint get_crc(uchar n)
{
    uint crc_word=0xffff;
    uchar i,j;
    for(i=0;i<n;i++){
         crc_word^=(uint)data_buf[i];
         for(j=0;j<8;j++){
             if(crc_word&0x0001){
                crc_word=crc_word>>1;
                crc_word^=0xa001;
              }
             else crc_word>>=1;             
          }
      }
    return crc_word;
}
/*******************************************************************************
* Function Name  : Function_slave
* Description    : Function_slave
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Function_slave(void)
{
    if(rece_ok==0) return;
    rece_ok=0;
    buffer.a=x_number[0x17];
    address=buffer.b[0];
    /* is the right address of the equipment */
    if(data_buf[0]==address){ 
       if(data_buf[1]==0x03){
            UsartSendSlave(Function_03(data_buf[3]));
            return;       
         }
        
        if(data_buf[1]==0x06){ 
            UsartSendSlave(Function_06(data_buf[3]));
            return;       
         }
     }
    /* reserve: broadcast mode */
    if(data_buf[0]==0x00){   
       if(data_buf[1]==0x06){
           /* the addres is stored in data_buf[3] */
           UsartSendSlave(Function_06(data_buf[3]));
           return;
        }
     } 
     /* not the right,some thing is erro */
    send_counter=1;
    RB0=0;
    data_buf[0]=0;
    data_buf[1]=0;
    RCIE=1;
    CREN=1;
}
/*******************************************************************************
* Function Name  : Function_03
* Description    : the MDS function No. of 03,read
* Input          : the addres to be read ofx_number[x],x canbe ...
* Output         : None
* Return         : the total number of bytes to ack 
*******************************************************************************/
uchar Function_03(uchar addr_8)
{
   if(addr_8>0x1f)
    { 
       data_buf[1]=0x83;
       data_buf[2]=0x02;           
       return 0x03;
    }
   /*address 0-0x1f can be read*/
   data_buf[1]=0x03;
   data_buf[2]=0x02;          
   buffer.a=x_number[addr_8];
   data_buf[3]=buffer.b[1];
   data_buf[4]=buffer.b[0];
   return 0x05;  
}
/*******************************************************************************
* Function Name  : Function_06
* Description    : the MDS founction NO. of 06,write
* Input          : data_buf[x],x can be ...
*                  the addres that want to write ti x_number[x]
* Output         : None
* Return         : the total number of bytes to ack  
*******************************************************************************/
uchar Function_06(uchar addr_8)
{
   uchar l=addr_8<<1;
   LcdFlag=1;
   LcdScanTime=100;
   if(data_buf[2]>0){
       data_buf[1]|=0x80;
       data_buf[2] =0x02;
       return 0x03;
    }
   
    buffer.b[1]=data_buf[4];
    buffer.b[0]=data_buf[5];
    x_number[addr_8]=buffer.a;
    
    CLRWDT;
    /* addres 0-0x1a can be write  */
    if(addr_8<0x1a){       
       writeee2b(buffer.a,l);
       CLRWDT;
       writeee2b(buffer.a,(l+52));   
       CLRWDT;
       writeee2b(buffer.a,(l+104));
       CLRWDT;
       x_number[addr_8]=readee2b(l);
       if(addr_8==0x17) return 0x01;
       return 0x06; 
     }
    /* because of user,reset to the factory-set value */
    if(addr_8==0x1a){
       x_number[0x1a]=buffer.a; 
       if(x_number[0x1a]==0) return 0x06;
       x_number[0x1a]=0x00;
       rom_toram(22);
       ram_toee(22);
       CLRWDT;
       CLRWDT;
       //dismainl();
       return 0x00;
     }
    /* because of equipment has erro,reset to the factory-set value */
    if(addr_8==0x1f){
       x_number[0x1f]=buffer.a; 
       if(x_number[0x1f]==0) return 0x06;
       x_number[0x1f]=0x00;
       //dismainl();
       //gz_value=0; 
       //pid_flag=0;
       //pid_flag1=0;   
       return 0x00;
    }   

    data_buf[1]|=0x80;
    data_buf[2] =0x02;
    return 0x03;
} 

/*******************************************************************************
* Function Name  : readee
* Description    : readee
* Input          : the addres want to read
* Output         : None
* Return         : the readed byte
*******************************************************************************/
uchar readee(uchar eeaddr)
{
  EEADR=eeaddr;               
  EEPGD=0;
  CFGS=0;
  RD=1;  
  while(RD==1);
  return EEDATA;              
}
/*******************************************************************************
* Function Name  : readee2b
* Description    : readee2b
* Input          : the addres to be readed
* Output         : None
* Return         : the readed 2bytes
*******************************************************************************/
uint readee2b(uchar eeaddr)
{
 return(uint)(readee(eeaddr)+readee(eeaddr+1)*256);
}
/*******************************************************************************
* Function Name  : writee
* Description    : writee
* Input          : the 8bits to write to e2prom,and the addres to be writed
* Output         : None
* Return         : None
*******************************************************************************/
void writee(uchar eevalue,uchar eeaddr)
{
 while(WR);
 GIE=0;
 EEIF=0;
 EEADR=eeaddr;
 EEDATA=eevalue;
 EEPGD=0;
 CFGS=0;
 WREN=1;
 EECON2=0x55;
 EECON2=0xaa;
 WR=1;
 GIE=1;
 WREN=0;
 while(WR==1);
 EEIF=0;
}
/*******************************************************************************
* Function Name  : writeee2b
* Description    : writeee2b
* Input          : the 16 bits value to be write to e2prom,and the addres to be write to
* Output         : None
* Return         : None
*******************************************************************************/
void writeee2b(uint eevalue,uchar eeaddr)
{
   /* write the high addres first */
   writee(eevalue/256,eeaddr+1);     
   /* write the low addres second */
   writee(eevalue%256,eeaddr);       
}
/*******************************************************************************
* Function Name  : ram_toee
* Description    : ram to three eeprom blocks 
* Input          : the range of e2prom to be writed uchar u
* Output         : None
* Return         : None
*******************************************************************************/
void ram_toee(uchar u)
{
  uchar i;
  for(i=0;i<u;i++){
     writeee2b(x_number[i],(i*2));
   }
  for(i=0;i<52;i++){
    writee(readee(i),i+52);
    writee(readee(i),i+104);
   }  
}
/*******************************************************************************
* Function Name  : ee_toram
* Description    : the first e2prom block to ram 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void ee_toram(void)
{
   uchar i;
   for(i=0;i<26;i++){
      /* two bytes,the addres doubling */ 
      x_number[i]=readee2b(i*2);
    }
}
/*******************************************************************************
* Function Name  : rom_toee
* Description    : rom_toee 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void rom_toee(void)
{
  uchar i;
  for(i=0;i<26;i++){
     writeee2b(pre_number[i],(i*2));
   }
  for(i=0;i<52;i++){
    writee(readee(i),i+52);
    writee(readee(i),i+104);
   }
  /* set the flag */
  writee(0xcc,200);  

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲摸摸操操av| 久久亚洲捆绑美女| 一区二区三区**美女毛片| 成人av在线影院| 亚洲视频1区2区| 欧美亚洲一区二区三区四区| 一区二区不卡在线播放| 欧美日韩成人综合| 老司机精品视频导航| 久久久噜噜噜久噜久久综合| 成人av电影在线| 亚洲综合免费观看高清完整版在线| 欧美视频一二三区| 日本欧美在线观看| 国产精品久久久久一区二区三区 | 亚洲成人av资源| 欧美一卡2卡三卡4卡5免费| 久99久精品视频免费观看| 国产欧美日韩另类一区| 91黄色免费版| 国产真实乱偷精品视频免| 国产精品高潮久久久久无| 欧美日韩另类一区| 国产乱码精品一区二区三区五月婷| 国产精品短视频| 日韩一区和二区| a美女胸又www黄视频久久| 午夜精品视频一区| 国产香蕉久久精品综合网| 欧美亚洲综合在线| 国产乱码精品一区二区三区av | 国产成人av在线影院| 亚洲小说春色综合另类电影| 精品国产乱码久久久久久浪潮| 色悠久久久久综合欧美99| 韩国精品免费视频| 亚洲一区二区三区在线看| 久久精品视频一区二区三区| 欧美日韩一区二区三区四区 | 综合中文字幕亚洲| 欧美大片在线观看一区二区| 一本一本大道香蕉久在线精品| 麻豆91精品91久久久的内涵| 一区二区三区在线播放| 国产视频一区在线播放| 91精品国产高清一区二区三区蜜臀| 成人国产精品视频| 国产精品白丝av| 日韩国产欧美在线观看| 亚洲已满18点击进入久久| 国产精品久久久久一区二区三区共| 精品捆绑美女sm三区| 911精品国产一区二区在线| 色综合久久88色综合天天免费| 狠狠色丁香久久婷婷综合丁香| 色综合天天综合色综合av| 国产一区二区精品久久99| 亚洲sss视频在线视频| 亚洲免费在线观看| 中文字幕成人在线观看| 国产亚洲精品bt天堂精选| 精品国产第一区二区三区观看体验| 欧美二区在线观看| 欧美三区免费完整视频在线观看| 色老头久久综合| 91福利视频在线| 91麻豆精品一区二区三区| av成人老司机| 99久久婷婷国产综合精品电影| 国产精品18久久久久| 国产一区二区三区久久悠悠色av| 久久aⅴ国产欧美74aaa| 蜜桃av一区二区| 久久精品国产99久久6| 蜜臀av性久久久久蜜臀aⅴ| 午夜欧美在线一二页| 天天综合网 天天综合色| 五月综合激情婷婷六月色窝| 三级不卡在线观看| 日韩av成人高清| 久久精品久久99精品久久| 久久国产精品露脸对白| 韩国av一区二区三区在线观看| 久久99蜜桃精品| 国产成人综合自拍| 成人免费观看视频| 色综合激情五月| 欧美日韩三级一区| 日韩欧美在线影院| 久久久青草青青国产亚洲免观| 国产欧美日韩三级| 亚洲欧美日韩一区| 婷婷久久综合九色国产成人| 免费av网站大全久久| 国产一区二区主播在线| 成人av在线观| 欧美在线观看你懂的| 日韩一区二区三区免费看| 久久免费的精品国产v∧| 中文字幕在线一区| 亚洲一区二区三区在线播放| 美女视频黄频大全不卡视频在线播放| 奇米影视7777精品一区二区| 国产成人午夜片在线观看高清观看| 成人免费视频网站在线观看| 日本韩国一区二区三区视频| 日韩一区国产二区欧美三区| 国产精品免费网站在线观看| 亚洲自拍欧美精品| 国产一区三区三区| 一本色道综合亚洲| 亚洲精品在线观看网站| 亚洲欧美自拍偷拍| 麻豆精品国产传媒mv男同| 成人黄色小视频| 91精品国产综合久久蜜臀| 国产精品入口麻豆原神| 三级亚洲高清视频| 成人高清av在线| 日韩一区二区三区在线观看| 中文字幕亚洲电影| 久久av中文字幕片| 欧美视频中文字幕| 久久久国产精品不卡| 日日夜夜精品视频天天综合网| 风间由美中文字幕在线看视频国产欧美| 在线免费观看一区| 欧美国产一区在线| 蜜臂av日日欢夜夜爽一区| 99久久亚洲一区二区三区青草| 精品美女一区二区| 日日夜夜免费精品视频| 色哟哟一区二区在线观看| 国产日韩在线不卡| 久久精品国产亚洲高清剧情介绍 | 欧美大片日本大片免费观看| 亚洲免费观看在线视频| 韩国精品久久久| 91精品国产综合久久香蕉麻豆| 亚洲色图在线看| 丁香婷婷综合色啪| 久久久99精品久久| 免费成人在线视频观看| 在线中文字幕一区| 中文字幕一区二区不卡| 国产精品一区在线观看乱码| 日韩欧美一区二区三区在线| 亚洲高清久久久| 欧美性一二三区| 欧美一激情一区二区三区| 成人国产一区二区三区精品| 大胆亚洲人体视频| 亚洲精品在线电影| 日韩电影在线观看电影| 欧美色电影在线| 亚洲图片另类小说| 成人a免费在线看| 中文一区在线播放| 高潮精品一区videoshd| 久久久精品国产免费观看同学| 经典三级一区二区| 欧美videos大乳护士334| 青青草国产成人av片免费| 欧美绝品在线观看成人午夜影视| 尤物视频一区二区| 色噜噜狠狠色综合中国| 亚洲一区二区三区四区在线免费观看| 91在线免费播放| 亚洲三级小视频| 一本大道久久精品懂色aⅴ| 综合自拍亚洲综合图不卡区| 色一情一乱一乱一91av| 一区二区三区中文字幕电影| 欧美亚洲免费在线一区| 午夜精品久久久久久久久久| 欧美日本一区二区三区四区| 日韩高清电影一区| 欧美mv日韩mv国产网站app| 国产一区二区三区在线观看免费视频| 久久网站热最新地址| 国产成人av自拍| 亚洲精品老司机| 在线不卡免费欧美| 加勒比av一区二区| 国产欧美精品在线观看| 94-欧美-setu| 亚洲成国产人片在线观看| 欧美一区二区三区在线看| 精品一区二区三区在线视频| 日本一二三不卡| 色噜噜久久综合| 麻豆91在线播放免费| 亚洲国产精品ⅴa在线观看| 91看片淫黄大片一级| 日本亚洲一区二区| 国产精品网曝门| 欧美日韩夫妻久久| 丁香天五香天堂综合| 91搞黄在线观看| 欧美性猛交xxxx黑人交|