单片机与TCP/IP网络
--版主 老古 http://www.laogu.com
(五)接口电路图详解(1)
----89c52单片机部分

——ISA接口的A,B部分.

这是RTL8019网卡ISA的前半部分A1--A31(1...31),B1--B31(32...62)共62个引脚.
DATA0--DATA7是网卡的8位数据总线,接单片机的P0口.
RESDRV(33脚)(RESET)接单片机的T0(P3.4),单片机用P3.4来复位网卡。
IRQ9接单片机的INT0(P3.2),IRQ9是网卡的中断9,接到单片机的中断0上。(但我的程序没有使用中断操作,我是用查询操作的)
IOR,IOW接到单片机的p3.6,p3.7(/WR,/RD)
GND是地,VCC为+5V的电源。
A0--A19为网卡的地址线,共20根,我们用到网卡的地址为十六进制的0240H---025FH, 转换为二进制为
地址线 |
A19 |
A18 |
A17 |
A16 |
A15 |
A14 |
A13 |
A12 |
A11 |
A10 |
A9 |
A8 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
240H |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
... |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
X |
X |
X |
X |
X |
25FH |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
我们看到从地址240H到25FH,地址线的A19---A5是固定的000000000010010,因此A10--A19接地,A7-A8接地,ADDR8--ADDR15对应地址线的A0--A6.(实际上A5也可以接地,这样可以减少一个单片机的引脚。这是作者在设计电路时没有注意到,同时A9也可以接VCC)。
A0--A6(ADDR8--ADDR15)接单片机的P2口。
因此当P2口为
地址线 |
|
A6,A9(ADDR15) |
A5(ADDR13) |
A4(ADDR12) |
A3(ADDR11) |
A2(ADDR10 |
A1(ADDR9) |
A0(ADDR8) |
|
|
1 |
0 |
X |
X |
X |
X |
X |
P2口 |
|
P2.7 |
P2.5 |
P2.4 |
P2.3 |
P2.2 |
P2.1 |
P2.0 |
|
|
1 |
0 |
X |
X |
X |
X |
X |
当P2口为二进制 1X0XXXXX时 将选中网卡的I/O地址空间。在程序里,我使用110XXXXX来选中网卡的地址。
地址映射:
|
单片机(P2口)也就是DPH |
网卡(I/O) |
|
11000000 (0C0H) |
240H |
|
110XXXXX |
2XXH |
|
11011111 (0DFH) |
25FH |
我在程序里定义了 reg00--reg1f 来对应240H--25FH端口。
#define reg00 XBYTE[0xc000] /* 240H*/
#define reg01 XBYTE[0xc100] /* 241H*/
#define reg02 XBYTE[0xc200]
#define reg03 XBYTE[0xc300]
...
#define reg1f XBYTE[0xDF00] /* 25FH*/
---ISA接口的C,D部分

这是网卡的接口的后半部分,ISA槽的扩展部分。只用到GND,VCC,IOCS16.其中的IOCS16是16位I/O的选择脚。当网卡上电复位的时候,这个脚为网卡的输入脚,如果这个脚为低电平,网卡将选择8位模式,如果这个脚为高电平,网卡将选择16位的模式。我用了个电阻R10下拉,因此在复位时,这个脚为低电平,网卡选择8位模式。
--网卡可以兼容8位和16位操作。由于89c52是8位的数据总线,因此要用网卡的8位总线模式(每次读入或写入1个字节)。如果你是用80c196或dsp等16位总线的芯片的话,你可以使用16位的操作模式,这样有更快的传输速度(每次读入或写入2个字节)。(16位总线时,这个下拉电阻去掉,不用接,同时网卡的DATA8--DATA15要接到你的CPU的数据8--15上。DMA操作为16位)
(未完)
|