您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
經(jīng)常遇到初學(xué)者,對(duì)單片機(jī)串行通訊出了問題不知道如何辦的情況。其實(shí)最有效的調(diào)試方法是用示波器觀察收發(fā)數(shù)據(jù)的波形。通過觀察波形可以確定以下情況:
1、數(shù)據(jù)是否接收或發(fā)送;
2、數(shù)據(jù)是否正確;
3、波特率是否正確;
一、串行數(shù)據(jù)的格式
異步串行數(shù)據(jù)的一般格式是:起始位+數(shù)據(jù)位+停止位,其中起始位1 位,數(shù)據(jù)位可以是5、6、7、8位,停止位可以是1、1.5、2位。起始位是一個(gè)值為0的位,對(duì)于正邏輯的TTL電平,起始位是一位時(shí)間的低電平;停止位是值為1的位,對(duì)于正邏輯的TTL電平,停止位是高電平。對(duì)于負(fù)邏輯(如RS-232電平)則相反。對(duì)于數(shù)據(jù)0xAA, 8位數(shù)據(jù)位、1位停止位傳輸時(shí),它在信號(hào)線上的波形如圖1(TTL電平)和圖2(RS-232電平)所示。
圖1、TTL電平的串行數(shù)據(jù)幀格式(0xAA)
圖2、RS-232電平的串行數(shù)據(jù)幀格式(0xAA)
二、 根據(jù)波形圖計(jì)算波特率
圖3 波特率計(jì)算示意圖
如圖3,其中灰色線是示波器的時(shí)間分度線,此時(shí)假設(shè)是200ms/格?梢钥戳耍谝粋(gè)字節(jié)的10位(1位起始位,8位數(shù)據(jù)位和1位停止位)共占約1.05ms,這樣可計(jì)算出其波特率約為:
10bit / 1.05ms X 1000 ≈ 9600 bit/s
如果上圖中的時(shí)間軸是100ms/格,同樣可以計(jì)算出波特率應(yīng)是19200bit/s。
三、根據(jù)波形圖判斷RS-485收發(fā)數(shù)據(jù)的正確與否
RS-485是一種半雙工的串行通訊方式,485電平芯片所以要正確接收和發(fā)送數(shù)據(jù),必需保證控制信號(hào)和數(shù)據(jù)的同步,否則要么發(fā)送數(shù)據(jù)丟失,要么接收數(shù)據(jù)可能丟失。
圖4 RS-485的正確發(fā)送數(shù)據(jù)時(shí)序
圖4中,發(fā)送控制信號(hào)的寬度基本與數(shù)據(jù)信號(hào)的寬度一致,所以能保證發(fā)送數(shù)據(jù)的正確和發(fā)送后及時(shí)轉(zhuǎn)為接收。
圖5 RS-485控制信號(hào)太短時(shí)的時(shí)序
圖5中,由于控制信號(hào)關(guān)閉過早,則第二個(gè)字節(jié)的后兩位將發(fā)送錯(cuò)誤;
圖6 RS-485控制信號(hào)太短時(shí)的時(shí)序
圖6中,由于控制信號(hào)關(guān)閉過遲,使485芯片在發(fā)送數(shù)據(jù)后,不能及時(shí)轉(zhuǎn)到接收狀態(tài),此時(shí)總線若有數(shù)據(jù)過來,則本單元將不能正確接收。
上一篇:M451例程講解之按鍵
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08