關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于μPD78045F單片機的軟件UART

        基于μPD78045F單片機的軟件UART

        作者:西北工業大學 魏江 李紅娟 鄧紅德 時間:2004-10-18 來源:電子產品世界 收藏

        2004年6月A版

        摘  要:本文提出了一種在單片機μPD78045F上用軟件模擬方式實現異步串行通訊功能UART的方法。本方法使用通用I/O口實現,占用資源少,設置簡單,使用方便。

        關鍵詞:μPD78045F;UART;異步串行通訊

        引言

          單片機在數據采集與控制、智能儀表中發揮重要的作用。單片機應用系統與后端上位機系統之間通訊進行數據交換,構成功能強大的測控系統是目前發展的趨勢。

          NEC公司生產的μPD78045F是78K0系列8位單片機功能較強的044F子系列的最高型號。該芯片功能強、可靠性高、速度快、支持節電應用。美中不足的是,該芯片的2個串行I/O口雖然功能強,卻只支持同步通訊,沒有異步通訊功能。

          本文給出在μPD78045F上采用軟件模擬方式,使用2個I/O口線和一個8位定時器實現異步串行UART功能的方法。本方法占用資源少,設置和使用簡單方便,幀格式可自由改變。

        設計思路

          每一個UART都應具備如下功能:

          異步串行發送和接收的基本單位是幀,通常每幀包括以下部分:

          本設計中,發送采用主動查詢方式,可使用任一輸出端口,本文中將P12.1設置為輸出口,作為TxD;由于異步通訊中接收是被動的和隨機的,因此只能采用中斷方式,P0.1是外部中斷INTP1的外部引腳,設計中使用它作為RxD,設置為下降沿觸發方式,可及時檢測到起始位的邏輯0電平,進入中斷處理程序進行數據接收。

          波特率發生器使用8位定時器TM1,產生指定波特率下的1個發送/接收位時序長度,即“位定時”。UART的并行數據到串行數據的轉換、每幀數據格式的生成、發送和接收功能都由軟件來控制完成。在指定波特率下,位定時為1,000,000ms / 波特率,硬件系統采用fx=4.9152 MHz的主晶振,軟件設置定時器計數時鐘為4分頻,即:fx/4=1.2288 MHz

          達到指定波特率位定時常數為:1228800 / 波特率

          常用的波特率對應的位定時常數列在表1中。

        表1  位定時常數

               波特率       定時常數

               38400       32

               19200       64

               14400       85.3333

               9600       128

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

        軟件初始化的C語言程序為:

        DI() ;      /* 關中斷  */

        PM0 |= 0X02 ;       /* P0.1置為輸入方式  */

        PM12&= 0XFD ;  /* P12.1置為輸出方式  */

        P12 |= 0X02 ;       /* TxD 輸出邏輯1電平  */

        PCC = 0x00 ;       /* CPU時鐘不分頻,fx最快速度  */

        TCL1 = 0x06 ;       /* 定時器TM1計數時鐘為fx / 4   */

        CR10 = 128;       /* 9600波特率的位定時常數  */

        TMC1 = 0 ;  /* 定時器停止計數  */

        PPR1 = 0 ;    /* INTP1設為高中斷優先級  */

        PMK1 = 0 ;  /* INTP1中斷允許  */

        INTM0 &= 0XCF ;/* INTP1為下降沿觸發  */

        EI() ;      /* 關中斷  */

        軟件流程

          發送

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

          接收

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

          在μPD78045F的中斷系統中,高優先級中斷的響應時間最長32個CPU時鐘,這些時延應在程序中進行補償,尤其在高速率通訊時位定時時長很短,補償尤為重要。補償的方法是從位定時中減去最長時延32個時鐘。在9600波特率、定時器 4分頻計數情況下,應減去 32/4=8個定時器計數。接收中斷處理流程見圖2。

        結語

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

          使用本方法應具備以下條件:

          本方法占用外部連線少,穩定可靠,使用方便,簡單有效,由于其幀格式的巨大靈活性,是在低成本、中速率、特殊數據傳輸場合下的一個較好選擇。■

        參考文獻:

        1.        NEC Corporation,‘μPD78045F SUBSERIES USER'S MANUAL’,1996



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德庆县| 广元市| 卢湾区| 嵊泗县| 准格尔旗| 富民县| 清镇市| 城固县| 三台县| 蒙山县| 栖霞市| 招远市| 怀安县| 新闻| 合江县| 沂南县| 镇沅| 咸宁市| 宁河县| 贺州市| 黄浦区| 石屏县| 锡林浩特市| 故城县| 龙海市| 天水市| 汝州市| 航空| 闻喜县| 滨海县| 株洲县| 清远市| 红原县| 曲麻莱县| 龙泉市| 瑞昌市| 乡宁县| 张家川| 都匀市| 荆州市| 青冈县|