摘要:用ALTERA公司MAX7000系列CPLD芯片實現(xiàn)單片機與PC104 ISA總線接口之間的并行通信,給出系統(tǒng)設(shè)計方法及程序源代碼。包括通信軟件和AHDL設(shè)計部分。
CPLD(Complex Programmable Logic Device)是一種復雜的用戶可編程邏輯器件,由于采用連續(xù)連接結(jié)構(gòu)。這種結(jié)構(gòu)易于預(yù)測延時,從而電路仿真更加準確。CPLD是標準的大規(guī)模集成電路產(chǎn)品,可用于各種數(shù)字邏輯系統(tǒng)的設(shè)計。近年來,由于采用先進的集成工藝和大批量生產(chǎn),CPLD器件成本不斷下降,集成密度、速度和性能大幅度提高,一個芯片就可以實現(xiàn)一個復雜的數(shù)字電路系統(tǒng);再加上使用方便的開發(fā)工具,使用CPLD器件可以極大地縮短產(chǎn)品開發(fā)周期,給設(shè)計、修改帶來很大方便[1]。本文以ALTERA公司的MAX7000系列為例,實現(xiàn)MCS51單片機與PC104 ISA總線的并行通信。采用這種通信方式,數(shù)據(jù)傳輸準確、高速,在12 MHz晶振的MCS51單片機控制的數(shù)據(jù)采集系統(tǒng)中,可以滿足與PC104 ISA總線接口實時通信的要求,通信速率達200 Kbps。
1 系統(tǒng)總體設(shè)計方案
本系統(tǒng)用CLPD實現(xiàn)單片機與PC104 ISA總線接口的并行通信。由于PC104主要完成其它方面的數(shù)據(jù)采集工作,只是在空閑時才能接收單片機送來的數(shù)據(jù),所以要求雙方通信的實時性很強,但數(shù)據(jù)量不是很大。因此,在系統(tǒng)設(shè)計中單片機中斷方式接收數(shù)據(jù),PC104采用查詢方式接收數(shù)據(jù)。系統(tǒng)設(shè)計方案如圖1所示。

在圖1單片機部分,D[0..7]是數(shù)據(jù)總線,A[0..15]是地址總線,RD和WR分別是讀寫信號線,INT0是單片機的外部中斷。當單片機的外部中斷信號有效時,單片機接收數(shù)據(jù)。
在CPLD部分,由一片MAX7000系列中的EPM7128LSC84來實現(xiàn),用來完成MCS51與PC104ISA總線接口之間的數(shù)據(jù)傳輸、狀態(tài)查詢及延時等待。
在PC104 ISA部分,只用到ISA的8位數(shù)據(jù)總線D[0..7],A[0..9]是PC104的地址總線;IOW和IOR是對指定設(shè)備的讀寫信號;AEN是允許DMA控制地址總線、數(shù)據(jù)總線及讀寫命令線進行DMA傳輸,及對存儲器和I/O設(shè)備的讀寫;IOCHRDY是I/O就緒信號,I/O通道就緒為高,此時處理機產(chǎn)生的存儲器讀寫周期為4個時鐘周期,產(chǎn)生的I/O讀寫周期和DMA字節(jié)傳輸均需5個時鐘周期,MCS51通過置此信號為低電平來使CPU插入等待周期,從而延長I/O周期;SYSCLK是系統(tǒng)時鐘信號,是為了與外部設(shè)備保持同步;RESETDR是上電復位或系統(tǒng)初始化邏輯,是系統(tǒng)總清信號。
2 基于MAX+plus II的硬件實現(xiàn)
本系統(tǒng)是用ALTERA公司的CPLD開發(fā)工具MAX+plusII。它支持多種輸入方式,給設(shè)計開發(fā)提供了極大的方便。系統(tǒng)的主體部分仍是用原理圖輸入方式。由于庫中提供了現(xiàn)在的芯片,所以使用很方便。原理圖輸入部分如圖2和圖3所示。圖2主要完成單片機與ISA接口通信中的數(shù)據(jù)傳輸和握手判斷。


