- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 PIC18F45K22 和 XC8。我已插入 I2C 的 MCC 库
我需要示例从 ds1307 读取秒数,并在下一个级别更改当前时间。
根据下面的代码,我在里面堆栈
while (状态== I2C2_MESSAGE_PENDING);
I2C2_MasterWrite(&pdata_write, 1, 0b11010000, &status);
// at this point, your status will probably be I2C2_MESSAGE_PENDING
while (status == I2C2_MESSAGE_PENDING); // wait for status to to change
if (status == I2C2_MESSAGE_COMPLETE) {
I2C2_MasterRead(&pdata_read, 1, 0b11010001, &status);
while (status == I2C2_MESSAGE_PENDING); // again, wait for status to to change
if (status == I2C2_MESSAGE_COMPLETE) {
// pdata_read should now be the number of seconds (in binary-coded decimal)
}
这是我从 mcc 自动创建的 pin 管理器
#define SCL2_TRIS TRISDbits.TRISD0
#define SCL2_LAT LATDbits.LATD0
#define SCL2_PORT PORTDbits.RD0
#define SCL2_ANS ANSELDbits.ANSD0
#define SCL2_SetHigh() do { LATDbits.LATD0 = 1; } while(0)
#define SCL2_SetLow() do { LATDbits.LATD0 = 0; } while(0)
#define SCL2_Toggle() do { LATDbits.LATD0 = ~LATDbits.LATD0; } while(0)
#define SCL2_GetValue() PORTDbits.RD0
#define SCL2_SetDigitalInput() do { TRISDbits.TRISD0 = 1; } while(0)
#define SCL2_SetDigitalOutput() do { TRISDbits.TRISD0 = 0; } while(0)
#define SCL2_SetAnalogMode() do { ANSELDbits.ANSD0 = 1; } while(0)
#define SCL2_SetDigitalMode() do { ANSELDbits.ANSD0 = 0; } while(0)
// get/set SDA2 aliases
#define SDA2_TRIS TRISDbits.TRISD1
#define SDA2_LAT LATDbits.LATD1
#define SDA2_PORT PORTDbits.RD1
#define SDA2_ANS ANSELDbits.ANSD1
#define SDA2_SetHigh() do { LATDbits.LATD1 = 1; } while(0)
#define SDA2_SetLow() do { LATDbits.LATD1 = 0; } while(0)
#define SDA2_Toggle() do { LATDbits.LATD1 = ~LATDbits.LATD1; } while(0)
#define SDA2_GetValue() PORTDbits.RD1
#define SDA2_SetDigitalInput() do { TRISDbits.TRISD1 = 1; } while(0)
#define SDA2_SetDigitalOutput() do { TRISDbits.TRISD1 = 0; } while(0)
#define SDA2_SetAnalogMode() do { ANSELDbits.ANSD1 = 1; } while(0)
#define SDA2_SetDigitalMode() do { ANSELDbits.ANSD1 = 0; } while(0)
见下图
还尝试在我的液晶显示屏上显示时间
sprintf(txt,"%d",pdata_read);
LCDPutStr(txt,1);
最佳答案
我没有硬件或软件,但查看了https://www.studentcompanion.co.za/interfacing-the-ds1307-real-time-clock-with-pic-microcontroller-xc8/ (一个很长的教程,可能会让您加快速度)和 https://datasheets.maximintegrated.com/en/ds/DS1307.pdf (数据表),以及一些随机页面以某种方式提到了 I2C_MasterWrite
/I2C_MasterRead
。
非常低级的步骤是:
0x00
(这是数据)看起来非常低级的部分(开始/确认和发送地址)正在为您处理,因此您可能只需要执行类似于以下代码的操作(您可能需要重构 if
更好地处理错误的逻辑):
I2C_MESSAGE_STATUS status;
uint8_t pdata_write = 0; // 0 to 'seconds' register
uint8_t pdata_read; // will hold 'seconds'
I2C2_MasterWrite(&pdata_write, 1, 0b1101000, &status);
// at this point, your status will probably be I2C2_MESSAGE_PENDING
while (status == I2C_MESSAGE_PENDING); // wait for status to to change
if (status == I2C_MESSAGE_COMPLETE) {
I2C2_MasterRead(&pdata_read, 1, 0b1101000, &status);
while (status == I2C_MESSAGE_PENDING); // again, wait for status to to change
if (status == I2C_MESSAGE_COMPLETE) {
// pdata_read should now be the number of seconds (in binary-coded decimal)
}
}
*pdata
是一个指向您想要读/写的内容的指针,它确实是一个指向上面步骤 4 中包含 0x0
的变量的指针.length
是您想要读取/写入的数据的长度,我认为在上面列出的所有步骤中它恰好都是 1address
是DS1307的地址,0b1101000
pstatus
是 I2C 消息的状态。根据https://github.com/apaivaj/WWVB/blob/master/MainProject/WWVB/mcc_generated_files/i2c1.h , pstatus
可以是以下任意一项:
typedef enum
{
I2C1_MESSAGE_FAIL,
I2C1_MESSAGE_PENDING,
I2C1_MESSAGE_COMPLETE,
I2C1_STUCK_START,
I2C1_MESSAGE_ADDRESS_NO_ACK,
I2C1_DATA_NO_ACK,
I2C1_LOST_STATE
} I2C1_MESSAGE_STATUS;
您可能至少应该检查I2C_MESSAGE_FAIL
。
更新:要写入秒寄存器,请参见数据表第12页的图4:您需要写入两条数据:首先是寄存器编号,然后是您想要的编号写入该寄存器。因此,代码将如下所示:
I2C_MESSAGE_STATUS status;
uint8_t pdata_write[2] = { 0, 0x10 }; // 0x10 into 'seconds' register
I2C2_MasterWrite(pdata_write, 1, 0b1101000, &status);
while (status == I2C_MESSAGE_PENDING); // wait for status to to change
if (status == I2C_MESSAGE_COMPLETE) {
// done!
} else {
// error
}
关于c - 使用 I2C 读取时间 (Ds1307),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49492415/
我想使用两个适配器,具体取决于路线。目前我有以下商店: if (window.USE_FIXTURES) { var my_adapter = 'DS.FixtureAdapter'; } else
Joomla 3.0 DS 不工作。它已被删除。我明白了 Notice: Use of undefined constant DS - assumed 'DS' in 我该如何解决这个问题? Simi
我正在尝试通过一键单击事件从 2 个不同的表中提取数据。我已经检查了所有内容,似乎没有任何拼写错误或任何其他内容,但不断收到此错误。 下面是我的按钮点击事件的代码 Protected Sub btnF
我希望预先填充定制库组件中的选定值,以便执行编辑功能。我尝试了所有可能的方法,但不知道该组件的任何预定义属性可以帮助我实现这一点。该HTML代码如下所示。。.TS代码。选定ID的JSON数据。Avai
目前我正在学习 x86 汇编,因为我喜欢微 Controller 编程,所以我对汇编很熟悉。 目前我一直在到处寻找这个问题的答案,但似乎找不到它...... DS寄存器,我知道它应该指向我程序中的全局
在 bundle 启动和停止时按什么顺序调用带注释的方法? 我使用aQute.bnd.annotation的注释。 有这方面的文档吗? 我的猜测是: bundle 启动时: 设置A onStartUp
我正在尝试让我之前在 Windows 上编写的一些 Python 代码在我的 DS 上运行。我正在使用 ( DSPython ),当我尝试导入数学时,失败并显示“ImportError: No mod
我对 XML 文件进行数字签名,但需要签名标签包含命名空间前缀“ds”。我在谷歌上进行了大量研究,发现了很多相同的问题,但没有令人满意的答案。 我试图将“ds”手动放入文件中,但签名无效。标签“Sig
本文分享自华为云社区《GaussDB(DWS) 《DWS之TPCD-DS&TPC-H与查询性能的那些事儿》》,作者: 一剑战八荒 。 1 综述 本文目标在于,详细讲述使用GaussDB(DWS)时,如
据我所知,在 DS 上运行的代码必须加载到 RAM 中,从而从已经受到限制的 4M 中获取。有没有办法直接从图像运行 DS 代码? 最佳答案 简短的回答:没有。 Nintendo DS 的内存映射不包
我正在尝试覆盖 DS 以在我的 Windows 开发机器中使用“/”而不是“\”。原因是在某些 javascript 上,它使用 cake 的 DS 进行一些 ajax 调用。 例如: var dat
我只是汇编语言的初学者,可能有一些愚蠢的问题。这两行有什么区别? 3e 8b 06 mov eax,DWORD PTR ds:[esi] 8b 06 mov eax,DWORD PTR [esi
我需要在同一云服务中创建两个 DS 虚拟机。在现有门户中,这非常容易,但是在预览门户中,创建虚拟机时似乎没有设置云服务的选项。 问题是现有门户无法创建 DS 虚拟机或具有高级存储的虚拟机。虽然预览门户
0040103A CALL DWORD PTR DS:[40207A] USER32.MessageBoxA DS: 是什么意思? 最佳答案 该指令正在从内存 ds:
这个问题在这里已经有了答案: Scheduler is not scheduling Pod for DaemonSet in Master node (1 个回答) 关闭 4 年前。 我正在运行一
我反汇编了某些二进制文件(Linux elf)。 我找到了这个代码: movsl %ds:(%esi),%es:(%edi) 有两个寄存器“ds”和“es”。 我知道这些被命名为“段寄存器”。 但是,
我正在研究内核开发。我有一个引导加载程序,可以将二进制文件加载到内存并运行它。二进制文件由C语言生成,构建过程如下: i686-elf-gcc -c main.c -o main.o -std=gnu
考虑这种情况: 在完全基于 OSGi 并大量采用服务层 SOA 概念的网络管理系统中,决定将 NE 管理模块转换为 DS 组件。 在跟踪网络资源的配置子代理角色中有一个 DS 组件,在适当的时候,它会
我需要的是每次当某些消费者需要此服务时 + 使用 CDI 时获取新的服务实例。我已经阅读了很多文章,但找不到 2 个问题的答案。 如果我们使用工厂,为什么在服务消费者中我们调用工厂 ( http://
我在 postgres 和对称 ds 的默认配置中使用对称 ds。 我总是收到以下错误。 2017-12-20 09:59:53,372 INFO [SymmetricLauncher] [Wrap
我是一名优秀的程序员,十分优秀!