串口通訊對單片機來說意義重大,并且所需要的電纜數量少,接線簡單,所以廣泛應用于遠程數據傳輸。簡單來說,主機與外設的數據交換,比如電腦和打印機之間的溝通,還有主機與主機的數據交換,比如QQ通訊,都是由串口通訊來實現的。
想要實現串口通訊,需要三根線來完成整個過程:地線、發送和接收。由于串口通訊是異步的,端口能夠在一根線上發送數據的同時,在另一根線上接收數據。其他的線用于“握手”,表示友好。整個過程好比木桶取水,發送方掀開桶蓋兒,再往桶里倒水,也就是說,你要把數據發送給誰,發送什么東西。當發送完成,接收方需要從桶內取水。當水取完時,會給發送方一個消息,告訴他“我接收完了”。也就相當于打印機,在打印之前會問計算機,是否打印此數據。是,則啟動打印工作;否,則停止打印。所以一般串口通訊,總要有一個主動方和一個被動方,而且二者傳輸數據時,會有一定的協商好的數據格式。發送和接收都要按照此數據格式進行。
串口通訊會用到串口,常用的串行端口有RS232、RS485、RS422。所謂串行通訊就是一次進行一個數據位傳輸的意思。也就是說在某個時間點上,只會呈現一種電平。各種電平一次呈現,可能會持續某個單位長度,我們把這種通訊稱之為串口通訊。
比如我們要傳輸某個二進制數據:“10 10 10 10”。這個字節有八個比特位。串行通訊傳輸一個字節時,是從右邊的低比特位開始傳輸。傳輸這個字節需要八個單位時間,而每個比特位的時間是可以單獨設置的。如果發送方將每個比特位的時間設置為M,那么接收方也需要將每個比特位的時間設置為M。如果接收方將時間設置為N,也可以接收到數據,但是接受到的數據與源數據不一致。數據不一致,那么串口通訊過來的數據也就沒有意義了。所以發送方和接收方的每個比特位時間數一定要一致。