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

📄 remote_can_r.c

📁 Cygnal公司的著名产品C8051f系列单片机
💻 C
字号:
/////////远程帧控制接收程序/////////////////////
//////////remote_can_r.c///////////////////////
#include "candeal2.h"
#define LEN 8
#define MSGNUMA 2
#define MSGNUMB 5
#define NUMAPEND 0x0002
#define NUMBPEND 0x0010
xdata uchar rr1[LEN];
xdata uchar rr2[LEN];
xdata uchar ss1[LEN]={0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8};
xdata uchar ss2[LEN]={0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8};
bit isupB;
xdata uchar countA;
void canini(){
	clear_msg_objects();
	remote_rqst_ini(MSGNUMA,2);
	remote_send_ini(MSGNUMB,4);
	EIE2 |= 0x20;
	EA = 1;
	SFRPAGE = CAN0_PAGE;
	CAN0CN=0X41;
	CAN0ADR=BITREG;
	CAN0DAT=0X34c0;//调波特率
	start_CAN();
}
void config(){
//看门狗禁止
	WDTCN = 0x07;	
    WDTCN = 0xDE;   
   	WDTCN = 0xAD;
	SFRPAGE = 0x0F;
//交叉开关使能,但没有进行外围设备配置
	XBR0 = 0x00;	
	XBR1 = 0x00;	
	XBR2 = 0x40;
 	XBR3 = 0x00;   
//管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
 	SFRPAGE = 0x0F;
 	P0MDOUT = 0x00; 
 	P1MDIN = 0xFF;  
//晶振配置,采用内部晶振8分频
	SFRPAGE = 0x0F;
 	CLKSEL = 0x00;  
	OSCXCN = 0x00;	
	OSCICN = 0x84;	
}
main(){
	uchar i;
	config();
	for(i=0;i<LEN;i++){
		rr1[i]=0;
		rr2[i]=0;
	}
	canini();
	remote_send_updata(MSGNUMB,ss1,LEN);
	isupB=0;
	countA=0;
	while(1);
	
}
void CAN_ISR(void) interrupt 19

{	uint temp;
	temppage=SFRPAGE;
    SFRPAGE = CAN0_PAGE;
    status = CAN0STA;
    if((status&0x10) != 0){
   		CAN0STA&=0xef;
		CAN0ADR=INTPEND1;
		temp=CAN0DAT;
		if((temp&NUMAPEND)!=0){
			if(countA==0){
				receive_data (MSGNUMA,rr1,LEN);
				remote_rqst(MSGNUMA);
			}
			if(countA==1)//总共发送两次远程帧请求
				receive_data (MSGNUMA,rr2,LEN);
			countA++;
		}
	}
	if ((status&0x08)!=0){
	   	CAN0STA&=0xf7;
		CAN0ADR=INTPEND1;
		temp=CAN0DAT;
		if((temp&NUMBPEND)!=0){
			remote_send_updata(MSGNUMB,ss2,LEN);
			isupB=1;//主程序中可通过查询ispuB值检查数据是否更新
			if(countA==0){
				remote_rqst(MSGNUMA);//发送远程帧请求
			}
		}
	}
   SFRPAGE=temppage;
}
		

⌨️ 快捷键说明

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