-
1 # 使用者2825805177561
-
2 # 使用者1465424935672
Dim Buffer as Variant 表示聲明瞭一個Buffer變數,但是這個Buffer變數的型別不確定,可以是Long、Integer、Double、Object、String以及陣列等等,Buffer變數的型別由編譯器自行判斷與轉換。
Dim Buffer(100) as Variant 表示聲明瞭一個數組Buffer,該陣列有100個成員,陣列的每一個成員都沒有指定具體的資料型別,由編譯器自行判斷與轉換。
Dim receive(100) as Byte 表示聲明瞭一個數組receive,該陣列有100個成員,陣列的每一個成員都是Byte型。
Dim Buffer() as Byte 表示聲明瞭一個數組Buffer,該陣列成員數目未知,陣列的每一個成員都是Byte型。在確定陣列成員數量之前是不能透過Buffer(xx)的這種方式訪問Buffer裡的成員的。
Dim Buffer() as Byte
.......
"接受
........
Buffer = Mscomm.Input
這種方法實際上是把Mscomm接收快取裡的所有資料讀出來並儲存到Buffer陣列中,Buffer陣列的大小由Mscomm接收快取實際快取的資料量決定,因為Mscomm的接收快取裡實際的資料量是不確定的,所以不能使用
Dim Receive(100) as Byte
.......
接受資料
Receive = Mscomm.Input
這樣的方式。
Dim Receive(100) as Byte
.......
接受資料
Receive(i) = Mscomm.Input
這樣是可以的,這樣實際上是一次從Mscomm的接收快取裡讀一個位元組的資料,你這樣做不行估計是因為資料傳輸速率和RThreshold設定的問題,因為賦值語句執行的時間要遠比串列埠傳輸速率快很多倍,
所以你必須等Mscomm的接收快取裡有100個位元組以上的資料時你才能透過迴圈用Mscomm.Input依次讀出100個位元組的資料,否則就肯定會出錯,所以如果你把RThreshold設定為100,也就是每收到100個位元組的資料觸發一次OnComm事件就可以透過Receive(i) = Mscomm.Input把資料讀出來。
回覆列表
你用一個數組變數(也就是開闢一個接收緩衝區)就OK瞭如:#include<reg51.h>#define uchar unsigned charuchar buf[16],num;void ser_isr() interrupt 4{ if(RI) { RI=0; buf[num]=SBUF; num++; num&=0x0f; }}main(){ TMOD=0x20; SCON=0x50; TH1=TL1=0xfd; TR1=1; ES=1; EA=1; while(1);}