电子发烧友网 > 控制/MCU > 正文

AT89C52单片机实现以太网接口的控制设计

2020年03月03日 11:17 次阅读

随着互联网的迅速发展,网络用户飞速增长,在使用计算机进行网络互联的同时,各种家电设备、仪表设备及工业中数据采集与控制设备也在逐步走向网络化,基于此结合专用的以太网控制芯片RTL8019学习了利用单片机实现以太网接口的设计。

主要器件:

1、 AT89C52单片机芯片,实现对RTL8019的初始化和输入输出控制。

2、 74LS373地址存器。

3、 HM62256高速CMOS 8位32KB的RAM芯片。

4、 RTL8019AS高集成以太网控制器芯片。

试验电路图:

AT89C52单片机实现以太网接口的控制设计

试验程度代码:

//Ethernet.h程序

#ifndef _ETHERNET_H // 防止Ethernet.h被重复引用

#define _ETHERNET_H

#include // 引用标准库的头文件

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define REG00 XBYTE[0x8000] // 端口300H,命令寄存器CR

#define REG01 XBYTE[0x8001] // 端口301H

#define REG02 XBYTE[0x8002] // 端口302H

#define REG03 XBYTE[0x8003] // 端口303H

#define REG04 XBYTE[0x8004] // 端口304H

#define REG05 XBYTE[0x8005] // 端口305H

#define REG06 XBYTE[0x8006] // 端口306H

#define REG07 XBYTE[0x8007] // 端口307H

#define REG08 XBYTE[0x8000] // 端口308H

#define REG09 XBYTE[0x8001] // 端口309H

#define REG0a XBYTE[0x800a] // 端口30aH

#define REG0b XBYTE[0x800b] // 端口30bH

#define REG0c XBYTE[0x800c] // 端口30cH

#define REG0d XBYTE[0x800d] // 端口30dH

#define REG0e XBYTE[0x800e] // 端口30eH

#define REG0f XBYTE[0x800f] // 端口30fH

#define REG10 XBYTE[0x8010] // 端口310H

#define REG11 XBYTE[0x8011] // 端口311H

#define REG12 XBYTE[0x8012] // 端口312H

#define REG13 XBYTE[0x8013] // 端口313H

#define REG14 XBYTE[0x8014] // 端口314H

#define REG15 XBYTE[0x8015] // 端口315H

#define REG16 XBYTE[0x8016] // 端口316H

#define REG17 XBYTE[0x8017] // 端口317H

#define REG18 XBYTE[0x8010] // 端口318H

#define REG19 XBYTE[0x8011] // 端口319H

#define REG1a XBYTE[0x801a] // 端口31aH

#define REG1b XBYTE[0x801b] // 端口31bH

#define REG1c XBYTE[0x801c] // 端口31cH

#define REG1d XBYTE[0x801d] // 端口31dH

#define REG1e XBYTE[0x801e] // 端口31eH

#define REG1f XBYTE[0x801f] // 端口31fH

void delay(uint t);

void NICRst();

void SelectPage(uchar pagenum);

void ClearISR();

void GetPhyAdd();

void RTL8019Init();

#endif

//Ethernet.c程序

#include "Ethernet.h"

/* 主函数 */

void main(void)

{

delay(1000); // 延时1s,保证电源稳定和网卡自身的上电完成

NICRst(); // RTL8019AS热复位

ClearISR(); // 清除ISR寄存器

RTL8019Init(); // 初始化RTL8019AS

while(1)

{

;

}

}

/* 延时t毫秒 */

void delay(uint t)

{

uint i;

while(t--)

{

/* 对于12M时钟,约延时1ms */

for (i=0;i<125;i++)

{}

}

}

/* RTL8019AS热复位 */

void NICRst()

{

uchar i,tmp;

tmp = REG1f; // 读RTL8019AS的复位端口

REG1f = tmp; // 写RTL8019AS的复位端口

for(i=0;i<250;i++); // 适当延时

}

/* 通过CR寄存器的PS1和PS0设置寄存器页 */

void SelectPage(uchar pagenum)

{

uchar tmp;

tmp = REG00;

tmp = tmp&0x3B; // 注意不是0x3F,TXP位在不发送时要置0

pagenum = pagenum<<6;

tmp = tmp|pagenum;

REG00 = tmp;

}

接上篇程序代码:

/* 初始化RTL8019AS,PAGE2寄存器只读,PAGE3寄存器不是NE2000兼容的,均不用设置 */

/* 使用0x40-0x4b为网卡的发送缓冲区,共12页,刚好存储2个最大的以太网数据包。

使用0x4c-0x7f为网卡的接收缓冲区,共52页。因此PSTART=0x4c,PSTOP=0x80

(0x80为停止页,接收缓冲区直到0x7f,不包括0x80)。刚开始时,网卡没有接收

到任何数据包,因此BNRY设置为指向第一个接收缓冲区的页0x4c) */

void RTL8019Init()

{

REG00 = 0x21; // 选择页0的寄存器,网卡停止运行,因为还没有初始化

REG01 = 0x4c; // 寄存器PSTART,设置接收缓冲区的起始页的地址

REG02 = 0x80; // 寄存器PSTOP,设置接收缓冲区的结束页的地址

REG03 = 0x4c; // 寄存器BNRY,设置为指向第一个接收缓冲区的页0x4c(用作读指针)

REG04 = 0x40; // 寄存器TPSR,发送起始页地址初始化为指向第一个发送缓冲区的页

REG0c = 0xcc; /* 接收配置寄存器RCR,设置为仅接收自己地址的数据包以及广播地址

和多点播送地址数据包,小于64字节的包丢弃,校验错的数据包不接收 */

REG0d = 0xe0; // 发送配置寄存器TCR,设置为启用crc自动生成和校验,正常模式工作

REG0e = 0xc8; /* 数据配置寄存器DCR,设置为使用FIFO缓存,普通模式,8位数据传输,

字节顺序为高位字节在前,低位字节在后 */

REG0f = 0x00; // 中断屏蔽寄存器IMR,设置为屏蔽所有中断

SelectPage(1); // 选择页1的寄存器

REG07=0x4d; // 寄存器CURR,设置为指向当前正在写的页的下一页(用作写指针)

/* 多址地址寄存器MAR0-MAR7均设置为0x00 */

REG08 = 0x00; // MAR0

REG09 = 0x00; // MAR1

REG0a = 0x00; // MAR2

REG0b = 0x80; // MAR3

REG0c = 0x00; // MAR4

REG0d = 0x00; // MAR5

REG0e = 0x00; // MAR6

REG0f = 0x00; // MAR7

GetPhyAdd(); // 获取以太网物理地址

REG00 = 0x22; // 选择页0寄存器,执行命令。

}

/* 上电后清除ISR寄存器 */

void ClearISR()

{

SelectPage(0);

REG07 = REG07|0xff;

}

/* 获取以太网物理地址 */

void GetPhyAdd()

{

uchar tmp;

SelectPage(0); // 选择页0

REG08 = 0; // 远程DMA起始地址低位寄存器RSAR0,设置为0

REG09 = 0; // 远程DMA起始地址高位寄存器RSAR1,设置为0

REG0a = 12; // 远程DMA计数器低位寄存器RBCR0,设置为12

REG0b = 0; // 远程DMA计数器高位寄存器RBCR1,设置为0

REG00 = 0x0a; // 远程DMA,启动命令

SelectPage(1); // 选择页1

tmp = REG10; // 读取一个字节

REG01 = tmp; // 写入PAR0

tmp = REG10; // 读取一个重复的字节,这个字节被丢弃

tmp = REG10; // 读取一个字节

REG02 = tmp; // 写入PAR1

tmp = REG10; // 读取一个重复的字节,这个字节被丢弃

tmp = REG10; // 读取一个字节

REG03 = tmp; // 写入PAR2

tmp = REG10; // 读取一个重复的字节,这个字节被丢弃

tmp = REG10; // 读取一个字节

REG04 = tmp; // 写入PAR3

tmp = REG10; // 读取一个重复的字节,这个字节被丢弃

tmp = REG10; // 读取一个字节

REG05 = tmp; // 写入PAR4

tmp = REG10; // 读取一个重复的字节,这个字节被丢弃

tmp = REG10; // 读取一个字节

REG06 = tmp; // 写入PAR5

}
责任编辑;zl

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

