User manual
258
mikoPascal PRO for dsPIC30/33 and PIC24
MikroElektronika
RxTx_Data[0] := 9;
CAN1Initialize(1,3,3,3,1,Can_Init_Flags); // initialize CAN
CAN1SetOperationMode(_CAN_MODE_CONFIG,0xFF); // set CONFIGURATION mode
CAN1SetMask(_CAN_MASK_B1, -1, _CAN_CONFIG_MATCH_MSG_TYPE and _CAN_CONFIG_XTD_MSG);
// set all mask1 bits to ones
CAN1SetMask(_CAN_MASK_B2, -1, _CAN_CONFIG_MATCH_MSG_TYPE and _CAN_CONFIG_XTD_MSG);
// set all mask2 bits to ones
CAN1SetFilter(_CAN_FILTER_B2_F3,ID_2nd,_CAN_CONFIG_XTD_MSG); // set id of î‚¿lter B2_F3
to 2nd node ID
CAN1SetOperationMode(_CAN_MODE_NORMAL,0xFF); // set NORMAL mode
CAN1Write(ID_1st, RxTx_Data, 1, Can_Send_Flags);
while TRUE do
begin
Msg_Rcvd := CAN1Read(Rx_ID , RxTx_Data , Rx_Data_Len, Can_Rcv_Flags);
if ((Rx_ID = ID_2nd) and (Msg_Rcvd <> 0)) <> 0 then
begin
PORTB := RxTx_Data[0]; // output data at PORTB
RxTx_Data[0] := RxTx_Data[0] + 1;
Delay_ms(10);
CAN1Write(ID_1st, RxTx_Data, 1, Can_Send_Flags); // send incremented data
back
end;
end;
end.
Code for the second CAN node:
Copy Code To Clipboard
program Can_2nd;
var Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags, Rx_Data_Len : word;
RxTx_Data : array[8] of byte;
Rx_ID : longint;
Msg_Rcvd : word;
const ID_1st : longint = 12111;
const ID_2nd : longint = 3; // node IDs
begin
ADPCFG := 0xFFFF;
PORTB := 0;
TRISB := 0;
Can_Init_Flags := 0;
Can_Send_Flags := 0;