音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

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

如何用串口連續(xù)接收5個(gè)字節(jié)?連續(xù)中斷5次嗎?

作者:bosszc 欄目:單片機(jī)
如何用串口連續(xù)接收5個(gè)字節(jié)?連續(xù)中斷5次嗎?
請(qǐng)教大狹
有個(gè)儀器每秒從串口發(fā)送5個(gè)字節(jié),我用單片機(jī)從儀器的串口要讀出這5個(gè)字節(jié)
   .我的方法是用單片機(jī)連續(xù)中斷5次來讀的.但是好沒有收到數(shù)據(jù),請(qǐng)問是什么原因?
由于儀器每秒是連續(xù)發(fā)送五個(gè)字節(jié)的數(shù)據(jù),中間沒有間斷,
但是單片機(jī)每次的串口中斷只能接受一個(gè)字節(jié),是不是要連續(xù)中斷五次才能讀完五字節(jié)。下面是接收數(shù)據(jù)的部分程序
每次中斷返回后都在等待新一次的中斷,
...........
mov r0,#10h
...........
org 0023h
receive_data:
    jnb ri,$
    clr ri
    clr ex1    ;禁止外部按鍵中斷
    mov a,sbuf
    mov @r0,a
    inc r0
    cjne r0,#15h,wait
    mov r0,#10h
wait:   reti
   波特率4800,n,8,1 定時(shí)器t1方式2,串口方式1.     

2樓: >>參與討論
夏蟲
單片機(jī)的接收緩沖區(qū)只有一個(gè)字節(jié)的空間
單片機(jī)的接收緩沖區(qū)只有一個(gè)字節(jié)的空間,不可能一次接收5個(gè)字節(jié)

3樓: >>參與討論
yang96381
呵呵,制定通信協(xié)議。!
 
4樓: >>參與討論
sclarkca
不應(yīng)該會(huì)這樣的
你第一個(gè)字節(jié)能收到嗎?

5樓: >>參與討論
lishuanghua
你老在中斷中等待新的中斷,這樣是不行的
 
6樓: >>參與討論
isoar
他老人家的匯編寫得不怎么樣
 
7樓: >>參與討論
tzfzephyr
你這樣只能收到一個(gè)數(shù)據(jù)
 
8樓: >>參與討論
bosszc
需要什么樣的通信協(xié)議.
我也知道一次中斷,只能讀取一個(gè)字節(jié)!
所以我采用了中斷五次的方法,
注意:每接受到一個(gè)字節(jié)后中斷會(huì)返回的,并不是在中斷中等中斷!!!
而且每過一秒,接受到的數(shù)據(jù)都會(huì)更新.就是重寫10h~14h這5個(gè)單元.


yang96381你好:
    不知道您能不能具體一點(diǎn)呢?需要什么樣的通信協(xié)議.


9樓: >>參與討論
jjg
如果是每次固定收5個(gè)字節(jié)的數(shù)據(jù),那你可以在中斷中連續(xù)收5個(gè)。
進(jìn)入中斷連續(xù)接收5個(gè)字節(jié)后再退出中斷。

10樓: >>參與討論
艾森豪威爾
支持樓上
 
11樓: >>參與討論
xymxym
中斷里面接收一個(gè)字節(jié)放入緩沖數(shù)組后退出,不要死等!
數(shù)組指針加1,再通過數(shù)組指針判斷字節(jié)數(shù)是否達(dá)到了5個(gè)字節(jié)(也可以再用一個(gè)變量來作為計(jì)數(shù),并與數(shù)組初值下標(biāo)相加,相加后的和就是當(dāng)前要存入的數(shù)組單元了,同時(shí)這個(gè)變量作為判斷接收字節(jié)數(shù)的依據(jù)),如果達(dá)到了5個(gè)字節(jié),則將數(shù)組指針重置初值(為下一次5個(gè)字節(jié)的接收作準(zhǔn)備,如果用了計(jì)數(shù)變量的話,也要將變量置0x00)并置接收完畢的標(biāo)致為1,在主程序里面去判斷這個(gè)標(biāo)致并相應(yīng)處理就行了!怎么處理樓主應(yīng)該會(huì)吧?

* - 本貼最后修改時(shí)間:2005-12-1 11:52:48 修改者:xymxym

12樓: >>參與討論
bosszc
發(fā)送數(shù)據(jù)的協(xié)議是:4800,N,8,1 每秒一次,每次5字節(jié)
多謝這末多大狹來參加討論,還是要說明一下:
1.儀器的串口發(fā)送數(shù)據(jù)的協(xié)議是:4800,N,8,1  這個(gè)與接收端單片機(jī)串口設(shè)置為:定時(shí)器t1方式2,串口方式1,波特率 4800是否有什么問題或者不符?
2.現(xiàn)在的問題是接受不到數(shù)據(jù)而不是接收到后怎末處理的問題.
3.有人建議在中斷中連續(xù)接收5字節(jié),不知道如何可以在一次串口中斷中實(shí)現(xiàn),請(qǐng)指點(diǎn).
請(qǐng)大家指點(diǎn).謝謝.

13樓: >>參與討論
夏蟲
偶也不明白
偶也不明白怎么在一次中斷中連續(xù)接收5次?這跟5次中斷有什么區(qū)別?

14樓: >>參與討論
xymxym
你要把串口方面初始化程序貼出來大家才能知道啊
比如,TH1,TL1是多少,晶振是多少,TR1=等1?ES=1?EA=1?這樣子誰知道你設(shè)的是不是4800bps,是否有沒有使能串口中斷!!

15樓: >>參與討論
南方的老樹
不好在中斷中連續(xù)接收n個(gè)字節(jié),因?yàn)椴荒鼙WC對(duì)方不會(huì)少發(fā)一個(gè)
 
16樓: >>參與討論
hotpower
暈~~~"每秒是連續(xù)發(fā)送五個(gè)字節(jié)的數(shù)據(jù),中間沒有間斷"
停止位是干暈事的???

* - 本貼最后修改時(shí)間:2005-12-1 18:46:42 修改者:hotpower

17樓: >>參與討論
啊龍
有意思,如果你只是接收,
不必判斷RI,直接清除,數(shù)據(jù)讀入緩沖即可不好做的是,你如何能保證接收的5個(gè)數(shù)據(jù)同發(fā)送的5個(gè)數(shù)據(jù)同步,需要協(xié)議

18樓: >>參與討論
bosszc
回復(fù): xymxym
"比如,TH1,TL1是多少,晶振是多少,TR1=等1?ES=1?EA=1?這樣子誰知道你設(shè)的是不是4800bps,是否有沒有使能串口中斷。!"

波特率設(shè)置沒有問題的!!!!晶振11.0592MHZ,TR1=1,ES=1,EA=1 中斷是使能的.


每次發(fā)送的第5個(gè)字節(jié)都是0dh,硬件是通過COM1口的3線簡單接法.


19樓: >>參與討論
stering
我是5次中斷
反正我做的422的通訊協(xié)議是一次中斷一個(gè)字節(jié)的。樓上高手不知道能不能詳細(xì)介紹怎么在一次中斷里取5個(gè)數(shù)

20樓: >>參與討論
water2005
re
我想阿龍說的有道理,如何保證接收和發(fā)送一致,有可能發(fā)送5個(gè),只接收到4個(gè),或者像老樹說的那樣。如果實(shí)現(xiàn)了同步應(yīng)該可以

* - 本貼最后修改時(shí)間:2005-12-2 20:49:04 修改者:water2005

21樓: >>參與討論
quliuwuhen
串口設(shè)置問題
 
22樓: >>參與討論
xhf001
給你個(gè)程序
COM: PUSH  ACC
      PUSH  PSW
      MOV   PSW,#10H
      JB    TI,COM1
      CLR   RI
      MOV   A,SBUF
      MOV   @R0,A
      INC   R0
      INC   R2
      CJNE  R2,#05H,COM2
      MOV   R2,#00H ;5字節(jié)計(jì)數(shù)器
      MOV   R0,#30H ;數(shù)據(jù)存放起始地址
      SETB  02H  ;完畢標(biāo)志
COM2: POP   PSW
      POP   ACC
      RETI
COM1: CLR   TI
      -----
      -----
      POP   PSW
      POP   ACC
      RETI      

23樓: >>參與討論
xchangjun
用串口接收
你可用串口rx接收,同時(shí)注意波特率及位數(shù)的設(shè)置

24樓: >>參與討論
SupermanTm
可以通過幀間隔期來實(shí)現(xiàn)同步的
協(xié)議約定,發(fā)送端發(fā)出的數(shù)據(jù)是連續(xù)的(一幀內(nèi)的相鄰兩個(gè)字節(jié)之間間隔不超過1byte的時(shí)間)
接收端每發(fā)生RI中斷即對(duì)計(jì)時(shí)器復(fù)位,當(dāng)計(jì)時(shí)器到的時(shí)候就設(shè)定為幀同步狀態(tài)。

最節(jié)約資源的方法是,如果使用半雙工的通訊,讓發(fā)送始終發(fā)生(可通過外部器件封鎖發(fā)送),那么在兩次RI之間經(jīng)過兩次的TI中斷則視作幀同步。

25樓: >>參與討論
bosszc
如何才能實(shí)現(xiàn)同步呢?????????
如何才能實(shí)現(xiàn)同步呢?????????
還是協(xié)議的問題吧????
需要什么樣的協(xié)議呢?

26樓: >>參與討論
bosszc
現(xiàn)在第一個(gè)字節(jié)也收不到!!!!!!!!!
現(xiàn)在第一個(gè)字節(jié)也收不到!!!!!!!!!
需要什么樣的協(xié)議呢??
如何才能同步呢?
儀器是一次連續(xù)發(fā)送5字節(jié),中間好象沒有停止位,只是最后一個(gè)字節(jié)為0xd,表示一次發(fā)送完!!

