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

📄 can232.lst

📁 C8051F020控制的SJA1000can总线芯片的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 183   1      }
 184          void COMM1_ISR (void) interrupt 4
 185          {
 186   1       unsigned char i;
 187   1       unsigned char count; 
 188   1       if(RI0==0x01)
 189   1       {RI0=0;
 190   2        CommBuffer[CommP]=SBUF0;
 191   2        CommP++;
 192   2        if(CommBuffer[0]!=0xaa)
 193   2        {CommP=0;
 194   3         return;
 195   3        }
 196   2        if(CommP>2)
 197   2        {count=(CommBuffer[2]&0x0f);
 198   3         if((CommBuffer[2]&0x80)==0)
 199   3         count+=3;
 200   3         else
 201   3         count+=5;
 202   3         if(CommBuffer[1]!=0x55)
 203   3         {CommP=0;
 204   4          return;
 205   4         }
 206   3        }
 207   2        else
 208   2        return;
 209   2        if(CommP==(count+2))
 210   2        {
 211   3         CommP=0;   
 212   3         if((CommRCount+count)<1024)
 213   3          {for(i=0;i<count;i++)
 214   4           {CommRBuffer[CommRP++]=CommBuffer[2+i];
 215   5            if(CommRP==1024)
 216   5                CommRP=0;
 217   5               }
 218   4               CommRCount+=count;
 219   4      /*       SBUF0=0xaa;
 220   4               while(TI0==0);
 221   4               TI0=0;
 222   4           SBUF0=0x55;
 223   4               while(TI0==0);
 224   4               TI0=0;*/
 225   4              }
 226   3         else
 227   3         {
 228   4          i=100;
 229   4         }
 230   3        }
 231   2       }
 232   1      
 233   1      }
 234          void INTE0_ISR (void) interrupt 0
 235          {
 236   1        unsigned char tt1;
 237   1        unsigned char * xdata tt;
 238   1        int i,count;
 239   1        tt1=InterruptReg;
 240   1        if((tt1&0x04)!=0)
 241   1        {
C51 COMPILER V7.50   CAN232                                                                09/12/2006 21:12:06 PAGE 5   

 242   2         tt1=StatusReg;
 243   2         if((tt1&0x80)!=0)
 244   2         ModeControlReg=AFM_Bit;
 245   2         return;
 246   2        }
 247   1       
 248   1        if((tt1&0x08)!=0)
 249   1        {CommandReg=0x0c;
 250   2         return;
 251   2        }
 252   1        if((tt1&0x01)!=0)
 253   1        {tt=&RxFramInFo;
 254   2         count=(*tt&0x0f);
 255   2         if((*tt&0x80)==0)
 256   2         count+=3;
 257   2         else
 258   2         count+=5;
 259   2         for(i=0;i<count;i++)
 260   2         {GetBuffer[i]=*tt;
 261   3          tt++;
 262   3         }
 263   2         if((Can0RCount+count)<1024)
 264   2         {Can0RCount+=count;
 265   3          for(i=0;i<count;i++)
 266   3              {Can0RBuffer[Can0RP++]=GetBuffer[i];
 267   4               if(Can0RP==1024)Can0RP=0;
 268   4              } 
 269   3         }
 270   2        CommandReg=RRB_Bit;
 271   2        }
 272   1        tt1=ArbLostCapReg;
 273   1        tt1=ErrCodeCapReg; 
 274   1        return;
 275   1      }
 276          void Write232()
 277          {
 278   1       int i,count;
 279   1       count=(Can0RBuffer[Can0TP]&0x0f);
 280   1       if((Can0RBuffer[Can0TP]&0x80)==0)
 281   1       count+=3;
 282   1       else
 283   1       count+=5;
 284   1       SBUF0=0xaa;
 285   1       while(TI0==0);
 286   1       TI0=0;
 287   1       SBUF0=0x55;
 288   1       while(TI0==0);
 289   1       TI0=0;
 290   1       for(i=0;i<count;i++)
 291   1       {SBUF0=Can0RBuffer[Can0TP++];
 292   2        if(Can0TP==1024)Can0TP=0;
 293   2        while(TI0==0);
 294   2        TI0=0;
 295   2       }
 296   1       Can0RCount-=count;
 297   1      }
 298          
 299          /*void Write232a()
 300          {
 301           unsigned int i,count;
 302           count=(CommRBuffer[CommTP]&0x0f);
 303           if((CommRBuffer[CommTP]&0x80)==0)
C51 COMPILER V7.50   CAN232                                                                09/12/2006 21:12:06 PAGE 6   

 304           count+=3;
 305           else
 306           count+=5;
 307           SBUF0=0xaa;
 308           while(TI0==0);
 309           TI0=0;
 310           SBUF0=0x55;
 311           while(TI0==0);
 312           TI0=0;
 313           for(i=0;i<count;i++)
 314           {SBUF0=CommRBuffer[CommTP++];
 315            if(CommTP==100)CommTP=0;
 316            while(TI0==0);
 317            TI0=0;
 318           }
 319           CommRCount-=count;
 320          }
 321          */
 322          main()
 323          {
 324   1      // unsigned char tt1;
 325   1      
 326   1      
 327   1       SYSCLK_Init();
 328   1       config();
 329   1       UART0_Init();
 330   1       Can_Init();
 331   1       EA=1;
 332   1       EX0=1;
 333   1       IP=0x01;
 334   1       CommP=0;
 335   1       CommRP=0;
 336   1       CommRCount=0;
 337   1       CommTP=0;
 338   1       Can0RP=0;
 339   1       Can0RCount=0;
 340   1       Can0TP=0;
 341   1      
 342   1      
 343   1      
 344   1      
 345   1       while(1)
 346   1       {if(CommRP!=CommTP)
 347   2        //Write232a();
 348   2        WriteCan();
 349   2        if(Can0RP!=Can0TP)
 350   2        Write232();
 351   2       // tt1=StatusReg; 
 352   2       }
 353   1      }
 354          
 355          
 356          
 357          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1516    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   2054    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     74    ----
C51 COMPILER V7.50   CAN232                                                                09/12/2006 21:12:06 PAGE 7   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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