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

📄 can

📁 can通信源码
💻
📖 第 1 页 / 共 2 页
字号:
 if(p15==0)
{ 
 biaoshi=1;
jia1--;
 if(jia1<0)
  jia1=4;
 CAN_TXD();
while(!p15);
}
}
 if(p11==0)
  {
Delay(500); 
if(p11==0)
   {  
biaoshi=2;
CAN_TXD();
 LCD_Clear(); 
LCD_Write_Chinese(0,0,0);//温 
LCD_Write_Chinese(2,0,1);//度
LCD_Write_Chinese(6,0,2);//湿
LCD_Write_Chinese(8,0,3);//度
LCD_Write_Chinese(4,0,12);//和
LCD_Write_Chinese(0,2,9); //已
LCD_Write_Chinese(2,2,10);//发
LCD_Write_Chinese(4,2,11);//送

Delay(40000);
 LCD_Clear(); 
 while(!p11);
   }  
  }



 if(p12==0)
{
 Delay(500);
 if(p12==0)
  {
 CAN_yuan( ) ;


   while(!p12);
   }

CAN_RXD();

}









if(p14==0)
{
 Delay(500);
 if(p14==0)
  {
    biaoshi=1;
    jia1++;
   if(jia1>4)
    jia1=0;
   CAN_TXD();
  while(!p14);
  }
}

}
///////////////////////////////////////////////////主函数////////////////////////////////////
void main()
{

fg=0;
fd=0;
sg=0;
sd=0;
shi1=0;
shi2=0;
count=0;
RST=0; 
Delay(100);
Delay(100);
Delay(100);
Delay(100);
Delay(100);

RST=1;    
LCD_init(); 
LCD_Clear(); 

SJA_RST = 0; //复位引脚
	Delay(100);
    SJA_RST = 1;//CAN总线复位管脚
 	Delay(100);
	Delay(100);
	Delay(100);
    SJA_CS = 0;//CAN总线片选有效
    	Delay(100);
    SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
//CPU初始化

    CAN_init(); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效
    _nop_();
    _nop_();
	Delay(200);
TMOD=0x01;
EA=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)                              ////////////死循环////////////
{

LCD_Write_Chinese(0,0,0); 
LCD_Write_Chinese(2,0,1); 
LCD_Write_Charater(4,0,10);
LCD_Write_Chinese(0,2,2); 
LCD_Write_Chinese(2,2,3); 
LCD_Write_Charater(4,2,10);
LCD_Write_Charater(0,4,11);
LCD_Write_Charater(1,4,10);
LCD_Write_Charater(4,4,10);
RH();
for(u=0;u<256;u++)
{
 if(u=U8RH_data_H)
   {
    d=u/100;
    e=u/10;
    f=u%10;
   }
LCD_Write_Charater(6,2,d);
LCD_Write_Charater(7,2,e);
LCD_Write_Charater(8,2,f);
break;
}
for(j=0;j<256;j++)
{
 if(j=U8T_data_H)
   {
    a=j/100;
    b=j/10;
    c=j%10;
   }
LCD_Write_Charater(6,0,a);
LCD_Write_Charater(7,0,b);
LCD_Write_Charater(8,0,c);
break;
}
anjian();
CAN_RXD();
if(count>=20)
 {
   count=0;
    fd++;
	  if(fd>=10)
	  {
	   fd=0;
	   fg++;
	   if(fg>=6)
	   {
	    fg=0;
		sd++;
        if(sd>=10)
         {
          sd=0;
          sg++;
          if(sg>=6)
           {
            sg=0;
            shi1++;
            if(shi1>=10)
             {
              shi1=0;
              shi2++;
              if((shi2=2)&&(shi1=4))
                {
                  shi1=0;
                  shi2=0;
                }
             }
           }
         }
	   }
	  }
      LCD_Write_Charater(2,4,shi1);
      LCD_Write_Charater(3,4,shi2);
      LCD_Write_Charater(5,4,sg);
	  LCD_Write_Charater(6,4,sd);
	  LCD_Write_Charater(7,4,10);
	  LCD_Write_Charater(8,4,fg);
      LCD_Write_Charater(9,4,fd);
	  }

anjian();
CAN_RXD();
}
}
void zhongduan()interrupt 1
{
 count++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void CAN_init( void )
{
   
    uchar ACRR[4];
    uchar AMRR[4];
    ACRR[0] = 0x11;
    ACRR[1] = 0x22;
    ACRR[2] = 0x33;
    ACRR[3] = 0x44;//接收代码寄存器,节点1
    AMRR[0] = 0xff;
    AMRR[1] = 0xff;
    AMRR[2] = 0xff;
    AMRR[3] = 0xff;//接收屏蔽寄存器。 只接收主机发送的信息
    //  .0=1---reset MODRe,进入复位模式,以便设置相应的寄存器
    	 //防止未进入复位模式,重复写入;
    MODR   = 0x09;

    CDR  = 0x88;//时钟分频; CDR.3=1--时钟关闭, CDR.7=0---basic CAN, CDR.7=1---Peli CAN

    BTR0 = 0x03;
    BTR1 = 0x1c;//16M晶振,波特率125Kbps

    IER  = 0xff;// .0=1--接收中断使能;  .1=0--关闭发送中断使能
    OCR  = 0xaa;// 配置输出控制寄存器
    CMR  = 0x04;//命令寄存器;释放接收缓冲器

    ACR  = ACRR[0];
    ACR1 = ACRR[1];
    ACR2 = ACRR[2];
    ACR3 = ACRR[3];//初始化标示码

    AMR  = AMRR[0];
    AMR1 = AMRR[1];
    AMR2 = AMRR[2];
    AMR3 = AMRR[3];//初始化掩码


	MODR   = 0x08;

}



  void CAN_TXD( void )
{                    
			        uchar data qushu;
				    uchar data TX_buffer[ N_can ] ;
                       
			
					    TX_buffer[0] = 0x88;//TX.7=1扩展帧;TX.6=0数据帧; .3=1数据长度
					    TX_buffer[1] = 0x00;//本节点地址
					    TX_buffer[2] = 0x01;//
					    TX_buffer[3] = 0x02;//
					    TX_buffer[4] = 0x03;
																		
						    TX_buffer[5]  = d;//发送湿度过去
						    TX_buffer[6]  = e;
						    TX_buffer[7]  = f;
						    TX_buffer[8]  =a ;// 发送温度过去
						    TX_buffer[9]  =b;
						    TX_buffer[10] = c;
						    TX_buffer[11] = jia1;
						    TX_buffer[12] =biaoshi;
   do{
    qushu=SR;
   	Delay(100);
	Delay(100);

      }while(qushu&0x20);
     do{
        qushu=SR;
           	Delay(100);
       }while(qushu&0x10);

	   		        TBSR   = TX_buffer[0];
				    TBSR1  = TX_buffer[1];
				    TBSR2  = TX_buffer[2];
				    TBSR3  = TX_buffer[3];
				    TBSR4  = TX_buffer[4];
				    TBSR5  = TX_buffer[5];//  发送湿度过去
				    TBSR6  = TX_buffer[6];//	  
				    TBSR7  = TX_buffer[7];
				    TBSR8  = TX_buffer[8];// 发送温度过去
				    TBSR9  = TX_buffer[9];
				    TBSR10 = TX_buffer[10];
				    TBSR11 = TX_buffer[11];//jia1
				    TBSR12 = TX_buffer[12];//发送标识符过去
					CMR = 0x01;//把数据发送过去	
Delay(100);
Delay(100);

				 
}

     void CAN_yuan( void )
{                    
			        uchar data qushu;
				    uchar data TX_buffer[ N_can ] ;
                       
			
					    TX_buffer[0] = 0xc8;//TX.7=1扩展帧;TX.6=0数据帧; .3=1数据长度
					    TX_buffer[1] = 0x00;//本节点地址
					    TX_buffer[2] = 0x01;//
					    TX_buffer[3] = 0x02;//
					    TX_buffer[4] = 0x03;
																		
						  
   do{
    qushu=SR;
   	Delay(100);
	Delay(100);

      }while(qushu&0x20);
     do{
        qushu=SR;
           	Delay(100);
       }while(qushu&0x10);

	   		        TBSR   = TX_buffer[0];
				    TBSR1  = TX_buffer[1];
				    TBSR2  = TX_buffer[2];
				    TBSR3  = TX_buffer[3];
				    TBSR4  = TX_buffer[4];
				
					CMR = 0x01;//把数据发送过去	
Delay(100);
Delay(100);

				 
}








  
void CAN_RXD( void )
{//接收数据函数,在中断服务程序中调用

    uchar data Judge;
Delay(100);
Delay(100);
    Judge=SR;
if(!(Judge&0x20))
{
 if(!(Judge&0x10))
  { 
if(Judge&0x01)
    {

        RX_buffer[0] =  RBSR;
        RX_buffer[1] =  RBSR1;
        RX_buffer[2] =  RBSR2;
        RX_buffer[3] =  RBSR3;
        RX_buffer[4] =  RBSR4;
        RX_buffer[5] =  RBSR5;
        RX_buffer[6] =  RBSR6;
        RX_buffer[7] =  RBSR7;
        RX_buffer[8] =  RBSR8;
        RX_buffer[9] =  RBSR9;
        RX_buffer[10] =  RBSR10;
        RX_buffer[11] =  RBSR11;
        RX_buffer[12] =  RBSR12;
        CMR=0x04;	//释放接收缓冲器
        Judge = ALC;//释放仲裁随时捕捉寄存器
        Judge = ECC;//释放错误代码捕捉寄存器
 if(RX_buffer[0]==0xc8)
 { CAN_TXD();
} 

 else {
 LCD_Clear(); 
LCD_Write_Chinese(0,0,4); 
LCD_Write_Chinese(2,0,5); 
LCD_Write_Chinese(4,0,6); 
LCD_Write_Chinese(6,0,7); 
LCD_Write_Chinese(8,0,8);
LCD_Write_Charater(4,2,RX_buffer[5]);
       Delay(40000);
  	  LCD_Clear(); 
      }
}    
}
}
}
 

⌨️ 快捷键说明

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