采用μPD78045F實(shí)現(xiàn)異步串行UART功能的方法
本文給出在μPD78045F上采用軟件模擬方式,使用2個(gè)I/O口線和一個(gè)8位定時(shí)器實(shí)現(xiàn)異步串行UART功能的方法。本方法占用資源少,設(shè)置和使用簡單方便,幀格式可自由改變。
本文引用地址:http://m.butianyuan.cn/article/149704.htm設(shè)計(jì)思路
異步串行發(fā)送和接收的基本單位是幀,通常每幀包括以下部分:
本設(shè)計(jì)中,發(fā)送采用主動(dòng)查詢方式,可使用任一輸出端口,本文中將P12.1設(shè)置為輸出口,作為TxD;由于異步通訊中接收是被動(dòng)的和隨機(jī)的,因此只能采用中斷方式,P0.1是外部中斷INTP1的外部引腳,設(shè)計(jì)中使用它作為RxD,設(shè)置為下降沿觸發(fā)方式,可及時(shí)檢測到起始位的邏輯0電平,進(jìn)入中斷處理程序進(jìn)行數(shù)據(jù)接收。
波特率發(fā)生器使用8位定時(shí)器TM1,產(chǎn)生指定波特率下的1個(gè)發(fā)送/接收位時(shí)序長度,即“位定時(shí)”。UART的并行數(shù)據(jù)到串行數(shù)據(jù)的轉(zhuǎn)換、每幀數(shù)據(jù)格式的生成、發(fā)送和接收功能都由軟件來控制完成。在指定波特率下,位定時(shí)為1,000,000ms / 波特率,硬件系統(tǒng)采用fx=4.9152 MHz的主晶振,軟件設(shè)置定時(shí)器計(jì)數(shù)時(shí)鐘為4分頻,即:fx/4=1.2288 MHz ,達(dá)到指定波特率位定時(shí)常數(shù)為:1228800 / 波特率 。常用的波特率對應(yīng)的位定時(shí)常數(shù)列在表1中。
以下設(shè)置通訊參數(shù)為9600波特率,1位起始位,6位數(shù)據(jù)位,發(fā)送順序從MSB到LSB,偶校驗(yàn),2位停止位。
圖1 發(fā)送過程流程圖
圖2 接收過程流程圖
軟件流程
發(fā)送
發(fā)送過程采用主動(dòng)查詢方式完成,為保證每個(gè)發(fā)送位的時(shí)長相同,整個(gè)過程關(guān)閉中斷。首先,設(shè)定定時(shí)器定時(shí)一位時(shí)長,啟動(dòng)定時(shí)器,關(guān)閉中斷,開始一幀的發(fā)送;然后,在發(fā)送一位時(shí)長的低電平(起始位)后,按最高位在先的順序依次發(fā)送6個(gè)數(shù)據(jù)位,同時(shí)計(jì)算偶校驗(yàn)位,并在數(shù)據(jù)位后發(fā)送;最后,發(fā)送2位時(shí)長高電平作為停止位,結(jié)束一幀的發(fā)送。關(guān)閉定時(shí)器,開放中斷,發(fā)送過程結(jié)束。發(fā)送流程見圖1。
接收
接收過程是在中斷處理程序中完成的。中斷是由下降沿觸發(fā)的,進(jìn)入中斷的時(shí)刻是處在接收起始位的時(shí)段。為了保證接收準(zhǔn)確,在檢測到起始位后,不能在每一位時(shí)長的開始而應(yīng)在其中間進(jìn)行采樣。進(jìn)入中斷程序后,首先通過設(shè)定定時(shí)器,等待一位半時(shí)長,跳過整個(gè)起始位和半時(shí)長的首個(gè)數(shù)據(jù)位,然后開始按最高位在先的協(xié)議接收六個(gè)時(shí)長的數(shù)據(jù)位,每接收一位進(jìn)行串并轉(zhuǎn)換和校驗(yàn)位計(jì)算;隨后接收校驗(yàn)位并與計(jì)算機(jī)結(jié)果比較,確定是否接收正確。出于簡化程序,校驗(yàn)位接收完畢后,沒有讀取停止位。最后關(guān)閉定時(shí)器,結(jié)束接收過程,中斷返回。
在μPD78045F的中斷系統(tǒng)中,高優(yōu)先級中斷的響應(yīng)時(shí)間最長32個(gè)CPU時(shí)鐘,這些時(shí)延應(yīng)在程序中進(jìn)行補(bǔ)償,尤其在高速率通訊時(shí)位定時(shí)時(shí)長很短,補(bǔ)償尤為重要。補(bǔ)償?shù)?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/方法">方法是從位定時(shí)中減去最長時(shí)延32個(gè)時(shí)鐘。在9600波特率、定時(shí)器 4分頻計(jì)數(shù)情況下,應(yīng)減去 32/4=8個(gè)定時(shí)器計(jì)數(shù)。接收中斷處理流程見圖2。
結(jié)語
本文介紹的軟件UART實(shí)現(xiàn)方法,已在項(xiàng)目中實(shí)際應(yīng)用,達(dá)到功能要求,工作穩(wěn)定可靠。從以上方案可以看出,本方法的最高波特率可達(dá)38400,每一幀的格式可靈活改變,其中數(shù)據(jù)位長度和發(fā)送順序均沒有限制,可根據(jù)需要發(fā)送數(shù)十位的數(shù)據(jù)位。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論