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

📄 avrnet.lss

📁 proteus avr单片米 tcp/ip 仿真
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     aa8:	8a e0       	ldi	r24, 0x0A	; 10
     aaa:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     aae:	6a e1       	ldi	r22, 0x1A	; 26
     ab0:	8b e0       	ldi	r24, 0x0B	; 11
     ab2:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ab6:	64 e2       	ldi	r22, 0x24	; 36
     ab8:	84 e0       	ldi	r24, 0x04	; 4
     aba:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     abe:	6a e1       	ldi	r22, 0x1A	; 26
     ac0:	85 e0       	ldi	r24, 0x05	; 5
     ac2:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ac6:	60 e0       	ldi	r22, 0x00	; 0
     ac8:	86 e0       	ldi	r24, 0x06	; 6
     aca:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ace:	60 e2       	ldi	r22, 0x20	; 32
     ad0:	87 e0       	ldi	r24, 0x07	; 7
     ad2:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ad6:	6d e0       	ldi	r22, 0x0D	; 13
     ad8:	80 ec       	ldi	r24, 0xC0	; 192
     ada:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ade:	62 e3       	ldi	r22, 0x32	; 50
     ae0:	82 ec       	ldi	r24, 0xC2	; 194
     ae2:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     ae6:	60 e4       	ldi	r22, 0x40	; 64
     ae8:	83 ec       	ldi	r24, 0xC3	; 195
     aea:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     aee:	6f e3       	ldi	r22, 0x3F	; 63
     af0:	89 ec       	ldi	r24, 0xC9	; 201
     af2:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     af6:	62 e1       	ldi	r22, 0x12	; 18
     af8:	86 ec       	ldi	r24, 0xC6	; 198
     afa:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     afe:	6c e0       	ldi	r22, 0x0C	; 12
     b00:	87 ec       	ldi	r24, 0xC7	; 199
     b02:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b06:	6e ee       	ldi	r22, 0xEE	; 238
     b08:	8a ec       	ldi	r24, 0xCA	; 202
     b0a:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b0e:	65 e0       	ldi	r22, 0x05	; 5
     b10:	8b ec       	ldi	r24, 0xCB	; 203
     b12:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b16:	f7 01       	movw	r30, r14
     b18:	60 81       	ld	r22, Z
     b1a:	84 ee       	ldi	r24, 0xE4	; 228
     b1c:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b20:	f7 01       	movw	r30, r14
     b22:	61 81       	ldd	r22, Z+1	; 0x01
     b24:	85 ee       	ldi	r24, 0xE5	; 229
     b26:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b2a:	f7 01       	movw	r30, r14
     b2c:	62 81       	ldd	r22, Z+2	; 0x02
     b2e:	82 ee       	ldi	r24, 0xE2	; 226
     b30:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b34:	f7 01       	movw	r30, r14
     b36:	63 81       	ldd	r22, Z+3	; 0x03
     b38:	83 ee       	ldi	r24, 0xE3	; 227
     b3a:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b3e:	f7 01       	movw	r30, r14
     b40:	64 81       	ldd	r22, Z+4	; 0x04
     b42:	80 ee       	ldi	r24, 0xE0	; 224
     b44:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b48:	f7 01       	movw	r30, r14
     b4a:	65 81       	ldd	r22, Z+5	; 0x05
     b4c:	81 ee       	ldi	r24, 0xE1	; 225
     b4e:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b52:	60 e0       	ldi	r22, 0x00	; 0
     b54:	71 e0       	ldi	r23, 0x01	; 1
     b56:	80 e1       	ldi	r24, 0x10	; 16
     b58:	0e 94 3c 04 	call	0x878	; 0x878 <enc28j60PhyWrite>
     b5c:	62 e7       	ldi	r22, 0x72	; 114
     b5e:	74 e0       	ldi	r23, 0x04	; 4
     b60:	84 e1       	ldi	r24, 0x14	; 20
     b62:	0e 94 3c 04 	call	0x878	; 0x878 <enc28j60PhyWrite>
     b66:	60 eb       	ldi	r22, 0xB0	; 176
     b68:	88 e3       	ldi	r24, 0x38	; 56
     b6a:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b6e:	6f e3       	ldi	r22, 0x3F	; 63
     b70:	88 e2       	ldi	r24, 0x28	; 40
     b72:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b76:	60 e3       	ldi	r22, 0x30	; 48
     b78:	89 e2       	ldi	r24, 0x29	; 41
     b7a:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b7e:	69 ef       	ldi	r22, 0xF9	; 249
     b80:	80 e3       	ldi	r24, 0x30	; 48
     b82:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b86:	67 ef       	ldi	r22, 0xF7	; 247
     b88:	81 e3       	ldi	r24, 0x31	; 49
     b8a:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b8e:	62 e1       	ldi	r22, 0x12	; 18
     b90:	84 ec       	ldi	r24, 0xC4	; 196
     b92:	0e 94 0d 04 	call	0x81a	; 0x81a <enc28j60Write>
     b96:	8f e1       	ldi	r24, 0x1F	; 31
     b98:	0e 94 de 03 	call	0x7bc	; 0x7bc <enc28j60SetBank>
     b9c:	40 ec       	ldi	r20, 0xC0	; 192
     b9e:	6b e1       	ldi	r22, 0x1B	; 27
     ba0:	80 e8       	ldi	r24, 0x80	; 128
     ba2:	0e 94 d3 03 	call	0x7a6	; 0x7a6 <enc28j60WriteOp>
     ba6:	44 e0       	ldi	r20, 0x04	; 4
     ba8:	6f e1       	ldi	r22, 0x1F	; 31
     baa:	80 e8       	ldi	r24, 0x80	; 128
     bac:	0e 94 d3 03 	call	0x7a6	; 0x7a6 <enc28j60WriteOp>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
     bb0:	c8 01       	movw	r24, r16
     bb2:	01 97       	sbiw	r24, 0x01	; 1
     bb4:	f1 f7       	brne	.-4      	; 0xbb2 <enc28j60_init+0x17e>
     bb6:	1f 91       	pop	r17
     bb8:	0f 91       	pop	r16
     bba:	ff 90       	pop	r15
     bbc:	ef 90       	pop	r14
     bbe:	08 95       	ret

