📄 lqcanmain.c
字号:
/********************************************************
龙丘MC9S12(DG128)多功能开发板V4.0
编写:FS
Designed by Chiu Sir
E-mail:chiusir@163.com
软件版本:V1.1
最后更新:2008年12月12日
相关信息参考下列地址:
博客: http://longqiu.21ic.org
淘宝店:http://shop36265907.taobao.com
------------------------------------
Code Warrior 4.6
Target : MC9S12DG128B
Crystal: 16.000Mhz
busclock:16.000MHz
pllclock:32.000MHz
测试程序,用CAN0,CAN4进行收发:
作为发送节点则需要定义一个宏 THIS_IS_SENDER
作为接收节点则需要取消宏定义 THIS_IS_SENDER
*********************************************************/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include <stdio.h>
#include <string.h>
#include "LQprintp.h"
#include "LQfun.h"
#include "LQ12864.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#ifndef U8
typedef unsigned char U8;
typedef unsigned int U16;
typedef unsigned long U32;
typedef signed char S8;
typedef signed int S16;
#endif
#ifndef NO_ERR
#define NO_ERR 0x00
#define IS_ERR 0x01
#endif
// 作为测试用:定义是什么类型的节点,如果是发送节点则需要此定义,否则注释掉此定义
#define THIS_IS_SENDER
#define USE_LCD //使用LCD
#define USE_LED //使用LED
/*
struct CANDATA{
byte id[4];
byte data[8];
byte length;
byte prio;
}send_data,recv_data;
*/
volatile U8 C0rxdata[9][9]={""};
volatile U8 C4rxdata[9][9]={""};
volatile int txrxerrflag;
volatile U8 txbuff[9]="LongQiu";
volatile U8 LedCnt=0;
U32 CAN0_ID=0x888e;
U32 CAN4_ID=0x887e;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 38 CAN0RxISR(void)
{
U8 length,index,rxdlr;
length = (CAN0RXDLR & 0x0F);
rxdlr=CAN0RXIDR0&0X0F;
for (index=0; index<length; index++)
C0rxdata[rxdlr][index] = *(&CAN0RXDSR0 + index); /* Get received data */
printp("\nCAN0 RX DATA IS:%s",C0rxdata[rxdlr]);
#ifdef USE_LCD
LCD_P6x8Str(34,1,C0rxdata[rxdlr]);
#endif
#ifndef THIS_IS_SENDER
++LedCnt;
#endif
CAN0RFLG = 0x01; /* Clear RXF */
}
void interrupt 54 CAN4RxISR(void)
{
U8 length,index,rxdlr;
length = (CAN4RXDLR & 0x0F);
rxdlr=CAN4RXIDR0&0X0F;
for (index=0; index<length; index++)
C4rxdata[rxdlr][index] = *(&CAN4RXDSR0 + index); /* Get received data */
printp("\nCAN4 RX DATA IS:%s",C4rxdata[rxdlr]);
#ifdef USE_LCD
LCD_P6x8Str(34,5,C4rxdata[rxdlr]);
#endif
#ifndef THIS_IS_SENDER
#ifdef USE_LCD
++LedCnt;
#endif
#endif
CAN4RFLG = 0x01; /* Clear RXF */
}
//============================MAIN()===========================
void main(void)
{
/* put your own code here */
int errorflagtime=0; // symbol for translate
char mydata[9]="CAN0TX";
unsigned long TXID=0;
Init_Dev(); // initial board
putstr("\nCAN0/4 test program started!");
PORTB=0XFF;
#ifdef USE_LCD
Draw_LQLogo();
LCD_P6x8Str(19,7,"chiusir@163.com");
#endif
delayms(2000);
#ifdef USE_LCD
LCD_CLS();
LCD_Print(36,2,"龙丘科技");
LCD_Print(40,4,"开发板");
LCD_P6x8Str(19,7,"chiusir@163.com");
#endif
delayms(2000);
#ifdef USE_LCD
LCD_CLS();
LCD_P6x8Str(4,0,"C0RA:");
LCD_P6x8Str(4,1,"C0RD:");
LCD_P6x8Str(4,2,"C0TA:0x0000888E");
LCD_P6x8Str(4,3,"C0TD:");
LCD_P6x8Str(4,4,"C4RA:");
LCD_P6x8Str(4,5,"C4RD:");
LCD_P6x8Str(4,6,"C4TA:0x0000887E");
LCD_P6x8Str(4,7,"C4TD:");
#endif
EnableInterrupts;
for(;;)
{
#ifdef THIS_IS_SENDER
sprintf((char*)txbuff,"%03d%s",LedCnt,mydata);
TXID=ConvertID2MSCAN_ID(CAN4_ID);
txrxerrflag=CAN0SendFrame(TXID, 0x00, strlen(txbuff), txbuff);
if(txrxerrflag)
{
#ifdef USE_LCD
LCD_P6x8Str(34,3,"FAILED!");
#endif
putstr("\nCAN0 TX DATA FAILED!");
}
else
{
#ifdef USE_LCD
LCD_P6x8Str(34,3,txbuff);
#endif
printp("\nCAN0 TX DATA IS:%s",txbuff);
}
delayms(300); //修改延时以修改数据发送频率
txbuff[6]='4';
TXID=ConvertID2MSCAN_ID(CAN0_ID);
txrxerrflag=CAN4SendFrame(TXID, 0x00, strlen(txbuff), txbuff);
if(txrxerrflag)
{
#ifdef USE_LCD
LCD_P6x8Str(34,7,"FAILED!");
#endif
putstr("\nCAN4 TX DATA FAILED!");
}
else
{
#ifdef USE_LCD
LCD_P6x8Str(34,7,txbuff);
#endif
printp("\nCAN4 TX DATA IS:%s",txbuff);
}
//txrxerrflag=CAN4SendFrame((0x887E4326), 0x00, strlen(txbuff), txbuff);
#ifdef USE_LED
LedCnt=(LedCnt>0XFE?0:++LedCnt);
#endif
#else
#ifdef USE_LED
LedCnt=(LedCnt>0XFE?0:LedCnt);
#endif
#endif
delayms(300); //修改延时以修改数据发送频率
#ifdef USE_LED
PORTB=~LedCnt;
#endif
}
/* please make sure that you never leave this function */
}
// ----------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -