⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcptask.h

📁 This code is used to TCP/IP connection It is developed by PIC18F452 and all this code is successfull
💻 H
字号:
#include <stdlib.h>
#include "xlcd.h"
#include "Compiler.h"
#include "mac2.h"
#include "usart.h"
#include "delays.h"
#define MCHP_C18
#define USE_DEMO
#define TICK_H
#define ARP_H
#define IP_H
#define ICMP_H
#define MAC_H

#define BAUD_RATE       (19200)     // bps

#define TICKS_PER_SECOND			(100)
#define TICK_PRESCALE_VALUE			(256)

#define ARP_REPLY       (0x00)
#define ARP_REQUEST     (0x01)
#define ARP_UNKNOWN     (0x02)

#define IP_PROT_ICMP    (1)
#define IP_PROT_TCP     (6)
#define IP_PROT_UDP     (17)

#define CLOCK_FREQ                      (20000000) 

#define MAC_IP      (0)
#define MAC_ARP     (0x6)
#define MAC_UNKNOWN (0x0ff)

#define MAX_ICMP_DATA       (32)
#define MAX_ICMP_DATA_LEN   (32) 

#if !defined(STACK_USE_SLIP)
    #define MAC_TX_BUFFER_SIZE          (1024)
    #define MAC_TX_BUFFER_COUNT         (1)
#else
    #define MAC_TX_BUFFER_SIZE          (250)
    #define MAC_TX_BUFFER_COUNT         (1)
#endif

#define MAC_RX_BUFFER_SIZE              (MAC_TX_BUFFER_SIZE)

#if (MAC_TX_BUFFER_SIZE <= 0 || MAC_TX_BUFFER_SIZE > 1500 )
#error Invalid MAC_TX_BUFFER_SIZE value specified.
#endif

#if ( (MAC_TX_BUFFER_SIZE * MAC_TX_BUFFER_COUNT) > (4* 1024) )
#error Not enough room for Receive buffer.
#endif

#define MY_DEFAULT_IP_ADDR_BYTE1        (192)
#define MY_DEFAULT_IP_ADDR_BYTE2        (168)
#define MY_DEFAULT_IP_ADDR_BYTE3        (23)
#define MY_DEFAULT_IP_ADDR_BYTE4        (98)

#define MY_DEFAULT_MASK_BYTE1           (0xff)
#define MY_DEFAULT_MASK_BYTE2           (0xff)
#define MY_DEFAULT_MASK_BYTE3           (0xff)
#define MY_DEFAULT_MASK_BYTE4           (0)


#define MY_DEFAULT_MAC_BYTE1            (0x00)
#define MY_DEFAULT_MAC_BYTE2            (0x04)
#define MY_DEFAULT_MAC_BYTE3            (0xa3)
#define MY_DEFAULT_MAC_BYTE4            (0x00)
#define MY_DEFAULT_MAC_BYTE5            (0x09)
#define MY_DEFAULT_MAC_BYTE6            (0x53)


#define MY_IP_BYTE1               MY_DEFAULT_IP_ADDR_BYTE1  
#define MY_IP_BYTE2               MY_DEFAULT_IP_ADDR_BYTE2    
#define MY_IP_BYTE3               MY_DEFAULT_IP_ADDR_BYTE3     
#define MY_IP_BYTE4                MY_DEFAULT_IP_ADDR_BYTE4
   
#define MY_MAC_BYTE1               MY_DEFAULT_MAC_BYTE1     
#define MY_MAC_BYTE2              MY_DEFAULT_MAC_BYTE2      
#define MY_MAC_BYTE3              MY_DEFAULT_MAC_BYTE3      
#define MY_MAC_BYTE4              MY_DEFAULT_MAC_BYTE4      
#define MY_MAC_BYTE5              MY_DEFAULT_MAC_BYTE5     
#define MY_MAC_BYTE6              MY_DEFAULT_MAC_BYTE6
                   

#define PARAM_SCLASS auto
#define Delay10us(us)                   Delay10TCYx(((CLOCK_FREQ/4000000)*us))
#define DelayMs(ms)                     Delay1KTCYx((((CLOCK_FREQ/1000)*ms)/4000))
#define TICK_SECOND             ((TICK)TICKS_PER_SECOND)
void delay1kms();
#define TickGetDiff(a, b)       (a-b)
#define MAX_SOCKETS                     (5)
#define INVALID_BUFFER  (0xff)


#undef BOOL
#undef TRUE
#undef FALSE
#undef BYTE
#undef WORD
#undef DWORD


typedef enum _BOOL { FALSE = 0, TRUE } BOOL;
typedef unsigned char BYTE;                 // 8-bit
typedef unsigned short int WORD;            // 16-bit
typedef unsigned short long SWORD;          // 24-bit
typedef unsigned long DWORD;                // 32-bit
typedef unsigned long TICK;
typedef BYTE BUFFER;

typedef union _BYTE_VAL
{
    struct
    {
        unsigned int b0:1;
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
        unsigned int b4:1;
        unsigned int b5:1;
        unsigned int b6:1;
        unsigned int b7:1;
    } bits;
    BYTE Val;
} BYTE_VAL;

typedef union _SWORD_VAL
{
    SWORD Val;
    struct
    {
        BYTE LSB;
        BYTE MSB;
        BYTE USB;
    } bytes;
} SWORD_VAL;
typedef union _WORD_VAL
{
    WORD Val;
    struct
    {
        BYTE LSB;
        BYTE MSB;
    } byte;
    BYTE v[2];
} WORD_VAL;
typedef union _DWORD_VAL
{
    DWORD Val;
    struct
    {
        BYTE LOLSB;
        BYTE LOMSB;
        BYTE HILSB;
        BYTE HIMSB;
    } byte;
    struct
    {
        WORD LSW;
        WORD MSW;
    } word;
    BYTE v[4];
} DWORD_VAL;

typedef struct _MAC_ADDR	//存放物理地址的结构体
{
    BYTE v[6];
} MAC_ADDR;

typedef union _IP_ADDR		//存放IP地址的共用体
{
    BYTE        v[4];
    DWORD       Val;
} IP_ADDR;

typedef struct _NODE_INFO	//NODE_INFO包括IP和MAC
{
    MAC_ADDR    MACAddr;
    IP_ADDR     IPAddr;
} NODE_INFO;

typedef struct _IP_HEADER
{
    BYTE    VersionIHL;
    BYTE    TypeOfService;
    WORD    TotalLength;
    WORD    Identification;
    WORD    FragmentInfo;
    BYTE    TimeToLive;
    BYTE    Protocol;
    WORD    HeaderChecksum;
    IP_ADDR SourceAddress;
    IP_ADDR DestAddress;

} IP_HEADER;

typedef struct _ICMP_PACKET
{
    BYTE    Type;
    BYTE    Code;
    WORD    Checksum;
    WORD    Identifier;
    WORD    SequenceNumber;
    BYTE    Data[MAX_ICMP_DATA];
} ICMP_PACKET;
typedef struct _RECEIVE_PACKET
{
  NODE_INFO nodeinfo;
  struct
  {
   unsigned int bislinking   :1;
   unsigned int untouch      :1;
  }flag;
}RECEIVE_PACKET;

typedef enum _ICMP_CODE
{
    ICMP_ECHO_REPLY = 0,
    ICMP_ECHO_REQUEST = 8
} ICMP_CODE, ICMP_REQUESTS;



BOOL    ARPGet(NODE_INFO *remote, BYTE *opCode);
#define ARPIsTxReady()      MACIsTxReady()

void    ARPPut(NODE_INFO *remode, BYTE opCode);

void    SwapICMPPacket(ICMP_PACKET* p);

#define IPPutArray(a, b)    MACPutArray(a, b)

#define IPIsTxReady()       MACIsTxReady()

WORD    IPPutHeader(NODE_INFO *remote,BYTE protocol,WORD len);

BOOL    IPGetHeader(IP_ADDR *localIP,NODE_INFO *remote,
                          BYTE *protocol,WORD *len);
#define IPSetTxBuffer(a, b)       MACSetTxBuffer(a, b+sizeof(IP_HEADER))

#define IPSetRxBuffer(a)          MACSetRxBuffer(a+sizeof(IP_HEADER))

void    ICMPPut(NODE_INFO *remote,ICMP_CODE code,
               BYTE *data,BYTE len,WORD id,WORD seq);

BOOL    ICMPGet(ICMP_CODE *code,BYTE *data,
              BYTE *len,WORD *id,WORD *seq);

void    MACInit(void);

BOOL    MACIsTxReady(void);

void    MACSetTxBuffer(BUFFER buffer, WORD offset);

void    MACSetRxBuffer(WORD offset);

void    MACReserveTxBuffer(BUFFER buffer);

#define MACGetRxBuffer()        (NICCurrentRdPtr)

#define MACGetTxBuffer()        (NICCurrentTxBuffer)
#if     !defined(THIS_IS_MAC_LAYER)
#if     !defined(STACK_USE_SLIP)
extern  BYTE NICCurrentTxBuffer;
extern  BYTE NICCurrentRdPtr;
#else
#define NICCurrentTxBuffer      (0)
#define NICCurrentRdPtr         (0)
#endif
#endif

BYTE    MACGet(void);
BOOL    MACGetHeader(MAC_ADDR *remote, BYTE* type);

WORD    MACGetArray(BYTE *val, WORD len);

void    MACDiscardRx(void);

void    MACDiscardTx(BUFFER buffer);

void    MACPut(BYTE val);

void    MACPutHeader(MAC_ADDR *remote,BYTE type,WORD dataLen);

void    MACPutArray(BYTE *val, WORD len);

void    MACFlush(void);


WORD    swaps(WORD v);

DWORD   swapl(DWORD v);

WORD    CalcIPChecksum(BYTE* buffer, WORD count);

//void Delay10TCYx(PARAM_SCLASS unsigned char);

//void Delay1KTCYx(PARAM_SCLASS unsigned char);
void TickInit(void);
TICK TickGet(void);
void TickUpdate(void);
void IniPortA(void);
void InitializeBoard(void);
unsigned char woEERead(unsigned int add);
void woEEWrite(unsigned int add,unsigned char data);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -