單片機的串口通訊看起來是很複雜的,主要是因為他用到了更多的寄存器,與前面的知識相比他更具綜合能力,寫起來考慮的問題自然也變多了.而前面學習過的定時器與中斷將是單片機通訊的基礎.
單片機的中斷系統中第4個中斷就是串口中斷,要進行串口通訊首先就要開啟CPU總中斷EA,還要開啟串口通訊中斷ES,這是串口通訊的前堤,而串口通訊也跟計時器一樣有很多的模式,因此我們還要設定SCON寄存器來指定採用哪一種方式進行通訊,而在通訊的過程中,我們還要設定通訊的傳輸速率,不然的話,單片機是沒辦法進行採樣的,這樣也不會得到正確的結果了.我在實驗過程中用到的是1號定時器來設定的傳輸速率,用到了計時器方式2,也就是8位自動重裝,這樣可以簡化編程,她的實現思想就是將常數放入TH,而TL中則是初始化參數,當溢出時,單片機會自動將TH中的常數裝入TL中.
再來說說傳輸速率,我們為什麼要設定傳輸速率,因為單片機會以16倍傳輸速率的速度進行採樣,而在實驗中我們用的是10位非同步收發方式,因此要將SM0置0,SM1置1.而其中的10位有8位元據位,第一位和最後一位是發送資料的起始與結束.採用高的皮特率就不會出錯啦.而傳輸速率是有一個公式的:
方式0的傳輸速率 = fosc/12
方式2的傳輸速率 =(2SMOD/64)· fosc
方式1的傳輸速率 =(2SMOD/32)·(T1溢出率)
方式3的傳輸速率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
根據公式我們很容易就算出當晶振為110592HZ時,要達到9600的傳輸速率,我們只需要將TL1置FDH即可,如:
除此之外,你還要將SCON中的REN位置1,不然的話,單片機是不會接收資料的.
還有不要忘了選擇定時器的工作方式,設定TMOD為0x20既是工作方式2,8位自動重裝定時器.
這樣一來,初始批工作算是差不多了.而串口通訊分為中斷方式,和查詢方式,如果你想用查詢方式你也不用設定IE寄存器了.
在串口通訊中,還有一個很重要的寄存器SBUF,其實也不是一個,是兩個,只是它們共用同一個地址,再熱氣運算式的不同,單片機會自動選擇使用哪一個SBUF.