首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CAN总线的通信问题

CAN总线的通信问题

我用GZ16做CAN总线通信,但是用汇编的程序调通,不知道为什么,改成C就不行了,以下是我的C程序,请各位大侠指教,小弟在此写过了!急啊!#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GZ16.h> /* include peripheral declarations */


 extern typedef unsigned char  byte;
 
byte  TEMPCMCR0 ;  
byte  TEMP;
byte   TXFLAG1   ;
byte   TEMPCRFLG ;
byte   TEMPPORTA ; 
byte   TEMPPORTB ;  
byte   TEMPPORTB1;
byte   TEMPDSRRX0;  
byte   FLAG     ;   /*  读数成功标志位 */
byte   TEMPCTFLG ;


int i;


void init_Ports ()
{
    DDRA=0x03;
    DDRB=DDRB&0xF3;
    DDRE=0xFF;
    DDRC=0x3D; 
    PTA=PTA&0x03;  
    PTB=PTB&0xF3;
    PTE=0x00;
    PTC=PTC&0x03;
       TEMPPORTB1=0x00;
    TEMPDSRRX0=0x00;
    TEMPCRFLG= 0x00;
    TEMPCTFLG=0x00;
    FLAG= 0x00;
  
}
 
void init_can ()
 {
   CMCR0=0x01;
   CMCR1=0x00;
   CBTR0=0x01;
   CBTR1=0x58 ;
            
 /***************************INITIAL CAN INTERRUPT**********************/
    CTCR=0x00;
    CIDAC=0x20;   
        
 /****************************initial filter*******************************/
/*设置接受符ID过滤比较码寄存器。因为屏蔽码置为0xFF,所有的为豆浆被忽略,
所以这里的比较码可以置为任意值*/
       
        CIDAR0=0x33;
        CIDAR1=0x55;
        CIDAR2=0x55;
        CIDAR3=0x55;
        
/*设置接受符ID过滤屏蔽码寄存器,因为是测试程序,所有的屏蔽码为都为1,接受所有的数据*/
       
       CIDMR0=0x00; 
       CIDMR1=0xFF;
       CIDMR2=0xFF;
       CIDMR3=0xFF;
      
                                   
     
/************************RECEIVE BUFFER ******************************/
   REC_DLR=0x01;
        
                
/*************************TRANSMISS BUFFER 1*****************************/
          TBPR0=0x11;
          DLR0 =0x01;
          IDR00=0x55;
          IDR10=0x00;
        
/**************************CAN NOMAL WORK*********************************/      
      CMCR0=0x00;   
      CRIER=0x01;  
      CRFLG=0x00;
      TEMPCMCR0=CMCR0;
   while(TEMPCMCR0&0x10==0){
    TEMPCMCR0=CMCR0;
   }
    
 }
  void READDATA()  { 
     
    TEMPPORTA=0x00;
    TEMPPORTA=PTA;
        TEMPPORTA=TEMPPORTA&0xFC; 
        TEMPPORTA=TEMPPORTA>>2;
        TEMPPORTB=0x00;
    TEMPPORTB=PTB;
        TEMPPORTB=TEMPPORTB&0x0C; 
        TEMPPORTB=TEMPPORTB<<4;
        TEMPPORTB=TEMPPORTB&0xC0; 
        TEMPPORTB=TEMPPORTB|TEMPPORTA;  
       
 }
 interrupt void r_isr(){
    DisableInterrupts;
      TEMPDSRRX0= REC_DSR0  ;                                
      FLAG =0x01;
       EnableInterrupts; 
 }
void  t_isr()
{
  for(i=0;i<3;i++) {
  }
     DSR00 =TEMPPORTB;
     
     TXFLAG1=0x00;
  
     TXFLAG1= CTFLG&0x01;
     while( TXFLAG1==0x00) {
      TXFLAG1= CTFLG&0x01;
     }
     for(i=0;i<5;i++) {
  } 
  EnableInterrupts; 
}
         
void CHULI() {
   
    FLAG=0x00;
     PTE=0x00;
     PTC=PTC&0x03;
     TEMP=TEMPDSRRX0;
     TEMP=TEMP&0xF0;
     TEMP=TEMP>>2; 
     PTE=PTE|TEMP;
     TEMPDSRRX0=TEMPDSRRX0&0x0F; 
     TEMPDSRRX0=TEMPDSRRX0<<2; 
     PTC=PTC|TEMPDSRRX0;                                     
}
 void  RECEIVE() {
 for(i=0;i<3;i++) {
  }
 if(FLAG&0x01)
   CHULI() ;
}
 
 void main(void) {
  for(i=0;i<307;i++) {
  }
  DisableInterrupts; /* disable interrupts */
 CONFIG2=0x0A;
 CONFIG1=0x1B;
 init_Ports () ;
  init_can();
  EnableInterrupts;
 for(i=0;i<3;i++) {
  }
  while(1){
    READDATA() ;
  t_isr();
  RECEIVE() ;
 
 }
 
}
        
       

返回列表