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

📄 main.c

📁 DG128 飞思卡尔dg128芯片上实现IIC功能
💻 C
字号:
//-------------------------------------------------------------------------*
//工程名:IIC.prj                                                           *
//硬件连接:                                                                *
//    (1) MCU的串口与PC方的COM相连(参见"SCI.c"文件)                        *
//    (2) MCU的IIC接口与时钟芯片的IIC接口相连(参见"IIC.c"文件)             *
//功能说明:MCU与时钟芯片PCF8563通过IIC总线通信,MCU从PCF8563获得时间,并通过 *
//         串口发给PC.该程序可以与相由VB编写的配套的显示程序一起使用       *
//-------------------------------------------------------------------------*

//总头文件
#include  "Includes.h"	  //头文件(具体型号在头文件的第一行)

INT8U ReBuf[17];    //存放从PC接收的从秒到年的ASCII码(首字节:帧头)
INT8U Flag = 0;     //接收正确帧标志

//主函数
int main(void)
{  
    INT8U i,k;        //(1) 循环控制变量
    INT8U Sec = 0xff;   //(2) 记录秒值                 
    //(3) 初始写入PCF8563寄存器的值:CSR1,2,   秒,  分钟,小时,天,  星期,月,      
    INT8U WriteData[15] =          {0x00,0x00,0x00,0x00,0x14,0x01,0x01,0x06,
                        //          年,  分钟报警,小时报警,日期报警,周报警,
                                    0x07,0x80,    0x80,    0x80,    0x80,    
                        //          CLKOUT频率,定时器控制
                                    0x00,      0x00};
    INT8U ReadData[7];  //(3) 依次存放秒,分,小时,日,星期,月,年数值的BCD码
    INT8U SendBuf[17];  //(4) 存放要发送的从秒到年的ASCII码(首字节:帧头)

    //(1)关总中断
    DISABLE_INTERRUPTS;
    //(2)芯片初始化
    MCUInit();
    //(3)模块初始化
    SCIInit();         //(1) 串行口初始化(波特率:9600,查询方式)
    IICInit();         //(2) IIC通信初始化(IIC波特率 = 62.5KHz)
    while (IICwriteN(0xA2, 0x00, WriteData, 15));//(3) 初始化时钟芯片PCF8563
                                         //初始时间设置:2007.06.01 14:00 Mon
    //(4)开放各模块中断
    EnableSCIReInt;  //(1) 开放串行接收中断
    //(5)开放总中断
    ENABLE_INTERRUPTS;
    
    //主循环
    while (1)
    {
        if (Flag == 1)           //接收到正确的一帧
        {
            //处理从秒到年数据(2字节ASCII合为1字节的压缩BCD)
            for (i = 0;i < 8;i++)//最后一个字节为世纪字节
            {
                k = (ReBuf[2*i+1] - '0') << 4;
                WriteData[i] = k | (ReBuf[2*i+2] - '0');
   
            }
            //按照时间寄存器格式,进一步处理WriteData中的时间数据
            WriteData[0] &= 0x7F;    //VL位清零
            if (WriteData[7] == 0x19)      //设置月寄存器的世纪位
                WriteData[5] |= 0x80;
            else
                WriteData[5] &= 0x7F;                  
            while(IICwriteN(0xA2, 0x02, WriteData, 7));        
            Flag = 0;
        }
        //从PCF8563读出时间的BCD码,存入ReadData
        while(IICreadN(0xA3, 0x02, ReadData, 7));
        if (Sec != (ReadData[0] & 0x7F))//秒值发生变化就,转换数据格式并发送
        {
            //处理ReadData中的7个时间数据
            for (i = 0;i < 7;i++)           
            {
                switch(i)
                {   
                    case 0://秒和分数据的最高位不用,清零
                    case 1:
                        ReadData[i] &= 0x7F;
                        break;
                    case 2://时和天数据的高两位不用,清零
                    case 3: 
                        ReadData[i] &=0x3F;
                        break;
                    case 4://星期数据的高五位不用,清零 
                        ReadData[i] &= 0x07;
                        break;
                    case 5://月数据的6、5两位不用
                        if ((ReadData[i] &0x80) == 0)
                        {
                            SendBuf[15] = '2';
                            SendBuf[16] = '0';
                        }
                        else
                        {
                            SendBuf[15] = '1';
                            SendBuf[16] = '9';
                        }
                        ReadData[i] &= 0x1F;
                        break;
                    default:
                        break;
                }
                //BCD码转为ASCII码
                SendBuf[2*i+2] = (ReadData[i] & 0x0F) + 0x30;
                SendBuf[2*i+1] = ((ReadData[i] & 0xF0) >> 4) + 0x30;
            }
            SendBuf[0] = '#';           //'#'作为帧头
            Sec =  ReadData[0];
            SCISendN(17,SendBuf);
        }
    }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -