久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 319|回復: 8
打印 上一主題 下一主題
收起左側

關于25AA020A器件寫入數據時,程序需要死等

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include "E2_25AA020A.h"
  2. void E2_WriteByte(unsigned char addr,unsigned char dat)
  3. {
  4.         unsigned char sta;
  5.         SPI_CS = 0;
  6.         spiWriteByte(WREN);
  7.         SPI_CS = 1;
  8.         
  9.         SPI_CS = 0;
  10.         spiWriteByte(WRITE);
  11.         spiWriteByte(addr);
  12.         spiWriteByte(dat);
  13.         SPI_CS = 1;
  14.       <b>  while(1)
  15.         {
  16.                 SPI_CS = 0;
  17.                 spiWriteByte(RDSR);
  18.                 sta = spiReadByte();
  19.                 SPI_CS = 1;
  20.                 if((sta & 0x01) == 0)
  21.                 {
  22.                         break;
  23.                 }
  24.         }</b>
  25. }
復制代碼



各位大佬們,我加粗部分代碼是寫入25AA020A這個器件時,需要等待這個狀態,有啥辦法不讓他死等來查詢這個狀態位嗎
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1143041 發表于 2025-4-26 20:46 | 只看該作者
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答
回復

使用道具 舉報

板凳
ID:1109793 發表于 2025-4-27 07:45 | 只看該作者
不死鳥a 發表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

用中斷方式嘛
回復

使用道具 舉報

地板
ID:879348 發表于 2025-4-27 10:19 | 只看該作者
你說的問題,通常高級芯片都有DMA功能去避免這個問題
回復

使用道具 舉報

5#
ID:446156 發表于 2025-4-27 10:48 | 只看該作者
不死鳥a 發表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

可以參考下我發的帖子。串口的解決辦法是使用DMA發送但是要注意需要判斷DMA是否為忙狀態也就是說不用DMA發送串口每發一個字節就得判斷一下狀態然后發下一個字節,使用DMA后每發一幀(一幀數據多長是個人定義的)需要判斷一下DMA狀態然后發下一幀。如果數據量不大波特率夠高直接阻塞式發送也沒事。
回復

使用道具 舉報

6#
ID:1143041 發表于 2025-4-27 14:23 | 只看該作者

問一下大佬有代碼參考一下嘛?
回復

使用道具 舉報

7#
ID:1143041 發表于 2025-4-27 14:23 | 只看該作者
wufa1986 發表于 2025-4-27 10:19
你說的問題,通常高級芯片都有DMA功能去避免這個問題

歐克,謝謝大佬
回復

使用道具 舉報

8#
ID:1109793 發表于 2025-4-27 18:06 | 只看該作者
不死鳥a 發表于 2025-4-27 14:23
問一下大佬有代碼參考一下嘛?

論壇搜一下MODBUS的代碼,我以前看過,應該就是中斷的
回復

使用道具 舉報

9#
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的值來進行其它操作了



回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品91 | 亚洲欧美日韩高清 | 99爱在线观看 | 国产日韩欧美中文字幕 | 国产精品成av人在线视午夜片 | 色久电影 | 天天夜夜操| 91久久看片| 伊人狠狠 | www.一级片| 超碰在线人人 | 日韩视频中文字幕 | 成人黄色电影在线观看 | 久久久久久久久久久久久久av | 久久久久久国产 | 亚洲 欧美 另类 综合 偷拍 | 国产精品一区视频 | 色综合久久久久 | 中文字幕在线一区 | 欧美激情一区二区三级高清视频 | 色资源在线视频 | 国产高清一区二区 | 一区二区三区欧美 | 国产农村妇女毛片精品久久麻豆 | 久久久久国产一区二区三区 | 欧美久久一级特黄毛片 | 欧美一区二区三区在线观看视频 | 久久一区二区三区四区 | 亚洲人成人一区二区在线观看 | 日韩在线免费播放 | 日韩二| 国产女人与拘做视频免费 | www.亚洲精品 | 精品一区二区久久久久久久网精 | 国产a区 | 久久成人精品视频 | 久久99精品久久久久久国产越南 | www.日本在线播放 | 夜夜爽99久久国产综合精品女不卡 | 激情福利视频 | 日韩电影免费在线观看中文字幕 |