27樓: >>參與討論
南方的老樹
協(xié)議已經(jīng)規(guī)定了,有個(gè)尾也可以
然后倒推,2個(gè)尾之間如果是4個(gè)字節(jié)那就是有效數(shù)據(jù)

28樓: >>參與討論
bosszc
如何同步呢????
 
29樓: >>參與討論
dengm
re: 給你改一下, 要學(xué)會(huì)用 XRL
   RX_BUF   EQU 10H
   FRAM_LEN EQU 5
   END_CODE EQU 0DH
...........
  mov r0,#RX_BUF ;10h
  MOV (RX_BUF+FRAM_LEN-1), #(END_CODE+1)  ; 不等于 end_code

...........
org 0023h
receive_data:
    JBC RI, RX_A
      clr TI
      RETI
..........

RX_A:
    PUSH ACC
    mov a,sbuf
    ;*******         clr ex1    ;禁止外部按鍵中斷
    mov @r0,a

    XRL A, #END_CODE            
    JZ RX_B
      MOV A, #(RX_BUF + FRAM_LEN-1)
      XRL A, R0
      INC R0
      JNZ RX_X      

RX_B:
    MOV R0, #RX_BUF
RX_X:
    POP ACC    
    reti


* - 本貼最后修改時(shí)間:2005-12-3 17:49:33 修改者:dengm

30樓: >>參與討論
bosszc
這個(gè)儀器是主動(dòng)發(fā)送數(shù)據(jù)的
注意:這個(gè)儀器是主動(dòng)發(fā)送數(shù)據(jù)的,所以如何實(shí)現(xiàn)握手信號(hào)是個(gè)問題,同步也是難題.


31樓: >>參與討論
happylover
不合理
首先你的程序就有問題,在進(jìn)入中斷后,你知道ri標(biāo)志位要清零,但在等待的之前就應(yīng)該先將ri標(biāo)志位清零,不然就一直帶等待
再次,這么做如果出現(xiàn)了誤碼的話,在現(xiàn)在這樣的程序下,不好解決誤碼重發(fā)的問題,也就是上面幾位朋友說到的.還是做好協(xié)議,用置標(biāo)志位的方法好一些.

32樓: >>參與討論
liumsn
當(dāng)然一次中斷一個(gè)字節(jié),自己另外定一個(gè)緩沖嘛
 
33樓: >>參與討論
艾森豪威爾
如果是每秒一次,每次5字節(jié),那最好別一次中斷收5個(gè)字節(jié)
因?yàn)槟菢佑锌赡軐?duì)方發(fā)送得很慢(比方說每隔200ms發(fā)一個(gè)字節(jié)),那么你進(jìn)一次中斷要在中斷里面等一秒,這是不允許的。
所以建議還是采取一次中斷接收一個(gè)字節(jié)的方法。
下面是一次中斷接收多個(gè)字節(jié)的例子(至少接收兩個(gè)字節(jié)):
unsinged CHAR SerialBuf[N];
unsinged CHAR*SerialBufp=SerialBuf;
unsigned CHAR i;
void serial_isr(void)
{
  while(1)
{
   i=0;
   if(RI==1)
     RI=0;
   *SerialBufp++=SBUF;
   while(!RI)
   {
     if(i++ > 300)//估計(jì)值
      break;    
   }              
   *SerialBufp++=SBUF;
   if((SerialBufp-SerialBuf)==N)
     break;
}
}

34樓: >>參與討論
bosszc
多謝各位大狹的幫助,問題已經(jīng)解決!!!
 
35樓: >>參與討論
肖敏鋒
你的中斷程序應(yīng)保證執(zhí)行時(shí)間應(yīng)小于10B的數(shù)據(jù)傳輸時(shí)間。
接收5個(gè)數(shù)據(jù),設(shè)緩沖區(qū)
5次中斷是比較好的,個(gè)人認(rèn)為
你非要在一次接受5個(gè)也可以。就是效率不敢恭維

36樓: >>參與討論
LFSLY
你要把串口中斷設(shè)為第一高優(yōu)先級(jí)
 
37樓: >>參與討論
zhwdy81
我做過的,很容易就實(shí)現(xiàn)的
我用的是moto的,連續(xù)接收都做過的,沒問題的,無論是模塊,還是用軟件來模擬的,都很容易實(shí)現(xiàn)的。
如果是接收不到的話,或亂碼的話最好也看一下設(shè)置,通常都是在波特率上出問題。


38樓: >>參與討論
bosszc
問題都解決了
問題都解決了....謝謝大家參與討論!決定!決定

39樓: >>參與討論
夏蟲
說說怎么解決的啊。〈蠹夜餐窒砺
 
40樓: >>參與討論
huxiangbin
就是怎么解決的呀?
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
c51用c語言編時(shí)各種特殊函數(shù)到哪去找?
請(qǐng)問哪位高人知道PT100的價(jià)格。???急。。!
找不到能在-40度工作的穩(wěn)壓管和78L05?
請(qǐng)高手推薦一下"計(jì)時(shí)芯片"或"計(jì)時(shí)電路"
省電模式被定時(shí)器中斷喚醒,中斷結(jié)束后返回何處?
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)