自動處理從串列埠接收的資料
通過串列埠連線的某些裝置以恆定速率(流資料)向你的程式傳送資料或以不可預測的間隔傳送資料。你可以將串列埠配置為自動執行功能,以便在資料到達時處理資料。這稱為串列埠物件的 回撥函式 。
必須設定串列埠的兩個屬性才能使用此功能:回撥所需的函式名稱(BytesAvailableFcn
),以及應觸發執行回撥函式的條件(BytesAvailableFcnMode
)。
有兩種方法可以觸發回撥函式:
- 當在串列埠接收到一定數量的位元組時(通常用於二進位制資料)
- 在串列埠接收到某個字元時(通常用於文字或 ASCII 資料)
回撥函式有兩個必需的輸入引數,稱為 obj
和 event
。obj
是串列埠。例如,如果要列印從串列埠接收的資料,請定義用於列印名為 newdata
的資料的函式:
function newdata(obj,event)
[d,c] = fread(obj); % get the data from the serial port
% Note: for ASCII data, use fscanf(obj) to return characters instead of binary values
fprintf(1,'Received %d bytes\n',c);
disp(d)
end
例如,要在接收到 64 位元組資料時執行 newdata
功能,請按如下方式配置串列埠:
s = serial(port_name);
s.BytesAvailableFcnMode = 'byte';
s.BytesAvailableFcnCount = 64;
s.BytesAvailableFcn = @newdata;
對於文字或 ASCII 資料,資料通常被劃分為具有終止符的行,就像頁面上的文字一樣。要在收到回車符時執行 newdata
功能,請按如下方式配置串列埠:
s = serial(port_name);
s.BytesAvailableFcnMode = 'terminator';
s.Terminator = 'CR'; % the carriage return, ASCII code 13
s.BytesAvailableFcn = @newdata;