void canmessage_write(struct message *ptransmit) { unsigned int id_1,id_2,id_3; unsigned int id_1_hilf,id_2_hilf,id_3_hilf; unsigned int trdscr_wert; unsigned int i; id_3=(ptransmit->id)&0x0f; id_2=((ptransmit->id)/16)&0x0f; id_1=((ptransmit->id)/256)&0x0f; id_1_hilf=id_1*32; id_2_hilf=id_2*2; id_3_hilf=id_3/8; trdscr_wert=(id_1_hilf)|(id_2_hilf)|(id_3_hilf); canreg_write(10,trdscr_wert); id_3=(ptransmit->dlc)&0x0f; id_2=(ptransmit->rtr)*16; id_1=((ptransmit->id)&0x0f)*32; trdscr_wert =(id_3)|(id_2)|(id_1); canreg_write(11,trdscr_wert); for (i=0;i<=7;i++) { canreg_write (12+i,ptransmit->byte[i]); } canreg_write (1,0x01); //Sendung ausl”sen do { } while (((canreg_read(2))&0x08)==0); //warten bis Sendung fertig } /*----CAN Botschaft empfangen---------------------------------------------*/ void canmessage_read(struct message *preceive) { unsigned int id_1,id_2; unsigned int i; id_1=canreg_read(20); id_2=canreg_read(21); preceive->id=(id_1/32)*256+((id_1/2)&0x0f)*16+((id_1)&0x01)*8+(id_2/32); preceive->rtr=(id_2/16)&0x01; preceive->dlc=(id_2)&0x0f; for(i=0;i<=7;i++) { preceive->byte[i]=canreg_read(22+i); } canreg_write(1,0x0C); /*ReceiveBuffer und DataOverrun wieder freigeben*/ }