找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于25AA020A器件写入数据时,程序需要死等

查看数: 707 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-4-26 20:44

正文摘要:

#include "E2_25AA020A.h" void E2_WriteByte(unsigned char addr,unsigned char dat) {         unsigned char sta;         SPI_CS = 0;   ...

回复

ID:401564 发表于 2025-4-28 22:52
你可以把这个等待当成应答,或者写入完成标志位,怎么叫都行,你理解就行了
1: 把写入一个完整数据(这包括写下地址,读写标志等等)和等待分开写,写两个函数
2: 声明一个僵局位,或者一个全局u8变量都行,看实际情况吧,我这行就用  F  来代替吧, 现在定义规则: F == 1 就是正在写入, F !=1  就是写入完成
3:这个是你的写入函数
  • void E2_WriteByte(unsigned char addr,unsigned char dat)
  • {
  •         unsigned char sta;
  •         SPI_CS = 0;
  •         spiWriteByte(WREN);
  •         SPI_CS = 1;
  •         SPI_CS = 0;
  •         spiWriteByte(WRITE);
  •         spiWriteByte(addr);
  •         spiWriteByte(dat);
  •         SPI_CS = 1;
  •         F = 1://写入完整的数据后,F置位
  • }
这个是读取函数,这个函数可以是有返回值的,也可以是不返回,在函数中操作F就可以了有的单片机返回参数代码量和RAM占用多一点,对于几十B运行内存的单片机来说,这很重要,看你自己的情况
  • void read(void)
  • {
  •                 SPI_CS = 0;
  •                 spiWriteByte(RDSR);
  •                 sta = spiReadByte();
  •                 SPI_CS = 1;
  •                 if((sta & 0x01) == 0)
  •                 {
  •                         F = 0;
  •                 }
  •         }
那么好,在主程序中就可以通过F的值来进行其它操作了



ID:1109793 发表于 2025-4-27 18:06
不死鸟a 发表于 2025-4-27 14:23
问一下大佬有代码参考一下嘛?

论坛搜一下MODBUS的代码,我以前看过,应该就是中断的
ID:1143041 发表于 2025-4-27 14:23
wufa1986 发表于 2025-4-27 10:19
你说的问题,通常高级芯片都有DMA功能去避免这个问题

欧克,谢谢大佬
ID:1143041 发表于 2025-4-27 14:23

问一下大佬有代码参考一下嘛?
ID:446156 发表于 2025-4-27 10:48
不死鸟a 发表于 2025-4-26 20:46
还有在UART中,需要查询while(TI),while(RI),有什么办法可以避免这种阻塞代码吗,谢谢大佬们的解答

可以参考下我发的帖子。串口的解决办法是使用DMA发送但是要注意需要判断DMA是否为忙状态也就是说不用DMA发送串口每发一个字节就得判断一下状态然后发下一个字节,使用DMA后每发一帧(一帧数据多长是个人定义的)需要判断一下DMA状态然后发下一帧。如果数据量不大波特率够高直接阻塞式发送也没事。
ID:879348 发表于 2025-4-27 10:19
你说的问题,通常高级芯片都有DMA功能去避免这个问题
ID:1109793 发表于 2025-4-27 07:45
不死鸟a 发表于 2025-4-26 20:46
还有在UART中,需要查询while(TI),while(RI),有什么办法可以避免这种阻塞代码吗,谢谢大佬们的解答

用中断方式嘛
ID:1143041 发表于 2025-4-26 20:46
还有在UART中,需要查询while(TI),while(RI),有什么办法可以避免这种阻塞代码吗,谢谢大佬们的解答

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表