/**********************(abc927-26K80-1.c)************
* ECAN テスト ノード1 (PIC18F26K80)
*****************************************************/
#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/ecan.h"
#include "i2c_LCD_lib.h"
//------ 共通変数の宣言
uCAN_MSG rxMessage ; // 受信メッセージバッファ
//------ 受信の処理
void processRxMessage(void) {
union {
unsigned char c[2] ;
unsigned int i ;
} data ;
char buf[12] ;
// 標準の識別子IDか?
if (rxMessage.frame.idType == dSTANDARD_CAN_MSG_ID_2_0B) {
switch (rxMessage.frame.id) {
case 0x123 :
data.c[0] = rxMessage.frame.data0 ;
data.c[1] = rxMessage.frame.data1 ;
sprintf(buf,"%8d",data.i) ;
LCD_cursor(0,1) ; // LCDの2行目に表示
LCD_str(buf) ;
break ;
default :
LCD_cursor(0,1) ;
LCD_str("Unknown ") ;
break ;
}
}
}
/***********************************************
* Main application
************************************************/
void main(void)
{
uint8_t rc;
SYSTEM_Initialize();
LCD_init();
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
LCD_str("ECAN");
LCD_cursor(0,1); LCD_str(" TEST");
while (1) {
if ( CAN_receive(&rxMessage)) {
// 受信したら処理を行う
processRxMessage() ;
}
}
}
/******* End of File ********/
|
|
/**********************(abc927-26K80-2.c)************
* ECAN テスト ノード2 (PIC18F26K80)
***************************************************/
#include "mcc_generated_files/mcc.h"
#define EU_BFSIZE 120
#define DBF_SIZE 512 // File/Memory用BFサイズ
#define MBF_SIZE 64 // メッセージ用BFサイズ
/***** グローバル変数 ***************************/
//--- タイマー用変数
uint8_t TFlg; // タイマーフラグ
//----- EUSARTシリアル用
char RBuf[EU_BFSIZE]; // 受信文字Buffer
uint8_t SFlg; // 受信フラグ
static uint8_t sIdx = 0; // 受信文字列Index
//---- 汎用データ処理用
char Msg[MBF_SIZE]; // コメント等送信用文字列
//---- CANデータ処理用
uCAN_MSG txAdcResult ; // 送信メッセージバッファ
/************************************************
* タイマ0 Callback関数 (1秒周期割り込み) *
************************************************/
void TMR0_Process(void){
TFlg = 1; // タイマーフラグセット
}
/*=== Eusart受信割り込みハンドラー =============*
* eusrt.cのEUSART_Recive_ISRに追加すること *
*---------------------------------------------*/
void myEusart(void){
char ch;
ch = (char)EUSART1_Read();
#if ECHO == ON
EUSART1_Write(ch);
#endif
if((ch == 0x0a)||(ch == 0x0d)){ // 改行処理
RBuf[sIdx] = 0;
sIdx = 0;
SFlg = 1;
}else if((ch == 0x08)&&(sIdx > 0)){ // BS処理
sIdx--;
}else{
if(sIdx < EU_BFSIZE) RBuf[sIdx++] = ch;
}
}
uint16_t ad_conv(void){
ADCON0bits.GO_nDONE = 1; // Start the conversion
while (ADCON0bits.GO_nDONE);
return ((uint16_t)((ADRESH << 8) + ADRESL));
}
/***********************************************
* Main application
***********************************************/
void main(void){
union { unsigned char c[2] ;
unsigned int i ; } data ;
SYSTEM_Initialize();
TMR0_SetInterruptHandler(TMR0_Process); // Timer0 Callback関数
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
IO_RC2_SetHigh();
puts("--- start ---\n");
__delay_ms(3000);
while (1) {
if(TFlg){
IO_RC2_Toggle();
TFlg = 0;
data.i = ad_conv();
printf("%d\n",data.i);
txAdcResult.frame.idType = dSTANDARD_CAN_MSG_ID_2_0B ;
txAdcResult.frame.id = 0x123 ;
txAdcResult.frame.dlc = 2 ;
txAdcResult.frame.data0 = data.c[0] ;
txAdcResult.frame.data1 = data.c[1] ;
CAN_transmit(&txAdcResult) ; // メッセージデータを送信
}
if(SFlg){
printf("%s\n",RBuf);
}
SFlg = 0;
}
}
/******* End of File ********/
|