can总线源代码

源代码在线查看: can程序.c

软件大小: 3 K
上传用户: wenyishizhu
关键词: can 总线 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				 * Field Bus & Embedded System LAB (B&E LAB) OF  IMUST                 
				 *  
				 *              
				 * FileName        :   candemo.c can示例小程序 
				 * FileID          :   
				 * Abstract        :   同期性的以ID号为0x100发送 1 2 3 4 5 6 7 8 信息,
				 * 				   	   再接收到ID号0x200发送的一字节信息后,闪一下PB0口的小灯。
				 *
				 * 
				 * Version         :   
				 * Author          :     
				 * Professor       :   
				 * FinishDate      :   
				 *
				 * HistoryVersion  :   None
				 * HistoryAuthor   :   None
				 * FinishDate      :   None
				 *
				 * CPU             :   AT90CAN128
				 * Oscillator      :   4MHz
				 * CompileIDE      :   ImageCraft ICCAVR 6.31A & UltraEdit
				 *
				 * Testbench	   :   程序工作在250K, 扩展格式
				 *                     测试平台IXXAT PCI和USB2CAN模块,及CanAnayler32分析软件。
				 *
				 */
				
				/*********************************/ 
				/* Std HeaderFile 标准头文件包含 */
				/*********************************/ 
				#include 
				#include 
				
				/***********************************/
				/* My HeaderFile  自定义头文件包含 */
				/***********************************/
				
				
				
				/*********************/
				/* Definition 宏定义 */
				/*********************/
				#define uchar unsigned char
				#define uint  unsigned int
				
				/*********************************/ 
				/* Function Declaraton  函数声明 */
				/*********************************/  
				
				void CAN_Init(void);
				void DELAY(void);
				
				uchar tflag=1;
				
				
				#pragma interrupt_handler canit_isr:19 
				void canit_isr(void)
				{
				 if((CANSIT2 & 0x01) == 0x01)		/* 发生发送中断 */
				 {
				  CANPAGE = 0x00;	 				/* 选中中断的MOB0 */
				  CANSTMOB &= 0xBF;					/* 清除中断标志 */
				  CANCDMOB &= 0x3F;
				  
				  tflag = 0;  	   					/* 置一个标置为0, 以便让main的while(tflag)跳出循环 */
				 }
				 else	   	  	   	 		        /* 发生接收中断 */
				 {
				  CANPAGE = 0x10;					/* 选中中断的MOB1 */
				  CANSTMOB &= 0xDF;					/* 清接收中断标志 */
				  PORTC = 0xFE;
				  DELAY();
				  PORTC = 0xFF;
				  DELAY();	   						/* 让小灯闪一下,证明进入这个中断 */
				  CANCDMOB |= 0x80;					/* 再次启用接收 */
				 }
				}
				
				/* 主函数 */
				void main(void)
				{
				 CLI();		   		 	  			/* 关中断 */
				 /* 其它初始化程序 */
				 
				 PORTC = 0xFF;
				 DDRC = 0xFF;
				 
				 CAN_Init();	   	 				/* CAN控制器初始化 */
				 SEI();							 	/* 开中断 */ 
				 
				 CANPAGE = 0x10;					/* 选中接收的MOB */
				 CANCDMOB |= 0x80;					/* 开启接收 */
				 
				 while(1)
				 {
				  CANPAGE = 0x00;					 /* 选中发送的MOB0 */
				  CANCDMOB |= 0x40;					 /* 开始发送 */
				  while(tflag == 1)					 /* 等待发送中断产生 */
				  {}
				  tflag = 1;
				  
				  DELAY();
				  DELAY();	  	 				 	/* 延时一下 */
				 }
				}
				/**************************************/
				
				
				/* CAN控制器初始化 */
				void CAN_Init(void)
				{
				 uchar i;
				 CANGCON = 0x02;					 /* 启用CAN控制器 */
				 while(ENFG == 0)					 /* 等待启用成功 */
				 {
				 }
				 CANGIE = 0xB0;	   	 				 /* 启用发、收、CAN总中断 */
				 
				 CANIE2 = 0x03;						 /* 允许MOB0和MOB1中断 */
				 CANIE1 = 0x00;						 /* 禁止MOB0和MOB1以外的MOB中断 */
				 CANBT1 = 0x02;
				 CANBT2 = 0x04;
				 CANBT3 = 0x13; 					 /* 设定波特率,可以在AT90CAN128手册中查到,也可以自己计算 */
				 		  					         /* 我这用的是250K */
				 
				 CANPAGE = 0x00;					 /* 选中MOB0 用于发送MOB */
				 CANCDMOB = 0x18;					 /* 设定为扩展帧格式29位标识, 8字节 */
				 CANIDT1 = 0x00;
				 CANIDT2 = 0x00;
				 CANIDT3 = 0x08;
				 CANIDT4 = 0x00;					/* 发送ID号为0x100 */
				 for(i=1; i				 {
				  CANMSG = i;
				 }		   	   	   					/* 发送的数据为 1 2 3 4 5 6 7 8 */
				 
				 CANPAGE = 0x10;					/* 选中MOB1作为接收中断用 */
				 CANCDMOB = 0x11;					/* 设定为扩展29位标识, 接收1字节 */
				 CANIDT1 = 0x00;
				 CANIDT2 = 0x00;
				 CANIDT3 = 0x10;
				 CANIDT4 = 0x00;					/* 只接收ID号为0x200的标识发来的信息 */
				 CANIDM1 = 0xFF;
				 CANIDM2 = 0xFF;
				 CANIDM3 = 0xFF;
				 CANIDM4 = 0xFF;
				}
				/***********************************/
				
				/* 延时函数 */
				void DELAY(void)
				{
				 uint i;
				 uint j;
				 
				 for(i=0; i				 {
				  for(j=0; j				  {
				   NOP();
				   NOP();
				  }
				 }
				}
				/***********************************/
				
							

相关资源