?? sample2.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 + -