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

📄 transmit.c

📁 This is my code (with PIC 18F458) for Modbus RTU Network. I have written by Ccs laguage
💻 C
字号:
//dung cho PIC TRANSMIT PC
#include <18f458.h>
#device *=16 ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=40000000)
#use rs232(baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7 )

int8  message[6]={0x01,0x03,0x01,0x01,0x00,0x01};
int8 huy[3];
int8 CRC[2];
int8 conv[2];
int8 count=0;
int8 value=0;

#int_rda
void receive()
{
   huy[count]=getc();
   count++;
   if(count==2)
   {
      count=0;
      value=1;
   }
}

void getCRC() // chuong tring con tinh CRC
{   
   int16 CRCFull = 0xFFFF;
   int8 CRCHigh = 0xFF, CRCLow = 0xFF;
   int16 CRCLSB;
   int i,j;
   for ( i = 0; i < 6; i++)
   {
      CRCFull = (int16)(CRCFull ^ message[i]);
      for (j = 0; j < 8; j++)
      {
         CRCLSB = (int16)(CRCFull & 0x0001);
         CRCFull = (int16)((CRCFull >> 1) & 0x7FFF);
         if (CRCLSB == 1)
         CRCFull = (int16)(CRCFull ^ 0xA001);
      }
   }
   CRC[0] = CRCHigh = (int8)((CRCFull >> 8) & 0xFF); //char
   CRC[1] = CRCLow = (int8)(CRCFull & 0xFF);       //char
   //conv[0]=(int8)(CRC[1]);
   //conv[1]=(int8)(CRC[0]);
}

void main()
{
   int i=0;
   
   enable_interrupts(global);
   enable_interrupts(int_rda);
   delay_ms(200); 
   message[0]=1;
   //CRC[1]=255;
   //CRC[0]=15;
   getCRC();
   while(true)
     {      
       if(value==1)
       {
         value=0;
         if(huy[0]==2)
         {
          
         putc(message[0]);
         putc(CRC[1]);
         putc(CRC[0]);
         delay_ms(500);
         putc(message[0]);
         putc(CRC[1]);
         putc(CRC[0]);
        
         }
       }
   }
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -