【问题标题】:I am trying to write a program in C to use an DS1302 RTC with a PIC16F877a我正在尝试用 C 语言编写一个程序来使用 DS1302 RTC 和 PIC16F877a
【发布时间】:2012-12-06 00:59:37
【问题描述】:

所以我目前正在尝试读取和写入 RTC 的时间,而这些方法将不起作用。

这就是我所拥有的: 所以它发送地址字节以确定它想从哪里读取,然后将引脚翻转到输入并读取每个位,直到字节完成。

 char ReadByte(char ByteToRead)
 {
    RB0 = 0; // ensure CLK low
    RB5 = 1;
    char received = 0;
    int i;

    for(i =0;i < 8 ;i++)
    {   
        RB4 = ByteToRead & 1;
        RB0 = 0;
        ByteToRead >>= 1;       
        RB0 = 1;

    }
    TRISB4 = 1;//B4 = input port

    for(i =0;i < 8 ;i++)
    {
        received |= RB4;
        RB0 = 1;
        received <<= 1;
        RB0 = 0;
    }

    RB5=0;

    TRISB4 = 0;

    return DecimalToBCD(received);
}

第二个例子是我的写法:

void WriteByte(char ClockReg ,char data)

{
    RB0 = 0; // ensure CLK low
    RB5 = 1; // raises RST bit
    int i;
    for(i =0;i < 8 ;i++)
    {   
        RB4 = ClockReg & 1;
        RB0 = 0;
        ClockReg >>= 1;     
        RB0 = 1;
    } 

    for(i =0;i < 8 ;i++)
    {   

        RB4 = data & 1;
        RB0 = 0;
        data >>= 1;     
        RB0 = 1;

    }
    RB5 = 0;
    __delay_us(1);
    RB5 = 1;
}

这对第一位确定寄存器写入你给它的值做同样的事情。

我能在网上找到的唯一帮助是指向一个 2 年前的页面的链接,该页面没有代码或帮助只是要求被 PMed 的人。所以如果你能帮忙,请帮忙

提前致谢

【问题讨论】:

  • 那么,问题是什么?什么不正确?您遇到了哪些问题?
  • 好吧,我无法确定读取或写入方法是否有效,因为我需要读取来完成写入并确定读取是否有效,我需要写入。
  • 这是一个使用基于 USB 的逻辑探头可以节省大量时间的实例。您可以监控实际的输出线路以了解正在发生的情况,并且许多线路可以为您解码 SPI 和 I2C 信号。
  • 我同意它会很有用,但我有少量时间来做这件事,而且手头没有,但我可能会考虑继续进行未来的项目。有什么建议吗?

标签: c pic real-time-clock


【解决方案1】:

在您处理 WriteByte 之前,我会先处理 ReadByte 方法,因为这样您就可以通过读回来验证写入。因此,查看 ReadByte 例程,我可以很快发现一个问题。

DS1302 的数据表显示“数据位在时钟的下降沿输出”,但在您的 ReadByte 例程中,读取 RB4 上的输入,然后将时钟设置为低电平。另外“请注意,要传输的第一个数据位发生在写入命令字节的最后一位之后的第一个下降沿。”但是您第一次通过循环时,您在第一个下降沿之前读取 RB4。

【讨论】:

  • 发布后我意识到这是我玩过的代码,我在 'RB4 = ByteToRead & 1; ByteToRead >>= 1; RB0 = 1; RB0 = 0; ' 所以它会读取下降沿,但尝试循环它,因此延迟小于 1 Us。很抱歉造成混乱。
【解决方案2】:

待证实!

我相信这是因为我还没有为未来的读者禁用写保护位,时钟停止标志 (CH) 将被清除而不设置。

希望这可以帮助任何寻找它的人 丹

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多