📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <string.h>
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
/*****************************
Function Prototype
*****************************/
extern void Init_CAN0(void);
extern void Init_CAN4(void);
void CAN0TxData(void);
void CAN4TxData(void);
void delay(void);
/*****************************
Variable Declaration
*****************************/
struct CANDATA{
byte id[4];
byte data[8];
byte length;
byte prio;
};
struct CANDATA send_data;
struct CANDATA recv_data;
unsigned char j=0;
unsigned char txflag=1;
void main(void) {
DDRB = 0xff;
PORTB = 0;
Init_CAN0();
Init_CAN4();
EnableInterrupts;
for(;;) {
PORTB++;
CAN4TxData();
delay();
}
}
void CAN0TxData(void) {
unsigned char *s,*d;
char cansel;
unsigned char i;
while(txflag!=1);
txflag = 0;
j++;
send_data.id[0] = 0x47;
send_data.id[1] = 0xF8;
send_data.id[2] = j;
send_data.id[3] = 0x10;
send_data.data[0] = j;
send_data.data[1] = j+1;
send_data.data[2] = 'c';
send_data.data[3] = 'd';
send_data.data[4] = 'e';
send_data.data[5] = 'f';
send_data.data[6] = 'g';
send_data.data[7] = 'h';
send_data.length = 8;
send_data.prio = 0;
CAN0TBSEL = CAN0TFLG;
cansel = CAN0TBSEL;
d = &CAN0TXIDR0;
s = (unsigned char*)&send_data;
for(i=0;i<14;i++){
*d++ = *s++;
}
CAN0TFLG = CAN0TBSEL;
while(!(CAN0TFLG&cansel));
}
void CAN4TxData(void) {
unsigned char *s,*d;
char cansel;
unsigned char i;
while(txflag!=1);
txflag = 0;
j++;
send_data.id[0] = 0x47;
send_data.id[1] = 0xF8;
send_data.id[2] = j;
send_data.id[3] = 0x10;
send_data.data[0] = j;
send_data.data[1] = j+1;
send_data.data[2] = 'c';
send_data.data[3] = 'd';
send_data.data[4] = 'e';
send_data.data[5] = 'f';
send_data.data[6] = 'g';
send_data.data[7] = 'h';
send_data.length = 8;
send_data.prio = 0;
CAN4TBSEL = CAN4TFLG;
cansel = CAN4TBSEL;
d = &CAN4TXIDR0;
s = (unsigned char*)&send_data;
for(i=0;i<14;i++){
*d++ = *s++;
}
CAN4TFLG = CAN4TBSEL;
while(!(CAN4TFLG&cansel));
}
void delay(void) {
int i;
for(i=0;i<30000;i++){
asm nop;
asm nop;
asm nop;
}
}
/*****************************
System ISR function
*****************************/
#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
//ISR:CAN0 Receive Frame Interrupt
void ISR_CAN0_RxF(void) {
unsigned char i,*s,*d;
s = &CAN0RXIDR0;
d = (unsigned char*)&recv_data;
for(i=0;i<13;i++){
*d++ = *s++;
}
i=CAN0RXERR;
txflag = 1;
CAN0RFLG = 0x01;
asm{
pula;
rti;
}
}
void ISR_CAN4_RxF(void) {
unsigned char i,*s,*d;
s = &CAN4RXIDR0;
d = (unsigned char*)&recv_data;
for(i=0;i<13;i++){
*d++ = *s++;
}
i=CAN4RXERR;
txflag = 1;
CAN4RFLG = 0x01;
asm{
pula;
rti;
}
}
#pragma CODE_SEG DEFAULT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -