<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 采用μPD78045F實(shí)現異步串行UART功能的方法

采用μPD78045F實(shí)現異步串行UART功能的方法

作者: 時(shí)間:2012-02-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文給出在μ軟件模擬方式,使用2個(gè)I/O口線(xiàn)和一個(gè)8位定時(shí)器。本占用資源少,設置和使用簡(jiǎn)單方便,幀格式可自由改變。

本文引用地址:http://dyxdggzs.com/article/149704.htm

  設計思路

  每一個(gè)都應具備如下

  發(fā)送和接收的基本單位是幀,通常每幀包括以下部分:

  本設計中,發(fā)送主動(dòng)查詢(xún)方式,可使用任一輸出端口,本文中將P12.1設置為輸出口,作為T(mén)xD;由于通訊中接收是被動(dòng)的和隨機的,因此只能中斷方式,P0.1是外部中斷INTP1的外部引腳,設計中使用它作為RxD,設置為下降沿觸發(fā)方式,可及時(shí)檢測到起始位的邏輯0電平,進(jìn)入中斷處理程序進(jìn)行數據接收。

  波特率發(fā)生器使用8位定時(shí)器TM1,產(chǎn)生指定波特率下的1個(gè)發(fā)送/接收位時(shí)序長(cháng)度,即“位定時(shí)”。的并行數據到數據的轉換、每幀數據格式的生成、發(fā)送和接收都由軟件來(lái)控制完成。在指定波特率下,位定時(shí)為1,000,000ms / 波特率,硬件系統采用fx=4.9152 MHz的主晶振,軟件設置定時(shí)器計數時(shí)鐘為4分頻,即:fx/4=1.2288 MHz ,達到指定波特率位定時(shí)常數為:1228800 / 波特率 。常用的波特率對應的位定時(shí)常數列在表1中。

  


  以下設置通訊參數為9600波特率,1位起始位,6位數據位,發(fā)送順序從MSB到LSB,偶校驗,2位停止位。

  

  

  圖1 發(fā)送過(guò)程流程圖

  

  圖2 接收過(guò)程流程圖

  軟件流程

  發(fā)送

  發(fā)送過(guò)程采用主動(dòng)查詢(xún)方式完成,為保證每個(gè)發(fā)送位的時(shí)長(cháng)相同,整個(gè)過(guò)程關(guān)閉中斷。首先,設定定時(shí)器定時(shí)一位時(shí)長(cháng),啟動(dòng)定時(shí)器,關(guān)閉中斷,開(kāi)始一幀的發(fā)送;然后,在發(fā)送一位時(shí)長(cháng)的低電平(起始位)后,按最高位在先的順序依次發(fā)送6個(gè)數據位,同時(shí)計算偶校驗位,并在數據位后發(fā)送;最后,發(fā)送2位時(shí)長(cháng)高電平作為停止位,結束一幀的發(fā)送。關(guān)閉定時(shí)器,開(kāi)放中斷,發(fā)送過(guò)程結束。發(fā)送流程見(jiàn)圖1。

  接收

  接收過(guò)程是在中斷處理程序中完成的。中斷是由下降沿觸發(fā)的,進(jìn)入中斷的時(shí)刻是處在接收起始位的時(shí)段。為了保證接收準確,在檢測到起始位后,不能在每一位時(shí)長(cháng)的開(kāi)始而應在其中間進(jìn)行采樣。進(jìn)入中斷程序后,首先通過(guò)設定定時(shí)器,等待一位半時(shí)長(cháng),跳過(guò)整個(gè)起始位和半時(shí)長(cháng)的首個(gè)數據位,然后開(kāi)始按最高位在先的協(xié)議接收六個(gè)時(shí)長(cháng)的數據位,每接收一位進(jìn)行串并轉換和校驗位計算;隨后接收校驗位并與計算機結果比較,確定是否接收正確。出于簡(jiǎn)化程序,校驗位接收完畢后,沒(méi)有讀取停止位。最后關(guān)閉定時(shí)器,結束接收過(guò)程,中斷返回。

  在μ的中斷系統中,高優(yōu)先級中斷的響應時(shí)間最長(cháng)32個(gè)CPU時(shí)鐘,這些時(shí)延應在程序中進(jìn)行補償,尤其在高速率通訊時(shí)位定時(shí)時(shí)長(cháng)很短,補償尤為重要。補償的是從位定時(shí)中減去最長(cháng)時(shí)延32個(gè)時(shí)鐘。在9600波特率、定時(shí)器 4分頻計數情況下,應減去 32/4=8個(gè)定時(shí)器計數。接收中斷處理流程見(jiàn)圖2。

  結語(yǔ)

  本文介紹的軟件UART方法,已在項目中實(shí)際應用,達到功能要求,工作穩定可靠。從以上方案可以看出,本方法的最高波特率可達38400,每一幀的格式可靈活改變,其中數據位長(cháng)度和發(fā)送順序均沒(méi)有限制,可根據需要發(fā)送數十位的數據位。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>