国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
電子工程網
標題:
在Delphi中使用串口控件MSComm的0字符接收例程祥解
[打印本頁]
作者:
hotpower
時間:
2009-4-2 23:50
標題:
在Delphi中使用串口控件MSComm的0字符接收例程祥解
菜農
HotPower@126.com
發(fā)表于 2006/12/28 22:55:20
//以下是創(chuàng)建窗體時的MSCOMM參數設置過程
//MSComm1.InputMode := comInputModeBinary;
//和MSComm1.InputMode := comInputModeText;
//實驗結果基本對Delghi不太起作用
procedure TForm1.FormCreate(Sender: TObject);
var
str: string;
begin
//MSCOMM參數設置
MSComm1.CommPort := 1;//使用COM1
MSComm1.Settings := '9600,N,8,1';//設置通信口參數
MSComm1.InBufferSize := 32;//設置MSComm1接收緩沖區(qū)為32字節(jié)
MSComm1.OutBufferSize := 2;//設置MSComm1發(fā)送緩沖區(qū)為2字節(jié)
MSComm1.InputMode := comInputModeBinary;//設置接收數據模式為二進制形式
MSComm1.InputLen := 1;//設置Input 一次從接收緩沖讀取字節(jié)數為1
MSComm1.SThreshold := 1;//設置Output 一次從發(fā)送緩沖讀取字節(jié)數為1
MSComm1.InBufferCount := 0;//清除接收緩沖區(qū)
MSComm1.OutBufferCount := 0;//清除發(fā)送緩沖區(qū)
MSComm1.RThreshold := 1;//設置接收一個字節(jié)產生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中相當于串口中斷
//注意其中2個語句
//while MSComm1.InBufferCount > 0 do//輸入FiFO不為空
//if str = '' then str := #0; //0字符處理
//例接收的數據為#24#02#00#01#03
//此時InBufferCount=5.若設置Input 一次從接收緩沖讀取字節(jié)數不限
//即:MSComm1.InputLen := 0;則str := MSComm1.Input;后str好象為#24#02#00#01#03
//但實際為'??'#24#02.總得不到結果,至少0字符后的#01#03無法讀出.
//采用MSComm1.InputLen := 1;后,并配合while MSComm1.InBufferCount > 0 do
//當讀到0字符時,由于str=''(空),故訪問str[1]將會引發(fā)異常的發(fā)生而導致程序的終止.
//故用if str = '' then str := #0; 來向str[1]內認為地填入字符#0且str的長度也為1了.
//故此要點是用if str = '' then str := #0;語句渡過讀0字符的難關~~~
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;//加入數據串
CheckSum := CheckSum xor Byte(str[1]);//求校驗和(除同步符'$'外)
if Length(Buffers) = Byte(Buffers[2]) + 3 then//結束符測試
begin
if CheckSum = 0 then//此時校驗和必須為0表示校驗和正確
begin
case Command of
$22: begin//取歌曲總數
ComboBox1.Items.Clear;
for i := 1 to Byte(Buffers[4]) do
begin
str := '第' + inttostr(i) + '首歌曲';
ComboBox1.Items.Add(str);//
end;
Command := 0;
end;
1: ;
else ;
end;
end;
Buffers := '';//接收完畢清空緩沖區(qū)
CheckSum := 0;//初始化校驗和
end;
end
else
begin
Buffers := '';//接收錯誤清空緩沖區(qū),放棄所有數據
CheckSum := 0;//初始化校驗和
end;
end;
end;
end;
end;
歡迎光臨 電子工程網 (http://m.qingdxww.cn/)
Powered by Discuz! X3.4
主站蜘蛛池模板:
亚洲综合中文网
|
欧美精品一区二区蜜臀亚洲
|
一级毛片免费下载
|
青青青国产依人在线视频97
|
三级久久
|
无限在线观看免费入口
|
把手戳进美女尿口里动态图
|
日韩亚洲人成在线
|
亚州激情视频在线播放
|
三上悠亚久久国产
|
午夜影视在线
|
高挑人妻无奈张开腿
|
无码AV精品一区二区三区
|
四虎自拍
|
午夜美女影院
|
野外xxxxfreexxxx侏儒
|
九九久久国产
|
夜间福利影院
|
日本天堂网在线观看
|
特大毛片
|
背着老婆爆操性感小姨子
|
私密按摩师在线观看 百度网盘
|
亚洲国产精品免费视频
|
特黄视频
|
亚洲视频在线精品
|
国语自产拍在线视频普通话
|
中文字幕无码乱人伦蜜桃
|
青春草a∨在线观看免费app
|
手机免费伦理片
|
FREE另类老女人
|
午夜免费福利片
|
性色a
|
亚洲伊人成综合人影院小说
|
在线中文字幕日韩
|
人妻 中文无码 中出
|
亚洲xx在线
|
香蕉视频一区
|
怡红院最新免费全部视频
|
美女丝袜夹b
|
亚洲激情文学
|
天天干夜夜爱
|