📄 main.c
字号:
//-------------------------------------------------------------------------*
//工 程 名:DG128MSCAN12自环测试(MSCAN12SelfTest) *
//硬件连接:MCU的串行口与PC机的串行口相连 *
//程序描述:将MSCAN12设置在回环自测方式下,每隔1秒左右MSCAN12自发自收字符串 *
// "Hello!!!"(8个字节),并将之通过串口送出 *
//说 明:因MSCAN12工作在回环方式下,故不用将CAN接口与CAN总线相连 *
//目 的:掌握MSCAN12模块基本收发子程序编程 *
//-------《嵌入式系统-使用HCS12微控制器的设计与应用》教学实例-------------*
//头文件
#include "Includes.h" //总头文件
//常量(注意:CAN每一帧的数据为0~8个字节)
const INT8U Data[] = "Hello!!!"; //数据内容
const INT8U DataLenth = 8; //数据长度
//主函数
int main()
{
INT16U ID; //标示符
INT8U i;
INT8U RCVData[16]; //接收数据帧
INT16U WaitTime = 0; //循环延时
//发送标志=0,没有空闲发送缓冲区,发送不成功;=1,发送成功
INT8U SNDFlag;
//接收标志=0xff,未收到帧;=1,收到数据帧;=2,收到远程帧
INT8U RCVFlag;
DISABLE_INTERRUPTS; //禁止总中断
//1. 芯片初始化
MCUInit();
//2. 模块初始化
SCIInit(); //(1) 串口初始化
CANInit(); //(2) MSCAN12模块初始化
//3. 开放各模块中断
EnableSCIReInt; //开放SCI0接收中断
//4. 开放总中断
ENABLE_INTERRUPTS;
//准备待发送报文的标识符部分
ID=(INT16U)(CAN0IDAR0V << 8) + CAN0IDAR1V;
//主循环
while(1)
{
WaitTime++;
//发送"Hello!!!"
if (WaitTime > 50000)
{
SNDFlag = CANSND1DFRM(ID,(INT8U *)(Data),DataLenth);
//发送成功
if(SNDFlag == 1)
{
RCVFlag = CANRCV1FRM((INT8U *)RCVData); //接收子程序
if(RCVFlag != 0xFF) //接收子程序返回0XFF,表示未收到数据
{
for(i = 4; i < 4 + DataLenth; i++)
SCISend1(RCVData[i]);
}
else//未收到数据
{
SCISendN(13,"ReceiveError!");
}//End of RCVFlag
}
//发送不成功
else
{
SCISendN(10,"SendError!");
}//End of SNDFlag
WaitTime = 0;
}//End of WaitTime
}//End of While
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -