查看: 1207|回复: 1
打印 上一主题 下一主题

刚做的enc28j60模块代码

[复制链接]
跳转到指定楼层
沙发
发表于 2016-6-23 20:17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1        #include <avr/io.h>
   2        #include <stdlib.h>
   3        #include <string.h>
   4        #include "ip_arp_udp_tcp.h"
   5        #include "enc28j60.h"
   6        #include "timeout.h"
   7        #include "avr_compat.h"
   8        #include "net.h"
   9
  10        // This software is a web server only.
  11        //
  12        static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x29};
  13        // the web server's own IP address:
  14        static uint8_t myip[4] = {10,0,0,29};
  15
  16        // server listen port for www
  17        #define MYWWWPORT 80
  18
  19        #define BUFFER_SIZE 550
  20        static uint8_t buf[BUFFER_SIZE+1];
  21
  22        uint16_t http200ok(void)
  23        {
  24                return(fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\n
Content-Type: text/html\r\nPragma: no-cache\r\n\r\n")));
  25        }
  26
  27        // prepare the webpage by writing the data to the tcp send buffer
  28        uint16_t print_webpage(uint8_t *buf)
  29        {
  30                uint16_t plen;
  31                plen=http200ok();
  32                plen=fill_tcp_data_p(buf,plen,PSTR("<pre>"));
  33                plen=fill_tcp_data_p(buf,plen,PSTR("Hi!\nYour web server works great."));
  34                plen=fill_tcp_data_p(buf,plen,PSTR("</pre>\n"));
  35                return(plen);
  36        }
  37
  38        int main(void){
  39                uint16_t dat_p;
  40
  41                // set the clock speed
  42                CLKPR=(1<<CLKPCE);
  43                CLKPR=0; // 8 MHZ
  44                _delay_loop_1(0); // 120us
  45
  46                //initialize the hardware driver for the enc28j60
  47                enc28j60Init(mymac);
  48                enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
  49                _delay_loop_1(0); // 60us
  50                enc28j60PhyWrite(PHLCON,0x476);
  51                _delay_loop_1(0); // 60us
  52
  53                //init the ethernet/ip layer:
  54                init_ip_arp_udp_tcp(mymac,myip,MYWWWPORT);
  55
  56                while(1){
  57                        // read packet, handle ping and wait for a tcp packet:
  58                        dat_p=packetloop_icmp_tcp(buf,
                             enc28j60PacketReceive(BUFFER_SIZE, buf));
  59
  60                        /* dat_p will be unequal to zero if there is a valid http get */
  61                        if(dat_p==0){
  62                                // no http request
  63                                continue;
  64                        }
  65                        // tcp port 80 begin
  66                        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
  67                                // head, post and other methods:
  68                                dat_p=http200ok();
  69                          dat_p=fill_tcp_data_p(buf,dat_p,
                                       PSTR("<h1>200 OK</h1>"));
  70                                goto SENDTCP;
  71                        }
  72                        // just one web page in the "root directory" of the web server
  73                        if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
  74                                dat_p=print_webpage(buf);
  75                                goto SENDTCP;
  76                        }else{
  77                                dat_p=fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 401 Unauthorized
\r\nContent-Type: text/html\r\n\r\n<h1>401 Unauthorized</h1>"));
  78                                goto SENDTCP;
  79                        }
  80        SENDTCP:
  81                        www_server_reply(buf,dat_p); // send web page data
  82                        // tcp port 80 end
  83                }
  84                return (0);
  85        }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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