欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關(guān)于25AA020A器件寫入數(shù)據(jù)時(shí),程序需要死等

查看數(shù): 645 | 評論數(shù): 8 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2025-4-26 20:44

正文摘要:

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

回復(fù)

ID:401564 發(fā)表于 2025-4-28 22:52
你可以把這個(gè)等待當(dāng)成應(yīng)答,或者寫入完成標(biāo)志位,怎么叫都行,你理解就行了
1: 把寫入一個(gè)完整數(shù)據(jù)(這包括寫下地址,讀寫標(biāo)志等等)和等待分開寫,寫兩個(gè)函數(shù)
2: 聲明一個(gè)僵局位,或者一個(gè)全局u8變量都行,看實(shí)際情況吧,我這行就用  F  來代替吧, 現(xiàn)在定義規(guī)則: F == 1 就是正在寫入, F !=1  就是寫入完成
3:這個(gè)是你的寫入函數(shù)
  • 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://寫入完整的數(shù)據(jù)后,F置位
  • }
這個(gè)是讀取函數(shù),這個(gè)函數(shù)可以是有返回值的,也可以是不返回,在函數(shù)中操作F就可以了有的單片機(jī)返回參數(shù)代碼量和RAM占用多一點(diǎn),對于幾十B運(yùn)行內(nèi)存的單片機(jī)來說,這很重要,看你自己的情況
  • void read(void)
  • {
  •                 SPI_CS = 0;
  •                 spiWriteByte(RDSR);
  •                 sta = spiReadByte();
  •                 SPI_CS = 1;
  •                 if((sta & 0x01) == 0)
  •                 {
  •                         F = 0;
  •                 }
  •         }
那么好,在主程序中就可以通過F的值來進(jìn)行其它操作了



ID:1109793 發(fā)表于 2025-4-27 18:06
不死鳥a 發(fā)表于 2025-4-27 14:23
問一下大佬有代碼參考一下嘛?

論壇搜一下MODBUS的代碼,我以前看過,應(yīng)該就是中斷的
ID:1143041 發(fā)表于 2025-4-27 14:23
wufa1986 發(fā)表于 2025-4-27 10:19
你說的問題,通常高級芯片都有DMA功能去避免這個(gè)問題

歐克,謝謝大佬
ID:1143041 發(fā)表于 2025-4-27 14:23

問一下大佬有代碼參考一下嘛?
ID:446156 發(fā)表于 2025-4-27 10:48
不死鳥a 發(fā)表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

可以參考下我發(fā)的帖子。串口的解決辦法是使用DMA發(fā)送但是要注意需要判斷DMA是否為忙狀態(tài)也就是說不用DMA發(fā)送串口每發(fā)一個(gè)字節(jié)就得判斷一下狀態(tài)然后發(fā)下一個(gè)字節(jié),使用DMA后每發(fā)一幀(一幀數(shù)據(jù)多長是個(gè)人定義的)需要判斷一下DMA狀態(tài)然后發(fā)下一幀。如果數(shù)據(jù)量不大波特率夠高直接阻塞式發(fā)送也沒事。
ID:879348 發(fā)表于 2025-4-27 10:19
你說的問題,通常高級芯片都有DMA功能去避免這個(gè)問題
ID:1109793 發(fā)表于 2025-4-27 07:45
不死鳥a 發(fā)表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

用中斷方式嘛
ID:1143041 發(fā)表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表