| 
  |||||||||||
| 技術(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樓: | >>參與討論 | 
| 作者: 星星電燈 于 2006/9/10 11:10:00 發(fā)布:
         各位大哥,為什么這樣還是不行。恐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 于 2006/9/10 11:16:00 發(fā)布:
         暈,你先取把書上“串口)那一節(jié)一字一句的看完 然后自己再仔細(xì)想想! 不然別人說了你也不懂! 何況你自己根本就不動腦!  | 
  |
| 4樓: | >>參與討論 | 
| 作者: 星星電燈 于 2006/9/10 11:33:00 發(fā)布:
         謝謝大大!書上沒有講這些啊! 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ù))“ 這里。我要怎么處理呢? 謝謝!  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |