找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3013|回复: 2
收起左侧

w5100程序

[复制链接]
ID:111486 发表于 2016-3-30 20:20 | 显示全部楼层 |阅读模式
***************************************************************************************/

/*例程网络参数*/
//网关:192.168.1.1
//掩码:        255.255.255.0
//物理地址:0C 29 AB 7C 00 01
//本机IP地址:192.168.1.199
//端口0的端口号:5000
//端口0的目的IP地址:192.168.1.190
//端口0的目的端口号:6000

#include <pic.h>
#include "W5100.h"                               
#include <string.h>
#include "rx.h"
void Delay(unsigned int d);                        //延时函数(ms)
void delay_us(unsigned char n);
/*******************************************************************************
* 函数名  : W5100_Initialization
* 描述    : W5100初始货配置
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 无
*******************************************************************************/
void W5100_Initialization(void)
{
        W5100_Init();                //初始化W5100寄存器函数
        Detect_Gateway();        //检查网关服务器
        Socket_Init(0);                //指定Socket(0~3)初始化,初始化端口0
}

/*******************************************************************************
* 函数名  : Load_Net_Parameters
* 描述    : 装载网络参数
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 网关、掩码、物理地址、本机IP地址、端口号、目的IP地址、目的端口号、端口工作模式
*******************************************************************************/
void Load_Net_Parameters(void)
{
        Gateway_IP[0] = 192;//加载网关参数
        Gateway_IP[1] = 168;
        Gateway_IP[2] = 1;
        Gateway_IP[3] = 1;

        Sub_Mask[0]=255;//加载子网掩码
        Sub_Mask[1]=255;
        Sub_Mask[2]=255;
        Sub_Mask[3]=0;

        Phy_Addr[0]=0x0c;//加载物理地址
        Phy_Addr[1]=0x29;
        Phy_Addr[2]=0xab;
        Phy_Addr[3]=0x7c;
        Phy_Addr[4]=0x00;
        Phy_Addr[5]=0x01;

        IP_Addr[0]=192;//加载本机IP地址
        IP_Addr[1]=168;
        IP_Addr[2]=1;
        IP_Addr[3]=199;

        S0_Port[0] = 0x13;//加载端口0的端口号5000
        S0_Port[1] = 0x88;

        S0_DIP[0]=192;//加载端口0的目的IP地址
        S0_DIP[1]=168;
        S0_DIP[2]=1;
        S0_DIP[3]=190;
       
        S0_DPort[0] = 0x17;//加载端口0的目的端口号6000
        S0_DPort[1] = 0x70;

        S0_Mode=TCP_CLIENT;//加载端口0的工作模式,TCP客户端模式
}

/*******************************************************************************
* 函数名  : W5100_Socket_Set
* 描述    : W5100端口初始化配置
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 分别设置4个端口,根据端口工作模式,将端口置于TCP服务器、TCP客户端或UDP模式.
*                        从端口状态字节Socket_State可以判断端口的工作情况
*******************************************************************************/
void W5100_Socket_Set(void)
{
        if(S0_State==0)//端口0初始化配置
        {
                if(S0_Mode==TCP_SERVER)//TCP服务器模式
                {
                        if(Socket_Listen(0)==TRUE)
                                S0_State=S_INIT;
                        else
                                S0_State=0;
                }
                else if(S0_Mode==TCP_CLIENT)//TCP客户端模式
                {
                        if(Socket_Connect(0)==TRUE)
                                S0_State=S_INIT;
                        else
                                S0_State=0;
                }
                else//UDP模式
                {
                        if(Socket_UDP(0)==TRUE)
                                S0_State=S_INIT|S_CONN;
                        else
                                S0_State=0;
                }
        }
}

/*******************************************************************************
* 函数名  : Process_Socket_Data
* 描述    : W5100接收并发送接收到的数据
* 输入    : s:端口号
* 输出    : 无
* 返回值  : 无
* 说明    : 本过程先调用S_rx_process()从W5100的端口接收数据缓冲区读取数据,
*                        然后将读取的数据从Rx_Buffer拷贝到Temp_Buffer缓冲区进行处理。
*                        处理完毕,将数据从Temp_Buffer拷贝到Tx_Buffer缓冲区。调用S_tx_process()
*                        发送数据。
*******************************************************************************/
void Process_Socket_Data(SOCKET s)
{
        unsigned short size;
        size=S_rx_process(s);
        memcpy(Tx_Buffer, Rx_Buffer, size);                       
        S_tx_process(s, size);
}

/*******************************************************************************
* 函数名  : main
* 描述    : 主函数,用户程序从main函数开始运行
* 输入    : 无
* 输出    : 无
* 返回值  : int:返回值为一个16位整形数
* 说明    : 无
*******************************************************************************/
void init_io()
{
        TRISC=0;
        //TRISA=0;
        TRISB=0x66;
        OPTION_REG=0x7f;//端口b加上拉电阻
        TRISD=0;
        PORTD=0Xff;
}
int main(void)
{
        unsigned int W5100_Send_Delay_Counter =0;
        init_io();
        Load_Net_Parameters();                //装载网络参数       
        W5100_Hardware_Reset();                //硬件复位W5100
        W5100_Initialization();                //W5100初始货配置
        while (1)
        {
                W5100_Socket_Set();//W5100端口初始化配置
               
                if(W5100_INT == 0)//处理W5100中断       
                {
                        W5100_Interrupt_Process();//W5100中断处理程序框架
                }
                if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
                {
                        S0_Data&=~S_RECEIVE;
                        Process_Socket_Data(0);//W5100接收并发送接收到的数据
                }
                else if(W5100_Send_Delay_Counter >= 40000)//定时发送字符串
                {
                        if(S0_State != 0)
                        {
                                S0_Data&=~S_TRANSMITOK;
                                //memcpy(Tx_Buffer, "\r\n my name is cuizhen  \r\n", 23);       
                                if(flag_24l01()==1)
                                {
                                        memcpy(Tx_Buffer, "\r\n 1 \r\n", 23);
                                        S_tx_process(0, 23);//指定Socket(0~3)发送数据处理,端口0发送23字节数据
                                }
                                else
                                {
                                        memcpy(Tx_Buffer, "\r\n 0 \r\n", 23);
                                        S_tx_process(0, 23);//指定Socket(0~3)发送数据处理,端口0发送23字节数据
                                }
                        }
                        W5100_Send_Delay_Counter=0;
                }
                W5100_Send_Delay_Counter++;
        }
}

/*******************************************************************************
* 函数名  : Delay
* 描述    : 延时函数(ms)
* 输入    : d:延时系数,单位为毫秒
* 输出    : 无
* 返回    : 无
* 说明    : 延时是利用Timer2定时器产生的1毫秒的计数来实现的
*******************************************************************************/
void Delay(unsigned int  x)
{
    unsigned int i,j;

    for(j=0;j<5;j++)
                for(i=0;i<x;i++);
}


回复

使用道具 举报

ID:1 发表于 2016-3-30 20:29 | 显示全部楼层
#include "W5100.h"                              
#include "rx.h"
缺少这个这个头文件,楼主补上再送100黑币
回复

使用道具 举报

ID:108355 发表于 2016-7-22 16:22 | 显示全部楼层
请问楼主能在单片机里面识别这个接收数据吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表