⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 dg128 Can总线自发自收消息进行自检测操作
💻 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 + -