首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PCF85063A启用第二报警寄存器

PCF85063A启用第二报警寄存器
EN

Stack Overflow用户
提问于 2022-09-26 20:27:07
回答 1查看 52关注 0票数 0

我正在为Nuvoton M031SD2AE单片机开发一个RTC库。我用PCF85063A。我想启动第二警报器。在数据表中它的地址是0x0B。

这是第二个报警器。

RTC二次报警寄存器

代码语言:javascript
复制
void set_second_alarm(void)
{
    uint8_t secondAlarmValue;
    I2C_ReadMultiBytesOneReg(I2C0,I2CADDR,SECONDALARM,secondAlarmValue,1);
    secondAlarmValue = (secondAlarmValue) & 0x7F;
    I2C_WriteMultiBytesOneReg(I2C0,I2CADDR,SECONDALARM,secondAlarmValue,1);
}

我试着做这样的事。因为数据表说这个寄存器的默认值是1000。但是,我认为当其他位元被操纵时,它可能会在将来的使用中造成错误。因为I2C_ReadMultiBytesOneReg函数使用uint8_t rdata[]作为参数,所以我也会出错。

这些是我使用的I2C函数:

代码语言:javascript
复制
uint8_t I2C_WriteByteOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data);
uint32_t I2C_ReadMultiBytesOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t rdata[], uint32_t u32rLen);

基本上,我想写0到7位的第二个警报寄存器,以启用警报。但是,我不知道该怎么做。

如何写0到7位的第二次报警寄存器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-27 19:55:32

您没有显示错误消息和受影响的行。它很可能是这样写的:“您提供了一个整数,但是需要一个指向整数的指针。”顺便说一下,作为参数,数组会衰减到指向其第一个元素的指针。

您提供的不是变量的预期地址来存储值,而是提供。在C中,您可以通过运算符&获得变量的地址。

实际上,多字节函数期望指向与参数uint8_t相同的指针,u32rLen说。

这就是修正后的版本:

代码语言:javascript
复制
void set_second_alarm(void)
{
    uint8_t secondAlarmValue;
    I2C_ReadMultiBytesOneReg(I2C0, I2CADDR, SECONDALARM, &secondAlarmValue, 1);
    secondAlarmValue &= 0x7F;
    I2C_WriteMultiBytesOneReg(I2C0, I2CADDR, SECONDALARM, &secondAlarmValue, 1);
}

如果你仔细看,我简化了第7位的清除,你可以用二进制操作符来简化许多表达式。重读你的初学者C书的相关章节。

你没有解释,为什么你使用多字节函数.请考虑使用单字节函数:

代码语言:javascript
复制
void set_second_alarm(void)
{
    uint8_t secondAlarmValue;
    secondAlarmValue = I2C_ReadByteOneReg(I2C0, I2CADDR, SECONDALARM);
    secondAlarmValue &= 0x7F;
    I2C_WriteByteOneReg(I2C0, I2CADDR, SECONDALARM, secondAlarmValue);
}

最后注意:请阅读所有函数的文档,以增加合理的错误处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73859613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档