什么叫硬件流控制
串口通訊流控制 我們在串行通訊處理中,常常看到RTS/CTS和XON/XOFF這兩個選項,這就是兩個流控制的選項,目前流控制主要應用于調制解調器的數據通訊中,但對普通RS232編程,了解一點這方面的知識是有好處的。
那么,流控制在串行通訊中有何作用,在編制串行通訊程序怎樣應用呢?這里我們就來談談這個問題。 1。
流控制在串行通訊中的作用 這里講到的“流”,當然指的是數據流。數據在兩個串口之間傳輸時,常常會出現丟失數據的現象,或者兩臺計算機的處理速度不同,如臺式機與單片機之間的通訊,接收端數據緩沖區已滿,則此時繼續發送來的數據就會丟失。
現在我們在網絡上通過MODEM進行數據傳輸,這個問題就尤為突出。 流控制能解決這個問題,當接收端數據處理不過來時,就發出“不再接收”的信號,發送端就停止發送,直到收到“可以繼續發送”的信號再發送數據。
因此流控制可以控制數據傳輸的進程,防止數據的丟失。 PC機中常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續/停止),下面分別說明。
2。硬件流控制 硬件流控制常用的有RTS/CTS流控制和DTR/DSR(數據終端就緒/數據設置就緒)流控制。
硬件流控制必須將相應的電纜線連上,用RTS/CTS(請求發送/清除發送)流控制時,應將通訊兩端的RTS、CTS線對應相連,數據終端設備(如計算機)使用RTS來起始調制解調器或其它數據通訊設備的數據流,而數據通訊設備(如調制解調器)則用CTS來起動和暫停來自計算機的數據流。 這種硬件握手方式的過程為:我們在編程時根據接收端緩沖區大小設置一個高位標志(可為緩沖區大小的75%)和一個低位標志(可為緩沖區大小的25%),當緩沖區內數據量達到高位時,我們在接收端將CTS線置低電平(送邏輯0),當發送端的程序檢測到CTS為低后,就停止發送數據,直到接收端緩沖區的數據量低于低位而將CTS置高電平。
RTS則用來標明接收設備有沒有準備好接收數據。 常用的流控制還有還有DTR/DSR(數據終端就緒/數據設置就緒)。
我們在此不再詳述。由于流控制的多樣性,我個人認為,當軟件里用了流控制時,應做詳細的說明,如何接線,如何應用。
3。軟件流控制 由于電纜線的限制,我們在普通的控制通訊中一般不用硬件流控制,而用軟件流控制。
一般通過XON/XOFF來實現軟件流控制。常用方法是:當接收端的輸入緩沖區內數據量超過設定的高位時,就向數據發送端發出XOFF字符(十進制的19或Control-S,設備編程說明書應該有詳細闡述),發送端收到XOFF字符后就立即停止發送數據;當接收端的輸入緩沖區內數據量低于設定的低位時,就向數據發送端發出XON字符(十進制的17或Control-Q),發送端收到XON字符后就立即開始發送數據。
一般可以從設備配套源程序中找到發送的是什么字符。 應該注意,若傳輸的是二進制數據,標志字符也有可能在數據流中出現而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個問題。
。
sql中的流控語句有哪些
關鍵字 描述
BEGIN。END 定義語句塊。
BREAK 退出最內層的 WHILE 循環。
CONTINUE 重新開始 WHILE 循環。
GOTO label 從 label 所定義的 label 之后的語句處繼續進行處理。
IF。ELSE 定義條件以及當一個條件為 FALSE 時的操作。
RETURN 無條件退出。
WAITFOR 為語句的執行設置延遲。
WHILE 當特定條件為 TRUE 時重復語句。
MATLAB中‘流控制’是什么意思
所謂流控制利用程序控制數據像流水線一樣處理,matlab具體有以下幾種結構:
一. 順序結構
二.循環結構
1. for -end :特點是循環判斷條件通常是對循環次數的判斷,即循環次數是預先設定的。調用格式為:
for 變量=表達式
執行語句
……
執行語句
end
表達式是一個向量,可表示為m:s:n
2. while-end:判斷控制一般是邏輯判斷語句,使用范圍更大。調用格式為:
while 表達式
執行語句
……
執行語句
end
表達式一般是關系運算式或邏輯運算式組成的邏輯判斷語句,以確定循環是否繼續。通常表達式的值非零,即為邏輯真,程序繼續循環,否則停止循環。
三. 選擇結構
if-else-end 又稱為條件語句,根據表達式的情況判斷是否滿足條件來確定程序下一步的運行。大致可分為三步進行:
首先計算緊跟if后面表達式。
接著判斷表達式計算結果,若結果為0,判斷值為假;若結果為1,判斷值為真。
然后若判斷值為真,則執行其后的執行語句組;否則跳過,執行下一個條件表達式或者結束該選擇語句。
調用格式為:
1. if 表達式
執行語句組
end
2. if 表達式
執行語句組1
else
執行語句組2
end
3. if 表達式1
執行語句組1
elseif 表達式2
執行語句組2
elseif 表達式3
執行語句組3
……
else
執行語句組n
end
關鍵字if 或elseif后面的條件表達式為條件,通常是由關系運算或與邏輯運算式組成的邏輯判斷語句,如果if 或elseif后面的表達式的值為真時,執行緊跟其后的語句內容,否則跳過去,并根據選擇語句的表達形式執行后面的elseif表達式語句、跟在else后的執行語句或end語句。
四. 分支語句
switch-case-end 又稱為開關語句,使程序在不同的情況下進行相應的操作。調用格式為:
switch 表達式
case 常量表達式1
執行語句組1
case 常量表達式2
執行語句組2
……
case 常量表達式n
執行語句組n
otherwise
執行語句組n+1
end
在switch后面的表達式為開關條件,它可以是數字或字符串。當表達式的值與某個case后面的常量表達式的值相等時,就執行相應的語句組,若沒有值與所有常量表達式的值相等,執行othwewise后面的語句組。與C語言的switch不同的是,在MATLAB中,當程序執行完某個case語句組后便會立即直接跳出switch語句,執行后續的語句。
五. 其他控制語句
1. 中斷語句break:通常用于循環控制中,如for、while等循環,通過if語句判斷調用條件,程序在滿足條件下調用break語句后,在循環未自然終止之前跳出當前循環體。在多層循環嵌套中,break只是終止包含break指令的最內層的循環體。
2. 繼續語句continue:通常用于循環控制中,可采用if語句判斷調用條件,調用continue語句后,程序不再執行循環體內剩余部分的語句而是直接轉到循環的終點,繼續下一次的循環運行。
3. 返回語句return:使當前正在運行的M文件函數正常結束并返回調用它的函數或程序繼續運行,或返回到調用它的環境,如命令窗口。return 語句通常用在函數M文件里面,對某些輸入參數或執行結果進行判斷,如果出現問題,便調用return語句終止當前程序的運行并返回。
名詞解釋: 控制流
控制流 Transact-SQL 提供稱為控制流語言的特殊關鍵字,用于控制 Transact-SQL 語句、語句塊和存儲過程的執行流。
這些關鍵字可用于 Transact-SQL 語句、批處理和存儲過程中。 不使用控制流語言,則各 Transact-SQL 語句按其出現的順序分別執行。
控制流語言使用與程序設計相似的構造使語句得以互相連接、關聯和相互依存。 當您需要 Transact-SQL 進行某種操作時,這些控制流關鍵字非常有用。
例如,當在一個邏輯塊中包含多個 Transact-SQL 語句時,請使用 BEGIN。END 語句對。
使用 IF。ELSE 語句對的情況是:IF(如果)滿足某條件,則執行某些語句或語句塊,而如果不滿足此條件(ELSE 條件)則執行另一條語句或語句塊。
控制流語句不能跨越多個批處理或存儲過程。 以下是控制流關鍵字。
BEGIN。END WAITFOR GOTO WHILE IF。
ELSE BREAK RETURN CONTINUE。
Transact-SQL控制流語句編程(SQL Server 2000)
DECLARE @N AS int, @S as int, @loop as int;
SET @S=0
SET @N = 10
SET @loop=0
WHILE @S <= 1000
BEGIN
SET @loop = @loop+1 -- 循環次數
SET @N =(@loop*2-1) * 10 -- 生成奇數
SET @S = @N + 2 -- 生成S的值
--Print 'N=' + CAST(@N as varchar(8)) + ' ' + 'S=' + CAST(@S as varchar(8))
END
--Print @loop
Print @N
把上面語句考到記事本中,存為“最小值.slq ”就成了。腳本中的 "-- Print 。. " 是為了驗證用的。
更正: “-- 生成奇數” 應該是 “-- 生成奇數 * 10 ”
你那個2字體小一點,應該是平方吧。看來我前面的就完全理解錯了,算法完全不同。呵呵。應該是這樣的(有點慚愧哦):
DECLARE @N AS int, @S as int, @loop as int;
SET @S=0
SET @N = 10
SET @loop=0
WHILE @S <= 1000
BEGIN
SET @loop = @loop+1 -- 循環次數
SET @N =(@loop*2-1) -- 生成奇數
SET @S = @N * @N -- 生成S的值(N的平方)
--Print 'N=' + CAST(@N as varchar(8)) + ' ' + 'S=' + CAST(@S as varchar(8))
END
--Print @loop
Print @N