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

📄 remote_can_t.c

📁 这是《C8051F系列单片机开发与C语言编程》 配套的源代码
💻 C
字号:
//////////////远程帧控制发送程序///////////////
////////////remote_can_t.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]={0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98};
xdata uchar ss2[LEN]={0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8};
bit isupB;
xdata uchar countA;
void canini(){
	clear_msg_objects();
	remote_rqst_ini(MSGNUMA,4);
	remote_send_ini(MSGNUMB,2);
	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;
	remote_rqst(MSGNUMA);
	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值检查数据是否更新
		}
   } 
   SFRPAGE=temppage;
}
		

⌨️ 快捷键说明

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