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

📄 pic18f458_can_rs232_picc8.35.lst

📁 使用微芯公司的PIC18F458单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
   327:  NOP();    
   328: }
   329: //************************************************************************
   330: 
   331: 
   332: //////////////////////////////////////////////////////////////////////////
   333: //                            主程序                                    //
   334: //////////////////////////////////////////////////////////////////////////
   335: void main(void)
   336: {   
   337:  unsigned char sendnum; 
   338:  NOP(); 
   339:  Initial();                  //IO口初始化
   340:  InitUSART();                //串口初始化
   341:  InitTMR0();                 //定时器0初始化
   342:  InitCAN();                                  //内部CAN寄存器设置初始化
   343:  IPEN = 1;                                       //使能中断优先级
   344:  INTCON |= 0xC0;                     //开放所有高低优先级中断   
   345:  while(1)
   346:           {
   347:            if(RD0 == 0)          //如有S1按键按下,发送标准帧
   348:              {
   349:                   while(RD0 == 0);   //等待S1按键释放
   350:                   TXB0CON = 0x03;    //设置为发送最高优先级
   351:                   TXB0SIDH = 0xFF;   //SID10--SID3
   352:                   TXB0SIDL = 0xE0;   //SID2--SID0
   353:                   TXB0DLC = 0x08;    //发送数据长度为8字节
   354:                   TXB0D0=0x00;       //发送的数据 
   355:                   TXB0D1=0x11;
   356:                   TXB0D2=0x22;
   357:                   TXB0D3=0x33;
   358:                   TXB0D4=0x44;
   359:                   TXB0D5=0x55;
   360:                   TXB0D6=0x66;
   361:                   TXB0D7=0x77;  
   362:                   TXB0REQ = 1;            //请求发送
   363:                   while(TXB0REQ == 1);    //等待发送成功
   364:                   RD1 = 1;                    //发送成功,则点亮RD1
   365:                   DelayNmSec(100);        //延时0.1s
   366:                   RD1 = 0;                //熄灭RD1
   367:              }
   368: 
   369:            if(RC0 == 0)          //如有S2按键按下,发送扩展帧
   370:              {
   371:                   while(RC0 == 0);   //等待S2按键释放
   372:                   TXB0CON = 0x03;    //设置为发送最高优先级
   373:                   TXB0SIDH = 0xFF;   //EID28--21
   374:                   TXB0SIDL = 0xEB;   //EID20--EID18,扩展帧使能,EID17--EID16
   375:                   TXB0EIDH = 0xFF;   //EID15--EID8
   376:                   TXB0EIDL = 0xFF;   //EID7--EID0
   377:                   TXB0DLC = 0x08;    //发送数据长度为8字节
   378:                   TXB0D0=0x00;       //发送的数据 
   379:                   TXB0D1=0x11;
   380:                   TXB0D2=0x22;
   381:                   TXB0D3=0x33;
   382:                   TXB0D4=0x44;
   383:                   TXB0D5=0x55;
   384:                   TXB0D6=0x66;
   385:                   TXB0D7=0x77;  
   386:                   TXB0REQ = 1;            //请求发送
   387:                   while(TXB0REQ == 1);    //等待发送成功
   388:                   RC1 = 1;                    //发送成功,则点亮RC1
   389:                   DelayNmSec(100);        //延时0.1s
   390:                   RC1 = 0;                //熄灭RC1
   391:              }
   392:                      
   393:            if(USARTreceive_flag == 1) //接收到符合要求的串口数据流 
   394:                  {              
   395:                   USARTreceive_flag = 0;       //串口转发再允许
   396:                   TXB0CON = 0x03;         //设置为发送最高优先级
   397:                   pointer = &receive232[1];
   398:                   TXB0SIDH = *pointer++;       //发送的标识符
   399:                   TXB0SIDL = *pointer++;
   400:                   TXB0EIDH = *pointer++;
   401:                   TXB0EIDL = *pointer++;
   402:                   TXB0DLC = *pointer++;        //发送的数据长度
   403:                   TXB0D0 = *pointer++;             //发送的数据
   404:                   TXB0D1 = *pointer++;
   405:                   TXB0D2 = *pointer++;
   406:                   TXB0D3 = *pointer++;
   407:                   TXB0D4 = *pointer++;
   408:                   TXB0D5 = *pointer++;
   409:               TXB0D6 = *pointer++;
   410:                   TXB0D7 = *pointer++;
   411:                   TXB0REQ = 1;                 //请求发送
   412:                   while(TXB0REQ == 1);         //等待发送成功
   413:                   if(TXB0EXIDE == 0)//如果是标准帧
   414:                     {
   415:                      RD1 = 1;                  //发送成功,则点亮RD1
   416:                      DelayNmSec(100);          //延时0.1s
   417:                      RD1 = 0;                  //熄灭RD1                                    
   418:                         }
   419:                   if(TXB0EXIDE == 1)//如果是扩展帧
   420:                     {
   421:                      RC1 = 1;                  //发送成功,则点亮RC1
   422:                      DelayNmSec(100);          //延时0.1s
   423:                      RC1 = 0;                  //熄灭RC1                                    
   424:                         }                                                
   425:                  }
   426:                  
   427:            if(CANreceive_flag == 1)                //接收到来自CAN总线的数据 
   428:                  {                
   429:                   CANreceive_flag = 0;             //接收标志位清零               
   430:           send232[0] = RXB0SIDH;       //接收到的标准标识符高字节
   431:           send232[1] = RXB0SIDL;       //接收到的标准标识符低字节
   432:           send232[2] = RXB0EIDH;       //接收到的扩展标识符高字节(看RXB0EXID而定)
   433:           send232[3] = RXB0EIDL;       //接收到的扩展标识符低字节(看RXB0EXID而定)
   434:           send232[4] = RXB0DLC;        //接收到的数据长度
   435:           send232[5] = RXB0D0;         //接收到的数据
   436:                   send232[6] = RXB0D1;
   437:                   send232[7] = RXB0D2;
   438:                   send232[8] = RXB0D3;
   439:                   send232[9] = RXB0D4;
   440:                   send232[10] = RXB0D5;
   441:                   send232[11] = RXB0D6;
   442:                   send232[12] = RXB0D7;
   443:                   if(RXB0EXID == 0)            //标准帧的话
   444:                     {
   445:              RD1 = 1;                  //接收成功,则点亮RD1
   446:                      DelayNmSec(100);          //延时0.1s
   447:                      RD1 = 0;                  //熄灭RD1        
   448:                     }
   449:                   if(RXB0EXID == 1)            //扩展帧的话
   450:                     {
   451:              RC1 = 1;                  //接收成功,则点亮RC1
   452:                      DelayNmSec(100);          //延时0.1s
   453:                      RC1 = 0;                  //熄灭RC1        
   454:                     }
   455:           send_count=13;               //串口转发13字节
   456:           for(sendnum=0;sendnum<send_count;sendnum++) //转发到串口
   457:              {
   458:                   TXREG = send232[sendnum];     
   459:               while(TRMT == 0);        //等待串口发送完一字节
   460:              }                           
   461:                  }      
   462:           }
   463: }
   464: //************************************************************************
   465: 
   466: 
   467: //////////////////////////////////////////////////////////////////////////
   468: //                             子函数                                   //
   469: //Function name(函数名称):DelayNmSec                                    //
   470: //Create date(创建日期):2007.8.1                                        //
   471: //created by(创建人):夏红峰                                             //
   472: //E-mail:master_0722@sina.com/master_0722@yahoo.com                     //
   473: //Function(函数功能): 延时N*1ms,最大65.5秒                             //
   474: //Input(输入参数类型):unsigned int N                                    //
   475: //Output(输出参考类型):void                                             //
   476: //Return(返回信息):无                                                   //
   477: //////////////////////////////////////////////////////////////////////////
   478: void DelayNmSec(unsigned int N)
   479: {
   480:  unsigned int j;
   481:  while(N--)
   482:            for(j=0;j<MILLISEC;j++);
   483: }
   484: //************************************************************************
   485: 
   486: 
   487: 

⌨️ 快捷键说明

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