最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

求助:向各位大哥請教一個串口收信息的問題,謝謝!

作者:星星電燈 欄目:單片機
求助:向各位大哥請教一個串口收信息的問題,謝謝!
unsigned CHAR *Str;

void ComInStr() interrupt 4
{
  if(RI)
       {EA=0;
        while(*Str!=0x00)
         {
           while(RI==0);
           RI=0;
           *Str=SBUF;
           Str++;
         }
        r=1;EA=1;
       }
}



請教:
假設(shè)我從 PC 機向 單片機發(fā)送 字符串  "wwe0"
單片機怎么接收呢?


上面這個程序我是從網(wǎng)上看來的,有幾個地方不懂?

問題1:
為什么不是 while(RI),而是 if(RI)

問題2:

這里為什么要個 EA=0; 呢? 它在這里有什么作用?

問題3:
while(*Str!=0x00)
是什么意思?

問題4:
while(RI==0);
是什么意思?


問題5:
RI=0; 這里為什么要個 RI=0; 呢?它在這里有什么用?

問題6:
r=1;EA=1; 在這里有什么用?

謝謝各位大哥!




2樓: >>參與討論
星星電燈
各位大哥,為什么這樣還是不行。恐x謝!
void ComInStr() interrupt 4 //串行口中斷
{
    int i ;
    if(RI)                 
       {
    EA=0;               
         for(i=0; i<3; i++)
         {
           while(RI==0);    // while(RI)意思是等待RI==0;
           RI=0;            // RI=0;,意思是取完數(shù)據(jù)后,必須把標(biāo)志位手動清0
           *GetStr=SBUF;
           GetStr++;
         }
        EA=1;           // EA=1;表示這個進(jìn)程完成了,又打開中斷,恢復(fù)中斷前狀態(tài)
       }

        Delay2();

       //*****************把收到的字符發(fā)出去***************
       for(i=0;i<3;i++)
         {
           SBUF=GetStr[i];
            while(!TI);
           TI=0;  
         }
       //*****************把收到的字符發(fā)出去*******************
}

大哥
我當(dāng)在 PC 機向單片機發(fā)送 字符串 "000"
可是我的 PC 機沒有收到 字符串 "000"

我想是
if(RI)                 
       {
    EA=0;               
         for(i=0; i<3; i++)
         {
           while(RI==0);    // while(RI)意思是等待RI==0;
           RI=0;            // RI=0;,意思是取完數(shù)據(jù)后,必須把標(biāo)志位手動清0
           *GetStr=SBUF;
           GetStr++;
         }
        EA=1;           // EA=1;表示這個進(jìn)程完成了,又打開中斷,恢復(fù)中斷前狀態(tài)
       }

這段程序沒有收到 PC 機向 串口發(fā)送的字符串  "000"

各位大哥,我的這段程序哪里還有問題?

謝謝!


3樓: >>參與討論
xwj
暈,你先取把書上“串口)那一節(jié)一字一句的看完
然后自己再仔細(xì)想想!

不然別人說了你也不懂!
何況你自己根本就不動腦!

4樓: >>參與討論
星星電燈
謝謝大大!書上沒有講這些啊!
CSDN 上的一位大哥說:“
1 若接收觸發(fā)串口中斷,則進(jìn)入中斷函數(shù)時SBUF已經(jīng)準(zhǔn)備好接受到的數(shù)據(jù)了,必須及時處理
(即收滿一個字節(jié)中斷才被觸發(fā)),你的程序處理有問題
2 字符串和字符數(shù)組的區(qū)別要搞清楚
字符串"000"其實是四個字節(jié)即為"000\0",\0為字符串結(jié)束標(biāo)志(0x00),占用一個字節(jié),問題3就是判斷字符串尾
注意發(fā)送數(shù)據(jù)也會進(jìn)入中斷函數(shù)(同一個中斷函數(shù))“


各位大哥:“若接收觸發(fā)串口中斷,則進(jìn)入中斷函數(shù)時SBUF已經(jīng)準(zhǔn)備好接受到的數(shù)據(jù)了,必須及時處理
(即收滿一個字節(jié)中斷才被觸發(fā)),你的程序處理有問題”

這樣的程序要怎么寫呢?
“字符串和字符數(shù)組的區(qū)別要搞清楚
字符串"000"其實是四個字節(jié)即為"000\0",\0為字符串結(jié)束標(biāo)志(0x00),占用一個字節(jié),問題3就是判斷字符串尾”

那我的
for(i=0;i<3;i++)

要改為

for(i=0;i<4;i++)

是嗎?




”注意發(fā)送數(shù)據(jù)也會進(jìn)入中斷函數(shù)(同一個中斷函數(shù))“
這里。我要怎么處理呢?

謝謝!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
一個簡單的4*4鍵盤識別子程序
尋最便宜的51系列的單片機
高手求救———請大家快快幫幫我吧
這里有做過USB的大俠嗎,需要看一些什么資料?
請各位指點:一個比較簡單的匯報程序
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號