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

📄 sample2.c

📁 瑞萨的DOME板LIN主从节点程序调试通过可以使用
💻 C
字号:
/****************************************************************/
/* 项目名称     : R8C/23 CAN/LIN Demo Board		                */
/*              : 样例程序2                                     */
/*              : CAN收发										*/
/* 硬件环境		: R0K521237C000BB								*/
/* MCU型号      : R5F21237JFP                                   */
/* C编译器		: NC30WA,版本5.30.r02及以上					*/
/* 文件名	    : Sample2.c										*/
/* 版本			: 1.0                                           */
/* 作者			: wangsy                                        */
/* 修订历史     :                                               */
/*			修订者		时间		版本	说明				*/
/*			wangsy		2006/9/11	1.0		初版发行			*/
/*																*/
/****************************************************************/
/*		Copyright, 2006 RENESAS TECHNOLOGY CORPORATION &        */
/*                      RENESAS SOLUTIONS CORPORATION			*/
/****************************************************************/

/*------------包含的头文件--------------*/
#include 	"..\Inc\Comdef_r823.h"
#include 	"..\Inc\CAN.h"

#define	OSC_STABLE_TIME 255						// 时钟稳定延时:1指令周期 * 255
/*-------------变量定义-----------------*/
uchar8 ucCounter_1s_trigger;
uchar8 ucCounter_300ms_trigger;

/*-------------函数声明-----------------*/
void main(void);
void vISR_TRB( void );

/*------------函数定义------------------*/
/*------------------------------------------------------
  名称		: main
  功能		: 主函数
  入口		: 无
  出口		: 无
  调用		: 无
  寄存器	: all
------------------------------------------------------*/
void main(void)
{
	uchar8 	ucI;
	uchar8	lp_dlc;

	asm("FCLR I");

	/*--------------------------------------------------
						  时钟初始化					
	 --------------------------------------------------*/
	/* 切换主时钟:外接晶体 */
	prc0 = HOFF;				// 寄存器写保护:禁用
	cm02 = LEN; 				// 等待模式下时钟 : On
	cm05 = LON; 				// XIN 振荡器输入: On
	cm06 = LON; 				// cm16/17: 使能
	cm10 = LON; 				// 所有时钟: On
	cm13 = HON; 				// Xin-Xout引脚功能:外接晶体
	cm14 = HON; 				// 片内低速时钟:运行
	cm15 = HON; 				// Xin-Xout驱动能力:高
	cm16 = 0;					// 主时钟分频比:1
	cm17 = 0;
	ocd0 = HON; 				// 时钟停止检测功能:开启
	ocd1 = HON;
	ocd2 = LON; 				// CPU时钟源:XIN
	fra01 = LOFF;				// 内部时钟使能位: 关闭
	fra00 = LOFF;				// 片内高速时钟:禁用
	prc0 = 0;					// 寄存器写保护:启用
	
	/* 等待时钟稳定	*/
	ucI = 0;
	while ( ucI < OSC_STABLE_TIME )
	{
		ucI++;
	}

    /*--------------------------------------------------
               设置Timer RB,作为监控程序定时器       
	  			10ms 中断一次,自动重载				
    --------------------------------------------------*/
	tstop_trbcr = HOFF;						// 设置前, 确认定时器停止
	while ( tcstf_trbcr == HON )
	{
	}
	
	tmod0_trbmr = 0;						// 模式: 定时器模式
	tmod1_trbmr = 0;

	tck0_trbmr = 1;							// 计数源: f8
	tck1_trbmr = 0;
	tckcut_trbmr = 0;

	trbpre = 249;							// 计数源分频因子: 1/(TRBPRE+1)*(TRBPR+1)
	trbpr = 99;

    ilvl0_trbic = 1;						// 中断: 允许, 优先级1
    ilvl1_trbic = 0;
    ilvl2_trbic = 0;
	ir_trbic = 0;

	tstart_trbcr = HON;						// 启动计时器
	while ( tcstf_trbcr == LOFF )
	{
	}
	ucCounter_1s_trigger = 0;				// 初始化周期性触发信号 

    /*---------------------------------------------------
               设置 beeper						     
    ---------------------------------------------------*/
	pd2_7 = PPORT_OUTPUT;					// 输出
	p2_7 = PPORT_HIGH;						// 高电平,不响
	ucCounter_300ms_trigger = 0;			// 初始化周期性触发信号
	
	asm("FSET I");

	config_can0();							// CAN0 初始化

    /*---------------------------------------------------
               发送的数据帧初始化					     
    ---------------------------------------------------*/
	TransmitData.id = SND_FRM_ID;	
	TransmitData.dlc = 8;
	for ( lp_dlc = 0; lp_dlc < TransmitData.dlc; lp_dlc ++ )
	{
		TransmitData.data[lp_dlc] = 0;
	}

	can0_receive();							//CAN0接收启动

	while(1)
	{
		//1秒钟发送一次数据帧
		if(ucCounter_1s_trigger >= 100)
		{
			ucCounter_1s_trigger = 0;		//清零触发标志
			can0_transmit();				//调用CAN0发送
		}
		else
		{
		}

		// 接收到CAN0数据帧,打开蜂鸣器,响300ms
		if(ucFlag_CAN0_RE == YES)
		{
			ucFlag_CAN0_RE = NO;

			// 蜂鸣器处理
			p2_7 = PPORT_LOW;				// 打开蜂鸣器
		}
		else
		{
		}
		
		if( (p2_7 == PPORT_LOW) && (ucCounter_300ms_trigger < 30) )
		{
		}
		else
		{
			ucCounter_300ms_trigger = 0;	// 300ms结束,清空计数器
			p2_7 = PPORT_HIGH;				// 关闭蜂鸣器
		}
	}
}

/*------------------------------------------------------
  名称		: vISR_TRB
  功能		: 中断处理函数:TimerRB中断处理
  入口		: 无
  出口		: 无
  调用		: 无
  寄存器	: 无
------------------------------------------------------*/
#pragma	interrupt vISR_TRB
//    注册成为中断服务程序    
void vISR_TRB( void )
{
	// 计数器累加
	ucCounter_1s_trigger++;		
	ucCounter_300ms_trigger++;
}

⌨️ 快捷键说明

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