日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
在Delphi中使用串口控件MSComm的0字符接收例程祥解
在Delphi中使用串口控件MSComm的0字符接收例程祥解
 更新時間:2008-8-17 19:41:38  點擊數(shù):9
【字體: 字體顏色

//以下是創(chuàng)建窗體時的MSCOMM參數(shù)設(shè)置過程

//MSComm1.InputMode := comInputModeBinary;

//和MSComm1.InputMode := comInputModeText;

//實驗結(jié)果基本對Delghi不太起作用


procedure TForm1.FormCreate(Sender: TObject);
var
  str: string;
begin
//MSCOMM參數(shù)設(shè)置
  MSComm1.CommPort := 1;//使用COM1
  MSComm1.Settings := ''9600,N,8,1'';//設(shè)置通信口參數(shù)
  MSComm1.InBufferSize := 32;//設(shè)置MSComm1接收緩沖區(qū)為32字節(jié)
  MSComm1.OutBufferSize := 2;//設(shè)置MSComm1發(fā)送緩沖區(qū)為2字節(jié)
  MSComm1.InputMode := comInputModeBinary;//設(shè)置接收數(shù)據(jù)模式為二進制形式
  MSComm1.InputLen := 1;//設(shè)置Input 一次從接收緩沖讀取字節(jié)數(shù)為1
  MSComm1.SThreshold := 1;//設(shè)置Output 一次從發(fā)送緩沖讀取字節(jié)數(shù)為1
  MSComm1.InBufferCount := 0;//清除接收緩沖區(qū)
  MSComm1.OutBufferCount := 0;//清除發(fā)送緩沖區(qū)
  MSComm1.RThreshold := 1;//設(shè)置接收一個字節(jié)產(chǎn)生OnComm事件
  MSComm1.PortOpen := true;//打開串口1
/////////////////////////////////////////////////////////////
  Buffers := '''';
  CheckSum := 0;
//發(fā)送串口命令
  Command := 34;
  str := ''$'' + #2 + #$22 + #1;//讀MP3總曲目
  str := str + Char(GetCheckSum(str));//計算校驗和
  MSComm1.Output := str;//發(fā)送串口命令
end;

//以下是接收事件處理過程,在MCU中相當(dāng)于串口中斷

//注意其中2個語句

//while MSComm1.InBufferCount > 0 do//輸入FiFO不為空
//if str = '''' then str := #0; //0字符處理
//例接收的數(shù)據(jù)為#24#02#00#01#03

//此時InBufferCount=5.若設(shè)置Input 一次從接收緩沖讀取字節(jié)數(shù)不限

//即:MSComm1.InputLen := 0;則str := MSComm1.Input;后str好象為#24#02#00#01#03

//但實際為''??''#24#02.總得不到結(jié)果,至少0字符后的#01#03無法讀出.

//采用MSComm1.InputLen := 1;后,并配合while MSComm1.InBufferCount > 0 do

//當(dāng)讀到0字符時,由于str=''''(空),故訪問str[1]將會引發(fā)異常的發(fā)生而導(dǎo)致程序的終止.

//故用if str = '''' then str := #0; 來向str[1]內(nèi)認為地填入字符#0且str的長度也為1了.

//故此要點是用if str = '''' then str := #0;語句渡過讀0字符的難關(guān)~~~

procedure TForm1.MSComm1Comm(Sender: TObject);
var
  str: string;
  i: integer;
begin
  case MSComm1.CommEvent of
    comEvReceive://接收事件處理
      begin
        while MSComm1.InBufferCount > 0 do//輸入FiFO不為空
        begin
          str := MSComm1.Input;//從FIFO中只取1個字符,因為MSComm1.InputLen := 1
          if str = '''' then str := #0; //0字符處理
          if (Buffers = '''') and (str = ''$'') then//同步符測試
          begin
            Buffers := str;//存入同步符''$''
            CheckSum := 0;//初始化校驗和
          end
          else if (Buffers <> '''') and (Buffers[1] = ''$'') then begin//必須用同步符起始
            Buffers := Buffers + str;//加入數(shù)據(jù)串

[1] [2] [3]  下一頁
  • 上一篇: PIC與EMC指令對照表
  • 下一篇: AT51S編程器
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1