AT89C52单片机实现短距离无线传输的设计

短距离的无线传输具有抗干扰能力强、可靠性高、安全性好、受地理条件限制少、安装灵活等优点,可以利用单片....
发表于 2020-03-03 11:51 235次阅读
AT89C52单片机实现短距离无线传输的设计

如何设计嵌入式系统的以太网接口?

以太网(Ethernet)是当今局域网采用的最通用的通信协议标准。在以太网中,所有计算机被连接在一条电缆上,采用带冲突...
发表于 2019-11-07 07:34 103次阅读
如何设计嵌入式系统的以太网接口?

AT89C52单片机点亮数码管的设计

电路只驱动一个数码管,该数码管为共阴管,公共端接地,段管直连到单片机的P2口,所用单片机为AT89C....
发表于 2019-10-25 16:25 354次阅读
AT89C52单片机点亮数码管的设计

基于AT89C52单片机控制的双轴太阳自动跟踪系...

跟踪太阳的方法可概括为两种方式:光电跟踪和根据视日运动轨迹跟踪。光电跟踪是由光电传感器件根据入射光线....
发表于 2019-08-30 14:42 340次阅读
基于AT89C52单片机控制的双轴太阳自动跟踪系...

【原创】一种基于LCD1602和AT24C02的多功能电子密码锁设计(附仿真+C程序+PCB等全套资料)

概要 多功能电子密码锁系统由AT89C52单片机最小系统、4×4矩阵键盘、LCD1602显示、AT24C02存储模块以及报...
发表于 2019-08-30 13:46 1130次阅读
【原创】一种基于LCD1602和AT24C02的多功能电子密码锁设计(附仿真+C程序+PCB等全套资料)

AT89C52单片机实现日历时钟芯片DS12C8...

在银行或者其他的公共场合中,经常会看到显示实时信息的显示屏,其中包括年、月、日、星期、时间等,本例子....
发表于 2019-08-19 14:16 784次阅读
AT89C52单片机实现日历时钟芯片DS12C8...

AT89C52单片机实现以太网芯片RTL8019...

随着互联网的迅速发展,网络用户飞速增长,在使用计算机进行网络互联的同时,各种家电设备、仪表设备及工业....
发表于 2019-08-16 17:40 352次阅读
AT89C52单片机实现以太网芯片RTL8019...

AT89C52单片机实现485总线现场监测系统的...

在一些要求响应速度快、实时性强、控制量多的应用场合,往往理由多个单片机结合PC机组成分布系统,在这样....
发表于 2019-08-16 17:40 317次阅读
AT89C52单片机实现485总线现场监测系统的...

AT89C52单片机与PC机之间的无线数据传输设...

在一些特殊的应用场合,单片机通信不能采用有线数据传输方式,而需要采用短距离的无线数据传输方式。短距离....
发表于 2019-08-16 17:36 532次阅读
AT89C52单片机与PC机之间的无线数据传输设...

AT89C52单片机实现喇叭驱动的设计

1、基本常识: “喇叭”和“蜂鸣器”不是一个东西! 喇叭是无源器件,可以发出各种频率的声....
发表于 2019-08-01 15:53 1273次阅读
AT89C52单片机实现喇叭驱动的设计

AT89C52单片机的性能原理及应用解析

89C52内置8位中央处理单元、512字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双....
发表于 2019-07-22 15:56 752次阅读
AT89C52单片机的性能原理及应用解析

基于MCU+USB接口芯片方案的电子巡更系统硬件...

本系统中巡更机采用3.6V可充电电池供电,充电电源由USB接口的5V电源线提供,电源电压监测电路如图....
发表于 2019-07-11 15:04 570次阅读
基于MCU+USB接口芯片方案的电子巡更系统硬件...

