User manual
288
mikoC PRO for dsPIC
MikroElektronika
Code for the second CAN node:
Copy Code To Clipboard
unsigned int Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can ags
unsigned int Rx_Data_Len; // received data length in
bytes
char RxTx_Data[8]; // can rx/tx data buffer
char Msg_Rcvd; // reception ag
unsigned long Tx_ID, Rx_ID; // can rx and tx ID
void main() {
ADPCFG = 0xFFFF;
PORTB = 0;
TRISB = 0;
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // clear ags
Can_Rcv_Flags = 0; //
Can_Send_Flags = _CAN_TX_PRIORITY_0 & // Form value to be used
_CAN_TX_XTD_FRAME & // with CAN2Write
_CAN_TX_NO_RTR_FRAME;
Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE & // Form value to be used
_CAN_CONFIG_PHSEG2_PRG_ON & // with CAN2Initialize
_CAN_CONFIG_XTD_MSG &
_CAN_CONFIG_DBL_BUFFER_ON &
_CAN_CONFIG_MATCH_MSG_TYPE &
_CAN_CONFIG_LINE_FILTER_OFF;
CAN2Initialize(1,3,3,3,1,Can_Init_Flags); // initialize CAN2
CAN2SetOperationMode(_CAN_MODE_CONFIG,0xFF); // set CONFIGURATION mode
CAN2SetMask(_CAN_MASK_B1,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG); //
set all mask1 bits to ones
CAN2SetMask(_CAN_MASK_B2,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG); //
set all mask2 bits to ones
CAN2SetFilter(_CAN_FILTER_B1_F1,12111,_CAN_CONFIG_XTD_MSG); // set
id of lter B1_F1 to 12111
CAN2SetOperationMode(_CAN_MODE_NORMAL,0xFF); // set NORMAL mode
Tx_ID = 3; // set tx ID
while(1) { // endless loop
Msg_Rcvd = CAN2Read(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags); // receive
message
if ((Rx_ID == 12111u) && Msg_Rcvd) { // if message received check id
PORTB = RxTx_Data[0]; // id correct, output data at PORTB
RxTx_Data[0]++; // increment received data
CAN2Write(Tx_ID, RxTx_Data, 1, Can_Send_Flags); // send incremented data back
}
}
}