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

📄 commonmain.lst

📁 本程序是基于c8051f系列的can总线到485总线的转换程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 207   1       CAN0ADR=IF2CMDRQST;
 208   1       CAN0DAT=Msgnum;
 209   1       CAN0ADR=IF2DATA1;
 210   1       for(i=0;i<4;i+=2)
 211   1        {sr[count++]=CAN0DATH;
 212   2         sr[count++]=CAN0DATL;
 213   2         if(count==2) count++;
 214   2        }
 215   1       P1_0=0;
 216   1      }  
 217          void CMDinit_Msgobject_rx(uchar Msgnum,uchar Id)
 218          {uint temp;
 219   1       SFRPAGE=CAN0_PAGE;
 220   1       CAN0ADR=IF2CMDMSK;
 221   1       CAN0DAT=0X00ba;
 222   1      /*   IF2 Command Mask Registers  =0x00bb 
 223   1      WR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=0,一次发送8字节数据*/
 224   1       CAN0ADR=IF2ARB1;
 225   1       CAN0DAT=0X0000;
 226   1       temp=Id<<2;
 227   1       temp&=0x1fff;
 228   1       temp|=0x8000;
 229   1       CAN0DAT=temp;
 230   1       /*MsgVal=1,Xtd=0,为标准模式,扩展ID无效,Dir=0,为接收*/
 231   1       CAN0DAT=0X0484;
 232   1       /*IF2 Message Control Registers=0x0484
 233   1              NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=1,接收中断使能;RmtEn=0,TxRqst=0
 234   1              EoB=1,DLC3-0=0100,即数据长度为8*/
 235   1       CAN0ADR=IF2CMDRQST;
 236   1       CAN0DAT=Msgnum;
 237   1      }       
 238          
 239          void data_receive(uchar Msgnum)
 240          {uchar i;
C51 COMPILER V8.02   COMMONMAIN                                                            03/13/2008 08:08:46 PAGE 5   

 241   1       P1_0=1;
 242   1       SFRPAGE=CAN0_PAGE;
 243   1       CAN0ADR=IF2CMDMSK;
 244   1       CAN0DAT=0X000F;
 245   1       CAN0ADR=IF2CMDRQST;
 246   1       CAN0DATL=Msgnum;
 247   1       CAN0ADR=IF2DATA1;
 248   1       for(i=0;i<LEN;i+=2)
 249   1        {sr[count++]=CAN0DATH;
 250   2         sr[count++]=CAN0DATL;
 251   2         if(count==2) count++;
 252   2        }
 253   1       sr[2]=count+2;
 254   1       P1_0=0;
 255   1      }        
 256          
 257          void CANO_transist(uchar Msgnum)
 258          {uchar i=0;
 259   1       P1_3=1;
 260   1       SFRPAGE=CAN0_PAGE;
 261   1       CAN0ADR=IF1CMDMSK;
 262   1       CAN0DAT=0X0087;
 263   1       CAN0ADR=IF1DATA1;
 264   1       for(i=3;i<rececount-2;i+=2)
 265   1         {CAN0DATH=t[i++];
 266   2          CAN0DATL=t[i++];
 267   2         }
 268   1       CAN0ADR=IF1CMDRQST;
 269   1       CAN0DATL=Msgnum;
 270   1       P1_3=0; 
 271   1      }       
 272          
 273          void ISR_UART0() interrupt 4
 274          {
 275   1       if (RI0)
 276   1        {P1_2=1;
 277   2         RI0=0;
 278   2         recetimeout=3;
 279   2         t[rececount]=SBUF0;
 280   2         ACC=t[rececount];
 281   2         if(P!=RB80)
 282   2           checkerror=1;
 283   2         if (rececount==0)
 284   2           {if(addr!=t[rececount])
 285   3               rececount=0;
 286   3            else
 287   3               rececount++;   
 288   3           }
 289   2            
 290   2         else
 291   2             {rececount++;
 292   3              if(t[2]==rececount)
 293   3                receive_flag=1;
 294   3              else
 295   3                    receive_flag=0;
 296   3             }
 297   2         P1_2=0;  
 298   2        }
 299   1      }
 300          
 301          void  ISRname () interrupt 19
 302          { uint xdata  can0temp16;
C51 COMPILER V8.02   COMMONMAIN                                                            03/13/2008 08:08:46 PAGE 6   

 303   1        uint xdata  page_save;
 304   1        uint xdata  status;
 305   1       page_save=SFRPAGE;
 306   1       SFRPAGE=CAN0_PAGE;
 307   1       status=CAN0STA;
 308   1       if((status&0x10)!=0)
 309   1          {CAN0STA&=0xef;
 310   2           CAN0ADR=INTPEND1;
 311   2           can0temp16=CAN0DAT;
 312   2           if((can0temp16&0x0001)!=0)
 313   2             {count=0;
 314   3              command_receive(0x01);
 315   3                  if(sr[1]==0x01||sr[1]==0x02||sr[1]==0x03||sr[1]==0x04)
 316   3                 { sr[2]=count+2;
 317   4                   CMD0flag=1;
 318   4                      }    
 319   3             }
 320   2           if((can0temp16&0x0002)!=0)
 321   2                 {data_receive(0x02);
 322   3                  CMDflag=1;
 323   3                     }
 324   2          }
 325   1        SFRPAGE=page_save;  
 326   1      } 
 327          
 328           void SYSCLK_INIT()
 329          {uint i;
 330   1       OSCXCN=0X67;
 331   1       for(i=0;i<256;i++)
 332   1        {while(!(OSCXCN&0X80))
 333   2           OSCICN=0X88;
 334   2        }
 335   1      } 
 336          
 337          void PORT_INIT()
 338          {SFRPAGE=CONFIG_PAGE;
 339   1       XBR0=0X04;
 340   1       XBR1=0X00;    
 341   1       XBR2=0X40;
 342   1       XBR3=0X80;
 343   1       P0MDOUT=0X01;
 344   1      }
 345          
 346           void UART0_INIT()
 347          {SFRPAGE=UART0_PAGE;
 348   1       SCON0=0XD0;
 349   1       PCON=0X00;
 350   1       ES0=1;
 351   1       SFRPAGE = TMR2_PAGE;
 352   1       TMR2CN = 0x00;    
 353   1       TMR2CF = 0x08; 
 354   1      }
 355          
 356          void TIMER_INIT()
 357          {SFRPAGE = TIMER01_PAGE;
 358   1       TMOD=0X01;
 359   1       TH0=0X01;
 360   1       TL0=0X01;
 361   1       TR0=1;
 362   1       ET0=1;
 363   1      }  
 364          
