許潔靜 姚博 李濱玉
【摘 要】為了擴展單片機的存儲資源及串口,采用基于單片機 (AT89S52-24PI)外部存儲器的擴展及基于單片機控制的多通道串口擴展電路設計及具體實現(xiàn)方法。并以雙端口存儲器 IDT70V261S25PFI和串行通訊控制器TL16C754BPN及以C51系列單片機軟件開發(fā)環(huán)境Keil μVision4為例實現(xiàn)單片機的外部電路控制。實驗結果表明,該方案接口簡單、使用方便、穩(wěn)定可靠。
【關鍵詞】單片機;存儲器;串行通訊;Keil μVision4
【中圖分類號】 TN45【文獻標識碼】 A【文章編號】1672-5158(2013)07-0055-02
Expansion of the circuit control based on MCU external
XU Jie-jing,YAO Bo,LI Bin-yu
(Shanxi Huanghe Group Ltd.,Xiˇ?an 710043,China)
【Abstract】In order to storage resources and serial port expansion chip,based on MCU (AT89S52-24PI) external memory expansion and based on multichannel serial MCU control circuit design and realization method of expansion.And with the dual port memory IDT70V261S25PFI and serial communication controller TL16C754BPN and C51 series single-chip microcomputer software development environment Keil μ Vision4 for example the realization of the external circuit of the single chip control.The experimental results show that, this scheme has simple interface, easy to use,stable and reliable。
【Key words】MCU;Memory;Serial communication; Keil μVision4
引言
目前,應用單片機的產(chǎn)品已經(jīng)滲透到我們生活的各個領域,因此單片機的學習、開發(fā)與應用是社會發(fā)展的必然需求。但單片機的資源及接口又非常的有限,所以更加突出了單片機外部擴展技術的重要性。在需要大量數(shù)據(jù)緩沖的單片機應用系統(tǒng)中,需要在外部擴展數(shù)據(jù)存儲器;單片機通常提供一個串行通道,當單片機系統(tǒng)需要更多的串行通訊通道時,需通過外部串行通訊控制器進行擴展。本文主要介紹基于單片機 (AT89S52-24PI)外部存儲器的擴展及基于單片機控制的多通道串口擴展電路設計及控制方法的具體實現(xiàn)。
1 概述
單片機是一種集成電路芯片,是采用超大規(guī)模集成電路技術把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的微型計算機系統(tǒng),在工業(yè)控制領域的廣泛應用。
AT89S52為ATMEL所生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K的系統(tǒng)可編程Flash存儲器。主要功能列舉如下:擁有靈巧的8位CPU和系統(tǒng)可編程Flash;晶片內部具有時鐘振蕩器(傳統(tǒng)最高工作頻率可至12MHZ);內部程序存儲器(ROM)為8KB;內部數(shù)據(jù)存儲器(RAM)為256字節(jié);32個可編程I/0口線;8個中斷向量源;三個16位定時器/計數(shù)器;三級加密程序存儲器;全雙工UART串行通道。
2 硬件實現(xiàn)方法
2.1 總體設計思路
單片機的P0口作為數(shù)據(jù)線接到雙端口存儲器 IDT70V261S25PFI和串行通訊控制器TL16C754BPN的數(shù)據(jù)口,同時接到FPGA與單片機的ALE譯出雙端口低8位地址;P2口作為高8位地址線輸出到雙端口存儲器IDT70V261S25PFI高8位地址口和串行通訊控制器TL16C754BPN的3位地址口;FPGA通過地址譯碼譯出雙端口存儲器的片選和串行通訊控制器的4路片選信號;單片機的讀寫信號接到雙端口存儲器和串行通訊控制器的讀寫。原理框圖如下圖所示: AT89S52來組成外存儲器擴展電路,除了本文介紹的外存儲芯片外,其它的外存儲芯片(EEPROM、RAM等)的使用方法類似。單片機系統(tǒng)擴展首先要構建系統(tǒng)總線,然后再往系統(tǒng)總線上“掛”存儲芯片或I/O接口芯片。如下圖所示:
通過地址空間分配和外部地址鎖存器。常用的存儲器地址分配有兩種方法,線選法和譯碼法。線選法直接利用系統(tǒng)的高位地址線作為存儲器芯片的片選信號;譯碼法是對高位地址進行譯碼,譯碼輸出作為存儲器芯片的片選信號。常用的外部地址鎖存器芯片有74LS373和74LS573。外部地址鎖存器應用如下圖所示:
3 系統(tǒng)軟件設計
本文采用的軟件開發(fā)平臺,旨在提高開發(fā)人員的生產(chǎn)力,實現(xiàn)更快,更有效的程序開發(fā)。μVision4引入了靈活的窗口管理系統(tǒng),能夠拖放到視圖內的任何地方,支持多顯示器窗口,增加了很多大眾化的功能。
51單片機軟件開發(fā)平臺,keil C51μVision集成開發(fā)環(huán)境是德國Keil公司針對51系列單片機推出的基于32位windows環(huán)境,以51系列單片為開發(fā)目標,以高效率的C語言為基礎的集成開發(fā)平臺。Keil c51從最初的5. 20版本一直發(fā)展到最新的v7.20版本。主要包括:C51交叉編譯器,A51宏匯編器,BL51連接定位器等工具和windows集成編譯環(huán)境μVision,以及單片機軟件仿真器Dscope51.是一個非常優(yōu)秀的51單片機開發(fā)平臺,對C高級語言的編譯支持幾乎達到了完美的程度,當然它也同時支持A51宏匯編。同時它內嵌的仿真調試軟件可以讓用戶采用模擬仿真和實時在線仿真兩種方式對目標系統(tǒng)進行開發(fā)。軟件仿真時,除了可以模擬單片機的I/O口、定時器、中斷外,甚至可以仿真單片機的串行通信。
軟件設計上對于外部存儲器的擴展沒有什么特別的設置,只需對片選選中地址空間進行讀寫操作即可;對于多串口擴展需要對片選選中地址空間進行操作, 在工作軟件初始化部分,應調用初始化通訊控制器函數(shù)對串行通訊控制器中的四路串行通訊口全部進行初始化。程序代碼以下為例說明:
void COMMInitA(void) //軟件初始化函數(shù)
{XBYTE[CSA+LCR]=0x80;/*置波特率分頻系數(shù)設置允許位*/
/*設置波特率分頻系數(shù)為1,外部晶振24MHz,波特率為1.5MBPS;
外部晶振22.1184MHz,波特率為1.3824MBPS*/
XBYTE[CSA+DLL]=0x01;
XBYTE[CSA+DLM]=0x00;
/*清除波特率分頻設置允許位,設置串口數(shù)據(jù)格式設置為1位起始位、8位數(shù)據(jù)位、1位停止位、奇偶校驗為奇校驗*/
XBYTE[CSA+LCR]=0x1b; //奇校驗
/*允許接收數(shù)據(jù)完成中斷*/
XBYTE[CSA+IER]=0x05;
/*中斷總允許*/
XBYTE[CSA+MCR]=0x00;
/*允許使用并清空FIFO,設置接收FIFO門限為60字節(jié)*/
XBYTE[CSA+FCR]=0x61; }
在發(fā)送數(shù)據(jù)時應首先形成發(fā)送數(shù)據(jù)并存儲在發(fā)送數(shù)據(jù)緩沖區(qū)中,然后調用數(shù)據(jù)發(fā)送函數(shù)完成數(shù)據(jù)發(fā)送功能,程序代碼以下為例說明:
void ZD_SEND(void)
{ tmp=0; for(j=2;j<6;j++) //計算校驗和,從第2個字節(jié)開始{ tmp=tmp+zd_txd[j]; } tmp=tmp+zd_txd[0]; zd_txd[1]=tmp; for(j=0;j<6;j++)
{ XBYTE[CSA]=zd_txd[j];//發(fā)送6個字節(jié)} }
在數(shù)據(jù)接收完成中斷服務程序中調用數(shù)據(jù)接收函數(shù),根據(jù)數(shù)據(jù)接收狀態(tài)將已接收到的數(shù)據(jù)存儲在接收緩沖區(qū)中,程序代碼以下為例說明:
void ZD_REC(void)
{ for(j=0;j<15;j++)//串口接收數(shù)據(jù),15個字節(jié)
{ tmp=XBYTE[CSA+LSR]; if((tmp & 0x01)==0x01) buf_rxd[j]=XBYTE[CSA]; }
j=0; while(((XBYTE[CSA+LSR] & 0x01)==0x01) && (j<64))
{ j++; tmp=XBYTE[CSA]; } COMMInitA(); //接收結束
tmp=0; for(j=2;j<15;j++) //計算校驗和,從第2個字節(jié)開始{ tmp=tmp+buf_rxd[j]; } tmp=tmp+buf_rxd[0];
if((buf_rxd[1]==tmp)&&(buf_rxd[0]==0x0f)) //校驗正確,接收緩沖區(qū)數(shù)據(jù)轉到工作數(shù)據(jù)區(qū) { for(j=0;j<15;j++) { zd_rxd[j]=buf_rxd[j]; } bit_gzgzled=0x0; } else bit_gzgzled=0x1; }
為了保持數(shù)據(jù)通訊過程的持續(xù)穩(wěn)定,同時避免不可預見沖突對數(shù)據(jù)通訊過程的干擾引起的工作異常,在必要的時刻需要對數(shù)據(jù)通訊控制器的FIFO 進行定期復位并清空數(shù)據(jù)區(qū)。
4 結束語
本文介紹了基于51系列單片機進行外圍擴展電路的具體實現(xiàn)方法,既解決了單片機的存儲器容量過小及串行通訊通道不足的限制,又提供了一種具有良好的通用性、規(guī)范性的單片機外圍擴展存儲器及多通道串行通訊的實施方案,為51系列單片機提供了更多更廣的應用空間。
參考文獻
[1] 張文德,等.單片機微機原理應用與實驗[M].上海 復旦大學出版社,1996
[2] 江志紅.51單片機技術與應用開發(fā)案例精選[M].清華大學出版社.2008.20-70
[3] 李學軍.如何用MCS-51單片機擴展串口進行通訊[J].寧夏機械, 2003,(2)
[4] Keil公司的幫助文件