00000bc0 <software_reset>:
//*****************************************************************************************
#ifndef REMOVE_BOOTLOADER_SUPPORT
void software_reset(void) __attribute__ ((naked));
void software_reset(void)
{
     bc0:	88 e1       	ldi	r24, 0x18	; 24
     bc2:	90 e0       	ldi	r25, 0x00	; 0
     bc4:	28 e0       	ldi	r18, 0x08	; 8
     bc6:	0f b6       	in	r0, 0x3f	; 63
     bc8:	f8 94       	cli
     bca:	a8 95       	wdr
     bcc:	81 bd       	out	0x21, r24	; 33
     bce:	0f be       	out	0x3f, r0	; 63
     bd0:	21 bd       	out	0x21, r18	; 33
     bd2:	ff cf       	rjmp	.-2      	; 0xbd2 <software_reset+0x12>

00000bd4 <client_process>:
	wdt_enable(WDTO_15MS);
	for(;;);
}
#endif
// end added in V1.1 ======================================================================
//*****************************************************************************************
//
// Function : server_process
// Description : Run web server and listen on port 80
//
//*****************************************************************************************
void server_process ( void )
{
	MAC_ADDR client_mac;
	IP_ADDR client_ip;
	// you can change rx,tx buffer size in includes.h
	BYTE rxtx_buffer[MAX_RXTX_BUFFER];
	WORD plen;
	
	if ( flag1.bits.syn_is_sent )
		return;
	// get new packet
	plen = enc28j60_packet_receive( (BYTE*)&rxtx_buffer, MAX_RXTX_BUFFER );
	
	//plen will ne unequal to zero if there is a valid packet (without crc error)
	if(plen==0)
		return;

	// copy client mac address from buffer to client mac variable
	memcpy ( (BYTE*)&client_mac, &rxtx_buffer[ ETH_SRC_MAC_P ], sizeof(MAC_ADDR) );
	
	// check arp packet if match with avr ip let's send reply
	if ( arp_packet_is_arp( rxtx_buffer, (WORD_BYTES){ARP_OPCODE_REQUEST_V} ) )
	{
		arp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac );
		return;
	}

	// get client ip address
	memcpy ( (BYTE*)&client_ip, &rxtx_buffer[ IP_SRC_IP_P ], sizeof(IP_ADDR) );
	// check ip packet send to avr or not?
	if ( ip_packet_is_ip ( (BYTE*)&rxtx_buffer ) == 0 )
	{
		return;
	}

	// check ICMP packet, if packet is icmp packet let's send icmp echo reply
	if ( icmp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip ) )
	{
		return;
	}

	// check UDP packet
	if (udp_receive ( (BYTE *)&rxtx_buffer, (BYTE *)&client_mac, (BYTE *)&client_ip ))
	{
// added in V1.1 ***********************************
#ifndef REMOVE_BOOTLOADER_SUPPORT
		if( flag2.bits.software_reset )
			software_reset();
#endif
// end added in V1.1 *******************************
		return;
	}
	
	// tcp start here
	// start web server at port 80, see http.c
	http_webserver_process ( (BYTE*)rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip );
}
//*****************************************************************************************
//
// Function : client_process
// Description : send temparature to web server, this option is disabled by default.
// YOU MUST install webserver and server script before enable this option, 
// I recommented Apache webserver and PHP script. 
// More detail about Apache and PHP installation please visit http://www.avrportal.com/
//
//*****************************************************************************************
void client_process ( void )
{
     bd4:	4f 92       	push	r4
     bd6:	5f 92       	push	r5
     bd8:	6f 92       	push	r6
     bda:	7f 92       	push	r7
     bdc:	8f 92       	push	r8
     bde:	9f 92       	push	r9
     be0:	af 92       	push	r10
     be2:	bf 92       	push	r11
     be4:	cf 92       	push	r12
     be6:	df 92       	push	r13
     be8:	ef 92       	push	r14
     bea:	0f 93       	push	r16
     bec:	1f 93       	push	r17
     bee:	cf 93       	push	r28
     bf0:	df 93       	push	r29
     bf2:	cd b7       	in	r28, 0x3d	; 61
     bf4:	de b7       	in	r29, 0x3e	; 62
     bf6:	ce 5e       	subi	r28, 0xEE	; 238
     bf8:	d5 40       	sbci	r29, 0x05	; 5
     bfa:	0f b6       	in	r0, 0x3f	; 63
     bfc:	f8 94       	cli
     bfe:	de bf       	out	0x3e, r29	; 62
     c00:	0f be       	out	0x3f, r0	; 63
     c02:	cd bf       	out	0x3d, r28	; 61
	WORD dlength;
	// you can change rx,tx buffer size in includes.h
	BYTE rxtx_buffer[MAX_RXTX_BUFFER];

	// wait for send temparature flag is set, this flag set by time_base function (menu.c)
	if ( flag1.bits.send_temp == 0 )
     c04:	80 91 02 01 	lds	r24, 0x0102
     c08:	84 ff       	sbrs	r24, 4
     c0a:	be c0       	rjmp	.+380    	; 0xd88 <client_process+0x1b4>
		return;	
	// AVR busy now and wait untill transfer data to web browser completed.
	if ( flag1.bits.syn_is_received )
     c0c:	86 fd       	sbrc	r24, 6
     c0e:	bc c0       	rjmp	.+376    	; 0xd88 <client_process+0x1b4>
		return;
	// AVR sent temparature to web server but not found web server on port 80
	//if ( flag1.bits.not_found_server )
	//	return;
	// send SYN to initial connection
	if ( flag1.bits.syn_is_sent == 0 )
     c10:	85 fd       	sbrc	r24, 5
     c12:	2e c0       	rjmp	.+92     	; 0xc70 <client_process+0x9c>
	{
		// start arp 
		// server ip was not found on network
		if ( arp_who_is ( rxtx_buffer, (BYTE*)&server_mac, (BYTE*)&server_ip ) == 0 )
     c14:	09 e0       	ldi	r16, 0x09	; 9
     c16:	11 e0       	ldi	r17, 0x01	; 1
     c18:	a8 01       	movw	r20, r16
     c1a:	61 e1       	ldi	r22, 0x11	; 17
     c1c:	71 e0       	ldi	r23, 0x01	; 1
     c1e:	2e 01       	movw	r4, r28
     c20:	08 94       	sec
     c22:	41 1c       	adc	r4, r1
     c24:	51 1c       	adc	r5, r1
     c26:	c2 01       	movw	r24, r4
     c28:	0e 94 cf 0c 	call	0x199e	; 0x199e <arp_who_is>
     c2c:	88 23       	and	r24, r24
     c2e:	21 f4       	brne	.+8      	; 0xc38 <client_process+0x64>
		{
			flag1.bits.send_temp = 0;
     c30:	80 91 02 01 	lds	r24, 0x0102
     c34:	8f 7e       	andi	r24, 0xEF	; 239
     c36:	2c c0       	rjmp	.+88     	; 0xc90 <client_process+0xbc>
			return;
		}
	
		// send SYN packet to initial connection
		tcp_send_packet (
     c38:	1f 93       	push	r17
     c3a:	0f 93       	push	r16
     c3c:	e1 e1       	ldi	r30, 0x11	; 17
     c3e:	8e 2e       	mov	r8, r30
     c40:	e1 e0       	ldi	r30, 0x01	; 1
     c42:	9e 2e       	mov	r9, r30
     c44:	aa 24       	eor	r10, r10
     c46:	bb 24       	eor	r11, r11
     c48:	cc 24       	eor	r12, r12
     c4a:	dd 24       	eor	r13, r13
     c4c:	71 e0       	ldi	r23, 0x01	; 1
     c4e:	e7 2e       	mov	r14, r23
     c50:	01 e0       	ldi	r16, 0x01	; 1
     c52:	22 e0       	ldi	r18, 0x02	; 2
     c54:	40 eb       	ldi	r20, 0xB0	; 176
     c56:	54 e0       	ldi	r21, 0x04	; 4
     c58:	60 e5       	ldi	r22, 0x50	; 80
     c5a:	70 e0       	ldi	r23, 0x00	; 0
     c5c:	c2 01       	movw	r24, r4
     c5e:	0e 94 44 0d 	call	0x1a88	; 0x1a88 <tcp_send_packet>
			rxtx_buffer,
			(WORD_BYTES){80},						// destination port
			(WORD_BYTES){1200},					// source port
			TCP_FLAG_SYN_V,			// flag
			1,						// (bool)maximum segment size
			1,						// (bool)clear sequence ack number
			0,						// 0=use old seq, seqack : 1=new seq,seqack no data : new seq,seqack with data
			0,						// tcp data length
			(BYTE*)&server_mac,		// server mac address
			(BYTE*)&server_ip );	// server ip address
		flag1.bits.syn_is_sent = 1;
     c62:	80 91 02 01 	lds	r24, 0x0102
     c66:	80 62       	ori	r24, 0x20	; 32
     c68:	80 93 02 01 	sts	0x0102, r24
     c6c:	0f 90       	pop	r0
     c6e:	0f 90       	pop	r0
	}
	// get new packet
	dlength = enc28j60_packet_receive( (BYTE*)&rxtx_buffer, MAX_RXTX_BUFFER );
     c70:	6e ee       	ldi	r22, 0xEE	; 238
     c72:	75 e0       	ldi	r23, 0x05	; 5
     c74:	2e 01       	movw	r4, r28
     c76:	08 94       	sec
     c78:	41 1c       	adc	r4, r1
     c7a:	51 1c       	adc	r5, r1
     c7c:	c2 01       	movw	r24, r4
     c7e:	0e 94 a3 04 	call	0x946	; 0x946 <enc28j60_packet_receive>
	
	// no new packet incoming
	if ( dlength == 0 )
     c82:	89 2b       	or	r24, r25
     c84:	41 f4       	brne	.+16   

⌨️ 快捷键说明

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