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

📄 18f_can.c

📁 用pic18f4580实现can网通信 调试通过
💻 C
字号:
//*******************************************************************
//CAN通讯子程序,2006-9-23调试
//2007-3-13改:作为接收板
//*******************************************************************
#include  "p18f6585.h"

void 		can_isr(void);
void   		initcan(void);
int 		CAN_FLAG,cnt;

void   		initcan(void)
{
	TRISB=(TRISB|0X08)&0XFB;//设置RB3为输入,RB2为输出
//*******************************************************************
//进入配置模式配置各寄存器
	ECANCON=0;
   	CANCON	=0x80;			//请求进入CAN配置模式
 	while(CANSTAT&0X80==0){;}//等待进入CAN模式
	BRGCON1	=0x01;
	BRGCON2	=0x90;
	BRGCON3	=0x42;

	TXB0CON	=0x03;				//发送优先级为最高
	TXB0SIDH=0XFF;				//配置为11位标识码
	TXB0SIDL=0xE0;
	TXB0DLC	=0x02;				//数据长度为8字节
//等待发送的8个字节数据	

	TXB0D0	=0x84;
	TXB0D1	=0x03;
		
	RXB0CON	=0x20;				//只接收有效的标准标识符信息
	RXB0SIDH=0XFF;				//设置接收缓存器0的标识符
	RXB0SIDL=0X60;
	RXB0DLC	=0x02;				//接收数据长度为8字节
//初始化接收寄存器
	RXB0D0	=0x00;
	RXB0D1	=0x00;

	RXF0SIDH=0XFF;
	RXF0SIDL=0x60;
	RXM0SIDH=0xff;
	RXM0SIDL=0xe0;
//*********************************************************************
//使CAN进入某种模式
	CANCON	=0x00;//CAN正常工作模式
	while(CANSTAT&0xe0!=0){;}
	PIR3	=0x00;
	PIE3	=0x01;
	IPR3	=0x01;
}
//接收中断程序
#pragma   	code low_ISR=0x18
void 		low_ISR(void)
{
   	_asm
  	goto can_isr
  	_endasm
}
#pragma  	code
#pragma   	interrupt   can_isr
void 		can_isr(void)
{

 	if(PIR3bits.RXB0IF==1) //有接收中断产生
	cnt++;
	if(cnt==1000)cnt=0;
	if(cnt<500){PORTAbits.RA4=0;}
	else PORTAbits.RA4=1;
	CAN_FLAG=1;				//接收完成标志置1

  	PIR3bits.RXB0IF=0;		//清接收标志
  	RXB0CONbits.RXFUL=0;	//接收满标志清零		
}
//主程序
void 		main (void)
{
	PORTA=0;
	LATA=0;
	ADCON1=0X0F;

	TRISA=0x00;

	PORTAbits.RA4=0;
 	INTCON=0x00;//禁止所有中断

	cnt=0;

	initcan();//初始化can口
	WDTCON=0;//禁止看门狗
	INTCON=0xc0;//使能中断
	while(1)
	{
 		TXB0CONbits.TXREQ=1;//请求发送
 		while(PIR3bits.TXB0IF!=1){;}//等待发送完成
		TXB0CONbits.TXREQ=0;//禁止发送
//		while(CAN_FLAG==0){;}//等待接收数据
//		CAN_FLAG=0;//清除接收完成标志


/*
		TXB0D0=RXB0D0;
		TXB0D1=RXB0D1;
*/
	}
}

⌨️ 快捷键说明

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