void CAN0_TransferMO (U8 obj_num)
{
// This function assumes that the message object is fully initialized
// in CAN0_Init and so all it has to do is fill the data registers and
// initiate transmission
U8 SFRPAGE_save = SFRPAGE;
SFRPAGE = CAN0_PAGE; // All CAN register are on page 0x0C
// Initialize all 8 data bytes even though they might not be sent
// The number to send was configured earlier by setting Message Control
CAN0IF1DA1H = obj_num; // Initialize data registers based
CAN0IF1DA1L = obj_num + 1; // on message object used
CAN0IF1DA2H = obj_num + 2;
CAN0IF1DA2L = obj_num + 3;
CAN0IF1DB1H = obj_num + 4;
CAN0IF1DB1L = obj_num + 5;
CAN0IF1DB2H = obj_num + 6;
CAN0IF1DB2L = obj_num + 7;
CAN0IF1CM = 0x0087; // Set Direction to Write
// Write TxRqst all 8 data bytes
CAN0IF1CR = obj_num; // Start command request
while (CAN0IF1CRH & 0x80); // Poll on Busy bit
SFRPAGE = SFRPAGE_save;
}