AT89C52单片机对电风扇红外遥控发射电路的设...

传统的电扇都是由机械按键来控制电扇的启停,本设计采用红外遥控进行控制,由一单片机作为发射电路的主控部....
发表于 2019-06-29 10:59 666次阅读
AT89C52单片机对电风扇红外遥控发射电路的设...

AT89C52单片机的调频台控制设计

BH1415F调频台控制C程序 使用keilC51 通过调试 //使用AT89C52单片机,1....
发表于 2019-05-27 14:43 343次阅读
AT89C52单片机的调频台控制设计

AT89C52单片机对八路电压表的设计

/*使用AT89C52单片机,12MHz晶振,P0口读入AD值,P2口作AD控制,用共阳LED数码管....
发表于 2019-05-24 15:47 458次阅读
AT89C52单片机对八路电压表的设计

TCI6488 3内核DSP的Bootload程序的自举加载

作者:刘玉刚 雷勇    引言 无线通信产业不断推进创新,像WCDMA、WiMAX、MIMO和4G都需...
发表于 2019-05-24 05:00 245次阅读
TCI6488 3内核DSP的Bootload程序的自举加载

AT89C52单片机BH1415F调频台的控制设...

BH1415F调频台控制C程序 使用keilC51 通过调试 //使用AT89C52单片机,1....
发表于 2019-05-23 15:39 450次阅读
AT89C52单片机BH1415F调频台的控制设...

AT89C52单片机与SD卡实现通讯的设计方案

SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式....
发表于 2019-05-17 15:37 491次阅读
AT89C52单片机与SD卡实现通讯的设计方案

AT89C52单片机的SD卡读写设计

应用AT89C52读写SD卡有两点需要注意。首先,需要寻找一个实现AT89C52 单片机与SD卡通讯....
发表于 2019-02-16 11:23 997次阅读
AT89C52单片机的SD卡读写设计

AT89C52单片机输出可调PWM波的方法设计

PWM实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时....
发表于 2019-02-11 10:00 1751次阅读
AT89C52单片机输出可调PWM波的方法设计

AT89C52单片机智能交通灯的设计

本系统硬件上采用上位机和下位机设计,其中下位机四个,均采用AT89C52单片机,分别控制图2所示的四....
发表于 2019-02-11 10:00 1266次阅读
AT89C52单片机智能交通灯的设计

AT89C52单片机对蜂鸣器的设计

该电路较简单,用PNP型三极管驱动蜂鸣器,当P3.7为低电平时,PN结正向偏置,三极管导通,蜂鸣器发....
发表于 2019-01-10 15:28 1909次阅读
AT89C52单片机对蜂鸣器的设计

基于AT89C52单片机实时时钟程序编写

#include‘reg52.h’ //包含单片机寄存器的头文件 #include‘intri....
发表于 2018-10-25 15:40 4028次阅读
基于AT89C52单片机实时时钟程序编写

高性能单片机Mega64和10Mb/s以太网控制...

微控制器选用高性能的AVR单片机Mega64,AVR是ATMEL公司结合了成熟的51系列和PIC系列....
发表于 2018-09-29 16:25 1462次阅读
高性能单片机Mega64和10Mb/s以太网控制...

揭秘以太网接口在印制电路板上的实现

上世纪70年代以太网诞生了,发展至如今我们对它并不陌生,浮现在现代化生活的每一个角落,或许正因它的无....
发表于 2015-10-15 11:27 1786次阅读
揭秘以太网接口在印制电路板上的实现

蓄电池监控系统的以太网接口设计

随着网络化日益普及,蓄电池控制系统出现了底层依然采用RS485总线连接,而留出以太网接口直接用于与企....
发表于 2011-08-16 10:54 1015次阅读
蓄电池监控系统的以太网接口设计

MAX24287 低成本以太网接口转换器

MAX24287是一个灵活的,低成本的以太网接口转换IC 。并行接口可配置为GMII,RGMII,R....
发表于 2011-07-29 09:52 1692次阅读
MAX24287 低成本以太网接口转换器