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

📄 main.c

📁 利用xc167单片机上的双口can
💻 C
字号:
#include "MAIN.H"
#include <stdio.h>
#include <XC167.H>

#define PERIOD  15536          /* 10 msec interrupt period        */

unsigned char send = 0, pattern = 0x01, obj0dat;


static void timer0(void) interrupt 0x20 using INTREGS 
{  /* Int Vector at 0080H, other Reg Bank */
#ifdef TargetA
  obj0dat =  pattern;
#else
  obj0dat = ~pattern;
#endif
  CAN_vLoadData(0, &obj0dat);
  CAN_vTransmit (0);
  if(pattern) pattern = pattern << 1;
    else pattern = 0x01;
  send = 1;
}

void MAIN_vInit(void)
{
  /* setup the timer 0 interrupt */
  CC1_T0REL  = PERIOD;	    /* set reload value */
  CC1_T0     = PERIOD;
  CC1_T0IC   = 0x44;        /* set T0IE and ILVL = 1 */
  CC1_T01CON = 0x44;        /* start timer 0 */ 
 
  CAN_vInit();

  PSW_IEN    =  1;          

} 


void MAIN_vUnlockProtecReg(void)
{
  ubyte ubPASSWORD;

  if((SCUSLS & 0x1800) == 0x0800) //if low protected mode
  {

    ubPASSWORD = SCUSLS & 0x00FF;
    ubPASSWORD = ~ubPASSWORD;
    SCUSLC = 0x8E00 | ubPASSWORD;      //command 4

  }  //end if low rotected mode

  if((SCUSLS & 0x1800) == 0x1800) //if write protected mode
  {
    SCUSLC = 0xAAAA;                   //command0
    SCUSLC = 0x5554;                   //command1

    ubPASSWORD = SCUSLS & 0x00FF;
    ubPASSWORD = ~ubPASSWORD;

    SCUSLC = 0x9600 | ubPASSWORD;      //command 2
    SCUSLC = 0x0800;                   //command 3; new PASSWOR is 0x00

    ubPASSWORD = SCUSLS & 0x00FF;
    ubPASSWORD = ~ubPASSWORD;
    SCUSLC = 0x8E00 | ubPASSWORD;      //command 4

  }  
} 


void delay () {
  unsigned int tmp;
  for (tmp = 0; tmp < 60000; tmp++);
}

TCAN_SWObj obj101;

void main(void)
{
  P3  |= 0x0400;          /* SET PORT 3.10 OUTPUT LATCH (TXD)              */
  DP3 |= 0x0400;          /* SET PORT 3.10 DIRECTION CONTROL (TXD OUTPUT)  */
  DP3 &= 0xF7FF;          /* RESET PORT 3.11 DIRECTION CONTROL (RXD INPUT) */
  ASC0_TIC   = 0x80;      /* SET TRANSMIT INTERRUPT FLAG                   */
  ASC0_RIC   = 0x00;      /* DELETE RECEIVE INTERRUPT FLAG                 */
  ASC0_BG    = 0x80;      /* SET BAUDRATE TO 9600 BAUD @ 40MHz             */
  ASC0_CON   = 0x8011;    /* SET SERIAL MODE                               */
  ALTSEL0P3 |= 0x0C00;    /* Configure port pins for serial interface 0    */

 DP2 = 0xff00;
  
  
 MAIN_vInit();

  
 while (1)  {
 
      if(send) {
        printf ("\nTrans Message: %02x  ", obj0dat);
        send = 0;
      }

      if (CAN_ubNewData(1))  {
        CAN_vGetMsgObj (1, &obj101);
        printf ("Rec Message: %02x", obj101.ubData[0]);
        P2 = (obj101.ubData[0]) << 8;
        CAN_vReleaseObj(1);
      }
    }
}


⌨️ 快捷键说明

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