D[0..7] 單片機的8位雙向數(shù)據(jù)總線;
PCD[0..7] ISA接口的8位雙向數(shù)據(jù)總線;
PCRD ISA接口的讀有效信號;
PCWR ISA接口的寫有效信號;
判斷單片機已寫數(shù)據(jù)或讀走數(shù)據(jù);
PCSTATE 單片機用此查詢ISA接口已取走數(shù)據(jù);
MSCRD 單片機的讀有效信號;
MCSWR 單片機的寫有效信號;
INT0 單片機的外部中斷信號;
當MCUWR信號有效后,單片機把數(shù)據(jù)鎖存于74LS374(1)中,此時,PCSTATE變?yōu)楦唠娖?。PC104用STATE信號選通74LS244來判斷數(shù)據(jù)位PCD0是否為高電平,如果為高,說明單片機送來了數(shù)據(jù),那么使PCRD有效,從數(shù)據(jù)存器74LS374(1)中取走數(shù)據(jù)。此時,PCSTATE變?yōu)榈碗娖?,單片機通過判斷此信號為低電平來判定PC104已取走了數(shù)據(jù),可以發(fā)下一個數(shù)據(jù)。
當PCWR信號有效后,PC104把數(shù)據(jù)鎖存于74LS374(2)中,此時,INT0變?yōu)榈碗婇c,單片機產(chǎn)生外部中斷,使MCSRD信號有效,從數(shù)據(jù)鎖存器74LS374(2)中取走裝飾,INT0變?yōu)楦唠娖?。PC104用STATE信號選通74LS244判斷數(shù)據(jù)位PCD1是否為高電平,如果為高電平,說明單片機取走了數(shù)據(jù),可以發(fā)送下一個數(shù)據(jù)。 PC104與單片機進行通信,最關(guān)鍵的就是速度匹配問題。由于PC104的速度快,而單片機的速度較慢,所以,要在PC104的IOCHRDY處插入等待周期,如圖3所示。
IOCHRDY 用來使ISA接口等待5個時鐘周期;
DLY_D 延時輸入信號;
DLY_CK 延時等待時鐘信號;
DLY_CLR 等待清除信號,為開始下一次送數(shù)周期作準備;
DELAY 延時5個時鐘周期后的輸出信號,作為DLY_CLR信號的輸入;
SYSCLK ISA接口的系統(tǒng)時鐘信號。
在MCS51與PC104進行通信的過程中,DLY_D信號一直有效(高電平)。在信號SYSCLK的作用下,每5個時鐘周期DELAY信號有效一次,即為高電平。此時DLY_CLR信號有效(低電平),IOCHRDY信號變?yōu)楦唠娖?,PC104可以讀寫數(shù)據(jù)。
地址譯碼部分采用文本輸入方式,用ALTERA公司的硬件設(shè)計開發(fā)語言AHDL(Altera Hardware Description Language)。AHDL是一種模塊化的高級語言,完全集成于MAX+plusII系統(tǒng)中,特別適合于描述復雜的組合邏輯、狀態(tài)機和真值表,地址譯碼部分用文本輸入方式,這充分體現(xiàn)了文本輸入方式的優(yōu)點。文本輸入內(nèi)容如下:
(
PCA[9..0] : INPUT;
AEN,IOR,IOW : INPUT;
RESETDR,DELAY : INPUT;
A[15..14] :INPUT;
RD,WR : INPUT;
DLY_D : OUTPUT;
DLY_CK : OUTPUT;
DLY_CLR : OUTPUT;
STATE : OUTPUT;
PCRD : OUTPUT;
PCWR : OUTPUT;
MCURD : OUTPUT;
MCUWR : OUTPUT;
)
BEGIN
!DLY_CLR=RESETDR#DELAY;
DLY_D=!AEN & (PCA[9..1]= =H"110");
DLY_CK=!AEN & (PCA[9..1]= =H"110")&(!IOR # ! IOW);
!PCWR=!AEN&(PCA[9..0]= =H"220")& !IOW;
!PCRD=!AEN&(PCA[9..0]= =H"220")& !IOR;
!STATE=!AEN&(PCA[9..0]= =H"221")&!IOR;
!MCSRD=([15..14]= =H"1")& !RD;
!MCSWR=(A[15..14]= =H"2"& !WR;
END;
說明:PCA[9..0]是PC104的地址信號,A[15..14]是單片機的地址信號,PC104用到端口地址220H和221H。
3 通信軟件設(shè)計
PC104是基于ISA總線的,在系統(tǒng)軟件設(shè)計中要防止地址沖突。PC104中使用A0~A9地址位來表示I/O端口地址,即可有1024個口地址:前512個供系統(tǒng)板使用,后512個供擴充槽使用。當A9=0時表示為系統(tǒng)板上的口地址;A9=1時,表示擴充插槽接口卡上的口地址[2]。因此,采用保留的口地址220H和221H,保證不會發(fā)生地址沖突。
本程序中PC104采用查詢方式接收數(shù)據(jù),單片機用中斷方式接收數(shù)據(jù)。
#define pcreadwrite 0x220 /*PC104讀寫數(shù)據(jù)口地址*/
#define pcrdstate 0x221 /*PC104查詢狀態(tài)口地址*/
PC104寫數(shù)據(jù)函數(shù):
Void pcwrite(int port,unsigned char ch)
{ outportb(pcreadwrite,ch);
while ((inportb(pcrdstate)&0x02)!=0x02); /*等待單片機讀走數(shù)據(jù)*/
{ }
}
單片機讀子程序:
MCUWR:MOV DPTR,#4000H
MOVX A,@DPTR
RETI
PC104讀數(shù)據(jù)函數(shù):
Unsigned char pcread(int port)
{ while((inportb(pcrdstate)&0x01)!=0x01);/*等待單片機寫數(shù)據(jù)*/
{}
return inportb(pcreadwrite);
}
單片機寫子程序:
MCUWR:MOV DPTR,#8000H
MOVX @DPTR,A
;等待PC104讀走數(shù)據(jù)
RET
4 結(jié)論
用CPLD實現(xiàn)單片機與ISA總線接口的并行通信,電路結(jié)構(gòu)簡單、體積小,1片CPLD芯片足夠,并且控制方便,實時性強,通信效率高。本設(shè)計方法已成功地應(yīng)用于作者開發(fā)的各種數(shù)據(jù)采集系統(tǒng)中,用作單片機與PC104之間的并行數(shù)據(jù)通信,效果非常理想。
- 并行通信(11154)
- 用CPL(6357)
單片機spi通信原理詳解
4992
CPLD加51單片機讓系統(tǒng)更高效
單片機通信的相關(guān)資料分享
單片機通信的相關(guān)資料推薦
單片機P口接PCI/ISA數(shù)據(jù)總線
單片機的總線
并行通信和串行通信的相關(guān)資料分享
用VC實現(xiàn)PC機與單片機的通信
FPGA/CPLD與單片機相比有哪些優(yōu)勢?
LONWORKS控制模塊與MCS-51單片機的并行通信
分享一款不錯的基于CPLD和ISA總線的數(shù)據(jù)采集系統(tǒng)設(shè)計
基于CPLD的單片機與ISA總線接口并行通信
基于MCS51系列單片機法人雙機并行互連實現(xiàn)
如何實現(xiàn)單片機與CPLD通訊呢?
如何利用CPLD實現(xiàn)單片機PCI接口設(shè)計
如何利用CPLD幫助單片機完成與PCI設(shè)備間的通信任務(wù)
用單片機實現(xiàn)溫度遠程顯示
53單片機多機并行通訊的一種方法
119PC機與單片機的并行通信協(xié)議
77利用單片機實現(xiàn)CPLD的在系統(tǒng)編程
22基于CPLD的單片機PCI接口設(shè)計
34用CPLD 實現(xiàn)單片機與ISA 總線并行通信
29循環(huán)冗余校驗碼的單片機及CPLD 實現(xiàn)
16用87C196NT單片機實現(xiàn)CAN總線通信
34用CPLD 實現(xiàn)單片機與ISA 總線并行通信
16單片機+CPLD結(jié)構(gòu)體系在電子設(shè)計中的應(yīng)用
17單片機應(yīng)用系統(tǒng)的CPLD 應(yīng)用設(shè)計
39用VC實現(xiàn)PC機與單片機的通信
58用組態(tài)王實現(xiàn)PC機與多臺單片機的遠程通信
61單片機與FPGA CPLD總線接口邏輯設(shè)計
83基于單片機的CPLD/FPGA被動串行下載配置的實現(xiàn)
19采用ATMEGA128單片機結(jié)合CPLD 實現(xiàn)了對VGA顯示
107基于單片機和CPLD的頻率測量研究
42單片機應(yīng)用系統(tǒng)的CPLD應(yīng)用設(shè)計
39MCS51系列單片機雙機并行互連的實現(xiàn)方法
49用51單片機控制RTL8029實現(xiàn)以太網(wǎng)通信
58基于單片機+CPLD的多路精確延時控制系統(tǒng)設(shè)計
43基于ISA總線的計算機與DSP的通信
37CPLD與51單片機總線接口程序
1142用單片機實現(xiàn)的測溫電路
1744
單片機+CPLD的多路精確延時控制系統(tǒng)
2256
基于DSP與CPLD的I2C總線接口的設(shè)計與實現(xiàn)
1487
用單片機配置CPLD器件
1423
單片機脈沖信號源的CPLD實現(xiàn)方案
1924
用VHDL語言在CPLD上實現(xiàn)串行通信
963
基于CPLD的單片機PCI接口設(shè)計
1166
用CPLD實現(xiàn)單片機與ISA總線并行通信
1360
基于CPLD的單片機與PCI接口設(shè)計解決方案
1044
I2C總線的單片機C語言實現(xiàn)及其應(yīng)用
3293
單片機并行口,單片機并行口結(jié)構(gòu)原理是什么?
3813
用MODBUS實現(xiàn)觸摸屏與單片機的通信
331CAN總線+單片機實現(xiàn)通信網(wǎng)絡(luò)設(shè)計
7351
基于單片機的多機并行通信設(shè)計
2485
單片機串行口的并行通信技術(shù)
103利用單片機和CPLD實現(xiàn)直接數(shù)字頻率合成
0用單片機實現(xiàn)溫度遠程顯示資料
13基于單片機與FPGA的總線接口邏輯設(shè)計
4439什么是單片機的串口通信?
62202
用Win32API實現(xiàn)PC機與多單片機的串行通信
1采用軟件模擬SPI總線實現(xiàn)雙單片機數(shù)據(jù)通信模塊的設(shè)計
3623
基于單片機和CPLD的高精度大型望遠鏡伺服控制器設(shè)計
4935
如何使用單片機的IO口模擬串行實現(xiàn)數(shù)據(jù)通信的資料概述
12如何用51單片機實現(xiàn)IIC通信
17060
如何實現(xiàn)PC機與51系列單片機的通信
6733
AVR單片機與CPLD的通信設(shè)計
1477使用STM32單片機實現(xiàn)AD7606并行讀取數(shù)據(jù)的代碼免費下載
102如何實現(xiàn)計算機與單片機之間的通信
8952
如何實現(xiàn)PC機與單片機實現(xiàn)通信
49單片機實現(xiàn)多機通信的資料和程序
8509單片機的結(jié)構(gòu)和原理說明
6295
51單片機實現(xiàn)的雙機通信設(shè)計仿真
17制定通信協(xié)議,實現(xiàn)單片機與PC機通信
22用單片機串口和modbus poll 進行通信
23PC機與單片機多機實時通信的設(shè)計與實現(xiàn)
3單片機中并行是什么意思
2237
電子發(fā)燒友App




評論