C51 COMPILER V8.02   COMMONMAIN                                                            03/13/2008 08:08:46 PAGE 7   

 365          void INIT_GROUPS()
 366          {
 367   1       SYSCLK_INIT();
 368   1       PORT_INIT();
 369   1       UART0_INIT();
 370   1       TIMER_INIT();
 371   1       clear_Msgobjects();
 372   1       CMDinit_Msgobject_rx(0x01,0x02);
 373   1       init_Msgobjeck_rx(0x02,0x02);
 374   1       init_Msgobject_tx(0x10,0x01);
 375   1       EIE1=0X20;
 376   1       SFRPAGE=CAN0_PAGE;
 377   1       CAN0CN=0X41;
 378   1       CAN0ADR=BITREG;
 379   1       CAN0DAT=0X01;
 380   1       CAN0CN=0X02;
 381   1      }  
 382          
 383          void main()
 384          {xdata uint temp16;
 385   1       EA=0;
 386   1       INIT_GROUPS();
 387   1       EA=1;
 388   1       while(1)
 389   1       {if(CMDflag||CMD0flag)
 390   2          { start485send(&sr);}
 391   2        if(receive_flag)
 392   2          {  temp16=CRC(&t,rececount);
 393   3             if(temp16==0)
 394   3                 receive_ok=1;
 395   3             else 
 396   3                 receive_ok=0;
 397   3             if(receive_ok)
 398   3               { if(t[1]==(0x80|sr[1]))
 399   4                   ASK_repeat(&sr);
 400   4                if(t[1]==sr[1])
 401   4                   CANO_transist(10);
 402   4                else
 403   4                   checkerror=1;
 404   4               }
 405   3          }        
 406   2       }
 407   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1271    ----
   CONSTANT SIZE    =   1024    ----
   XDATA SIZE       =     68      14
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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