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

📄 can.c

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 C
字号:
//////////////////////////////////////////////////////////
//单向查询
//说明:
//		本程序是结点2,只负责发送
//////////////////////////////////////////////////////////


//-------------------------------------------------------------------
//					查询发送方式1总结:
//检测上次发送完成(TXOK)
//前提条件:CAN_Init()子程序中,必须事先将CANPAGE对象的TXOK位置位
//-------------------------------------------------------------------
//	IF 上次发送完成(TXOK) THEN
//		(1)、清除TXOK
//		(2)、填写发送数据
//		(3)、启动发送

//-------------------------------------------------------------------
//					查询发送方式2总结:
//while (当前发送完成)
//-------------------------------------------------------------------
//	(1)、填写发送数据
//	(2)、启动发送
//	(3)、while (TXOK)
//	(4)、清除TXOK

#define _CAN_H
#include "AT90CAN128.H"

uint8 send_Buf[8] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};


void CAN_ClrMailBox(void) 
{ 
	uint8 mob_channel;
	uint8 mob_data; 

	for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
	{
		CANPAGE = (mob_channel << 4);
		CANIDT4        = 0; 
		CANIDT3        = 0; 
		CANIDT2        = 0; 
		CANIDT1        = 0; 
		CANIDM4        = 0; 
		CANIDM3        = 0; 
		CANIDM2        = 0; 
		CANIDM1        = 0; 
		CANSTMOB = 0; 
		CANCDMOB = 0; 
		for (mob_data = 0; mob_data < 8; mob_data++) 
   			CANMSG = 0; 
	}
} 


void CAN_Init(void)
{
	CAN_SOFT_RESET();
	while (CANGSTA & (1 << ENFG));
	CAN_ClrMailBox();
	CANBT1 = 0x02;
	CANBT2 = 0x04;
	CANBT3 = 0x13;
	CANTCON = 0xFF;
	CANPAGE = 0x00;
	CANSTMOB = 0x00;
	CANIDT4 = 0x00;
	CANIDT3 = 0x00; 
	CANIDT2 = 0x40;
	CANIDT1 = 0x02;
	CANSTMOB = BIT(TXOK);     
	CAN_START();
	while (!(CANGSTA & (1 << ENFG)));
}


/*
#pragma interrupt_handler AT90CAN128_ISR:iv_CANIT
void AT90CAN128_ISR(void)
{
	uint8 i;
	uint8 save_canpage;

   save_canpage = CANPAGE;
// echo receive data on channel 0 reception 
   
	CANPAGE = (0 << 4);						// CHNB=0x00; select channel 0 
	if (CANSTMOB & (1 << RXOK))
	{
		CHA_Init();
    USART1_send_buffer[0] = CANIDT1;
    USART1_send_buffer[1] = CANIDT2;
		for (i = 0 ; i < 8 ; i++) 
			USART1_send_buffer[2+i] = CANMSG;	// save receive data 
    USART1_Begin_Send();
        
        
		CANPAGE = (1 << 4);						// CHNB=0x00; select channel 1    
// Channel 1 configuration 
		CANCDMOB = 0x00;						// reset channel 1 configuration
		for (i = 0 ; i < 8 ; i++) 
			CANMSG = i;							// load saved data 
		CANCDMOB |= 0x08;						//	DLC_MAX; /* transmit 8 bytes 
		CANCDMOB |= 0x40;						//	CH_TxENA; /* emission enabled 
		CANEN2 |= (1 << 1);						// channel 1 enable 
		CANSTMOB=0x00;							// reset channel 1 status 

    
	}   
	CANPAGE = (0 << 4);						// CHNB=0x00; select channel 0 
	CANCDMOB = 0x00;							//	CH_DISABLE;  reset channel 0 configuration 
	CANCDMOB |= 0x08;						//	DLC_MAX;  receive 8 bytes 
	CANCDMOB |= 0x80;						//CH_RxENA;  reception enable 
	CANEN2 |= (1 << 0);						// channel 0 enable 
	CANSTMOB=0x00;							// reset channel 0 status 
	CANPAGE= save_canpage; 					// restore saved context 
	CANGIT = 0x00; 							// reset all flags    
}   
*/

⌨️ 快捷键说明

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