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

📄 sample1.c

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

	#include	"..\inc\Comdef_r823.h"
	#include	"..\inc\Main.h"
	#include	"..\inc\Main_cons.h"
	#include	"..\inc\Key.h"
	#include	"..\inc\Disp.h"
	#include	"..\inc\Misc.h"
	#include	"..\inc\Isr.h"

	void main( void );

/*------------------------------------------------------
  名称		: main
  功能		: 初始化,监控程序
  入口		: 无
  出口		: 无
  调用		: vKey_exe, vKey_read, vDisp_exe, vLcd_init,vMisc_beep_100ms
  寄存器	: 全部
------------------------------------------------------*/
void main( void )
{
	uchar8 ucI;
	uint16 uiJ;
	uchar8 ucMenu_ID;

    /*--------------------------------------------------*/
    /*                    时钟初始化                    */
    /*--------------------------------------------------*/
	/* 切换主时钟:外接时钟	*/
	prc0 = HOFF;				// 寄存器写保护:禁用
	cm02 = LEN;					// WAIT模式下时钟: 启用
	cm05 = LON;					// Xin引脚输入: 启用
	cm06 = LON;					// cm16/17: 启用
	cm10 = LON;					// 时钟总开关: 开
	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 = LEN;					// 寄存器写保护:启用
	/* 等待时钟稳定	*/
	ucI = 0;
	while ( ucI < OSC_STABLE_TIME )
	{
		ucI++;
	}

    /*--------------------------------------------------*/
    /*                    IO引脚初始化                  */
    /*--------------------------------------------------*/

	prc2 = HON;					// 端口方向寄存器写保护:关
	pd0 = 0xc0;					// P0.0 ~ P0.5:输出,P0.6 ~ P0.7:AD输入
	prc2 = LOFF;				// 端口方向寄存器写保护:开
	pd1 = 0xd0;					// P1.0 ~ P1.3:按键,输入
								// P1.4       :LIN TxD,输出
								// P1.5       :LIN RxD,输入
								// P1.6 ~ P1.7:输出
	pd2 = 0x80;					// P2.7:输出
	pd3 = 0xbb;					// P3.0 P3.1 P3.3:输出
								// P3.4 P3.5 P3.7:SSU,输出
	pd4 = 0x18;					// P4.3:CAN收发器CS,输出
								// P4.4:输出
								// P4.5:INT0,输入
	pd6 = 0x7b;					// P6.0:输出
		           				// P6.1:CAN TxD,输出
								// P6.2:CAN RxD,输入
								// P6.3:LIN收发器CS,输出
								// P6.4:LCD地址选择,输出
								// P6.5:LCD复位,输出
								// P6.6:UART调试口,输出
								// P6.7:UART调试口,输入

    /*--------------------------------------------------*/
    /*               设置SSU(液晶模块接口)            */
    /*--------------------------------------------------*/
    // SSU相关IO端口方向
	pd3_3 = 0;								// SSI: Input
	pd3_4 = 1;								// SCS: Output
	pd3_5 = 1;								// SSCK: Output
	pd3_7 = 1;								// SSO: Output	

	iicsel = 0;								// SSU模块:启用
	ice_iccr1 = 0;

	re_sser = 0;							// 设置前关闭收发
	te_sser = 0;
	ssums_ssmr2 = 1;						// 握手信号:4-wire bus

	cphs_ssmr = 0;							// 采样点:偶数沿
	cpos_ssmr = 0;							// SCLK空闲电平:高
	mls_ssmr = 0;							// 数据方向:高位在前

	mss_sscrh = 1;							// 端口类型:主机

	scks_ssmr2 = 1;							// SCLK引脚:时钟输出
	sckos_ssmr2 = 0;
	soos_ssmr2 = 0;
	css0_ssmr2 = 0;							// SCS引脚:输出
	css1_ssmr2 = 1;
	csos_ssmr2 = 0;							// CMOS类型
	bide_ssmr2 = 0;							// SSO和SSI组成串行环路
	
	cks0_sscrh = 0;							// 时钟源:f1 / 4
	cks1_sscrh = 1;
	cks2_sscrh = 1;

	while ( orer_sssr == 1 )				// 清除过载错误标志
	{
		orer_sssr = 0;
	}

	rsstp_sscrh = 1;

    re_sser = 0;							// 收发功能:单发
	te_sser = 1;
	if ( tend_sssr == 1 )
	{
		tend_sssr = 0;
	}

	ceie_sser = 0;							// 中断源:发送结束
	rie_sser = 0;
	teie_sser = 1;
	tie_sser = 0;
	ce_sssr = 0;
	rdrf_sssr = 0;

    ilvl0_ssuaic = 1;						// 中断: 允许, 优先级1
    ilvl1_ssuaic = 0;
    ilvl2_ssuaic = 0;
	ir_ssuaic = 0;

    /*--------------------------------------------------*/
    /*           初始化非周期事件触发标志				*/
    /*--------------------------------------------------*/
	ucKey_temp = NO_KEY;
	ucKey_ID = NO_KEY;
	ucKey_delay_counter = 0;

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

	ucFlag_10ms_trigger = OFF;				// 初始化定时触发信号

	/*--------------------------------------------------*/
    /*           MCU初始化完成,打开中断总开关          */
    /*--------------------------------------------------*/
	asm("	FSET 	I		");				// 允许所有中断

    /*--------------------------------------------------*/
    /*                显示初始化	                    */
    /*--------------------------------------------------*/
	vDisp_init();

	ucMenu_ID = HOME;
	ucCursor_M1 = 0;
	ucCursor_M2 = 0;
	vDisp_exe( ucMenu_ID, ucCursor_M1, ucCursor_M2 );

	/* ============================================= */
	/*                   主程序						 */
	/* ============================================= */
    while ( 1 )
	{
		/* --------------------------------------------- */
		/*                   键处理						 */
		/* --------------------------------------------- */
		if ( ucKey_ID != NO_KEY )
		{
			vKey_exe( ucMenu_ID, ucKey_ID );						// 响应按键

			ucMenu_ID = ucMENU_TABLE[ ucMenu_ID ][ ucKey_ID ];		// 状态转移
			
			vMisc_buzzer_exe( ucKey_ID );							// 控制蜂鸣器

			vDisp_exe( ucMenu_ID, ucCursor_M1, ucCursor_M2 );		// 刷新显示

			ucKey_ID = NO_KEY;										// 键处理完毕,清除标志
		}
		else
		{
		}

		/* --------------------------------------------- */
		/*               键扫描,蜂鸣器					 */
		/* --------------------------------------------- */
		if ( ucFlag_10ms_trigger == YES )
		{
			/* --------------------------------------------- */
			/*              键盘扫描 间隔10ms				 */
			/* --------------------------------------------- */
			vKey_read();

			/* --------------------------------------------- */
			/*              蜂鸣器计时 间隔10ms				 */
			/* --------------------------------------------- */
			vMisc_buzzer_timing();
			
			ucFlag_10ms_trigger = NO;								// 处理完毕,清除标志
		}
		else
		{
		}
	}
}

⌨️ 快捷键说明

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