新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用Proteus學習51單片機之串口

        用Proteus學習51單片機之串口

        作者: 時間:2017-01-06 來源:網絡 收藏

          的理論知識我就不記了,網上多的是。51單片機的,有4種方式,分別為方式0,方式1,方式2,方式3.由于我的目的,使用主要是為了和電腦進行通信,所以主要使用方式1(事實上我也只學了方式1,其他方式等用到的時候再學吧)。

        本文引用地址:http://www.104case.com/article/201701/342562.htm

          串口的方式1,其波特率與定時器T1相關,公式如下:

          方式1波特率 = (2SMOD×32)/(T1溢出率)

          SMOD是一個寄存器,一般我們就取0了

          T1的溢出率,即每秒T1計數滿幾次(相關知識可以看看前面筆記的記錄)

          正是因為如上的公式,所以設置TH1和TL1的初值,就能控制方式1的波特率了。不過一般波特率是固定的那么幾種,像2400,4800和9600等,要用的時候查一下初值就成了。

          由于用的是來模擬串口(我的筆記本電腦根本沒串口),所以需要一個虛擬串口的軟件。推薦使用的是Visual Serial Port Driver,用起來非常的簡單,直接點擊Add Pair就成了,會自動增加一對串口,模擬的時候,分別連接這兩個端口就成。添加好后,可以把這個程序關閉,端口仍舊可以使用。

          要說一下的是,這軟件是一個收費軟件(能免費使用14天),所以,如果只想學習一下串口的話,我們就自私一下吧,不購買了,直接使用一個控制軟件時間的軟件(比如Run As Date),讓程序以為時間一直沒變,就能一直試用了……

          要試驗一下是否可以進行串口連接,可以直接打開安裝目錄下的SAMPLESInteractive SimulationCOMPIM Demo,設置好波特率等參數后,使用“串口調試助手”,向發送數據,看看能否接收到。

          運行后的效果:

          如果像上圖一樣,在“助手”中輸入數據,可以在Proteus的虛擬終端中接收到,說明可以進行串口的仿真了。如果不能接收,則需要檢查一下,波特率等參數是否設置的一致,特別是串口,要設置的“成雙成對”,如從“串口助手”的COM1發送到Proteus的COM2

          ------------------------------------------------------------------

          開始進入實際編碼,我希望寫一個上位機程序,來控制單片機,單片機很簡單,就是從P2口,接8個LED燈,而上位機程序則可以控制燈的亮或者暗,原理圖如下:

          實物做的時候,由于電腦的串口和單片機的串口電平不同,需要使用MAX232芯片做電平轉換,但是這里是模擬,就不加芯片了,同樣能正常運行。加上虛擬終端,是為了直接看到接收到的數據,方便調試。

          上位機程序如下圖,使用C#編寫,編程工具是VS 2008,因為用的是最簡單的語法,所以是基于.NET 2.0寫的。

          上位機寫的特別簡單,選擇好端口后連接,然后控制單片機。可以做到控制任意燈的開和關,下面的控制則可以做到全開或全關,流水燈則是讓單片機演示一次流水燈(演示期間不再接受上位機控制)。上位機的控制代碼特別簡單,就是給單片機發送一個8位的byte(這個花了我很多時間,因為單片機上的char是8位的,我自然而然的把C#上的char也當成是8位了,結果就是發給單片機的時候會出現錯誤,感謝群里大蝦的熱情幫助)。控制格式如下(最低位為第0位):

          位數作用

          0表示選擇第幾個燈,0001表示選擇第1個燈,0101表示選擇第5個燈,當第5,6,7位任意位為1時,則無效

          1

          2

          3

          4表示選擇的燈是開還是關,1表示開

          51表示流水燈

          61表示全滅

          71表示全開

          數據位從高位檢查起,所以如果第7位為1 ,則后面幾位不管設置成什么,都會是燈全開的效果。

          單片機程序和上位機程序都寫得很簡單,里面有詳細注釋,應該一看就能明白了。演示效果如下(錄制的不是很流暢……):



        關鍵詞: Proteus 串口

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 双牌县| 马山县| 永泰县| 盐池县| 澜沧| 贺兰县| 黄石市| 玉龙| 无锡市| 康乐县| 沛县| 河池市| 凌海市| 双桥区| 阿合奇县| 休宁县| 宜君县| 宕昌县| 昆山市| 平原县| 邛崃市| 普格县| 双柏县| 阳新县| 文登市| 平原县| 鹤岗市| 灵石县| 临夏市| 旺苍县| 太康县| 鄂伦春自治旗| 仁怀市| 霞浦县| 长岭县| 筠连县| 永定县| 浪卡子县| 宝兴县| 北辰区| 怀化市|