自動處理從串列埠接收的資料

通過串列埠連線的某些裝置以恆定速率(流資料)向你的程式傳送資料或以不可預測的間隔傳送資料。你可以將串列埠配置為自動執行功能,以便在資料到達時處理資料。這稱為串列埠物件的 回撥函式

必須設定串列埠的兩個屬性才能使用此功能:回撥所需的函式名稱(BytesAvailableFcn),以及應觸發執行回撥函式的條件(BytesAvailableFcnMode)。

有兩種方法可以觸發回撥函式:

  1. 當在串列埠接收到一定數量的位元組時(通常用於二進位制資料)
  2. 在串列埠接收到某個字元時(通常用於文字或 ASCII 資料)

回撥函式有兩個必需的輸入引數,稱為 objeventobj 是串列埠。例如,如果要列印從串列埠接收的資料,請定義用於列印名為 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;