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

📄 main.s

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area data(ram, con, rel)
_rtl_isr_status::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\main.c
	.dbsym e rtl_isr_status _rtl_isr_status c
	.area text(rom, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\main.c
	.dbfunc e main _main fV
;  rtl8019status -> R20
;       udptest2 -> R22
;       udptest1 -> R20
	.even
_main::
	sbiw R28,1
	.dbline -1
	.dbline 24
; //ICC-AVR application builder : 2002-1-1 7:57:28
; // Target : M64
; // Crystal: 12.000Mhz
; #include "main.h"
; #include "rtl8019as.h"
; #include "arp.h"
; #include "ip.h"
; #include "icmp.h"
; #include "udp.h"
; 
; 
; extern unsigned int curr;//网卡RAM页指针
; extern unsigned int curr_temp;
; 
; 
; //////////////////////////////////////////////////////
; //////////////////////////////////////////////////////
; //////////////////////////////////////////////////////
; 
; unsigned char rtl_isr_status=0;
; 
; 
; void main(void)
; {
	.dbline 25
;   unsigned char rtl8019status=0;
	clr R20
	.dbline 26
;   unsigned char udptest1=0;
	.dbline 27
;   unsigned char udptest2=0;
	clr R22
	.dbline 29
;   
;   key1_ok=0;
	clr R2
	sts _key1_ok,R2
	.dbline 30
;   init_devices();
	xcall _init_devices
	.dbline 31
;   LED1_ON;
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 32
;   udp_init();
	xcall _udp_init
	.dbline 33
;   curr=0x4d00;
	ldi R24,19712
	ldi R25,77
	sts _curr+1,R25
	sts _curr,R24
	.dbline 34
;   curr_temp=0;
	clr R2
	clr R3
	sts _curr_temp+1,R3
	sts _curr_temp,R2
	.dbline 35
;   delay_100ms();
	xcall _delay_100ms
	.dbline 36
;   rtl8019_reset();
	xcall _rtl8019_reset
	.dbline 37
;   rtl8019_init();
	xcall _rtl8019_init
	.dbline 38
;   rtl8019_writemynodeid();
	xcall _rtl8019_writemynodeid
	.dbline 39
;   LED1_OFF;
	sbi 0x12,4
	xjmp L3
L2:
	.dbline 42
;      
;   while(1)
;   {
	.dbline 43
;    WDR();
	wdr
	.dbline 44
;    uartsenddata();
	xcall _uartsenddata
	.dbline 46
;    
;    if(key1_ok)
	lds R2,_key1_ok
	tst R2
	breq L5
	.dbline 47
;    { 
	.dbline 48
;     udpsendbuffer_ex[0]=udptest1;
	sts _udpsendbuffer_ex,R20
	.dbline 49
; 	udpsendbuffer_ex[1]=udptest2;
	sts _udpsendbuffer_ex+1,R22
	.dbline 50
;     send_ippack(44,0x0800,17);
	ldi R24,17
	std y+0,R24
	ldi R18,2048
	ldi R19,8
	ldi R16,44
	ldi R17,0
	xcall _send_ippack
	.dbline 51
; 	key1_ok=0;
	clr R2
	sts _key1_ok,R2
	.dbline 52
; 	udptest1++;
	inc R20
	.dbline 53
; 	udptest2+=2;
	subi R22,254    ; addi 2
	.dbline 54
;    }
L5:
	.dbline 57
;    
;    //rtl_errchk();
;    switch(rtl_isr_status&0x03)
	lds R24,_rtl_isr_status
	clr R25
	andi R24,3
	andi R25,0
	movw R10,R24
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L11
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L14
	xjmp L8
X0:
	.dbline 58
;    {//收发数据包事件处理
L11:
	.dbline 61
;     case 0x01://接收到有效数据包
; 	     //isr_ok=0;
; 	     rtl8019_read(curr,1536);
	ldi R18,1536
	ldi R19,6
	lds R16,_curr
	lds R17,_curr+1
	xcall _rtl8019_read
	.dbline 62
; 		 rtl_packhandle();//数据包处理
	xcall _rtl_packhandle
	.dbline 63
; 		 curr_temp=curr;
	lds R2,_curr
	lds R3,_curr+1
	sts _curr_temp+1,R3
	sts _curr_temp,R2
	.dbline 64
; 		 curr=rtl_readcurr();
	xcall _rtl_readcurr
	mov R2,R16
	clr R3
	sts _curr+1,R3
	sts _curr,R2
	.dbline 65
; 		 curr<<=8;
	mov R3,R2
	clr R2
	sts _curr+1,R3
	sts _curr,R2
	.dbline 66
; 	     if(curr<curr_temp){rtl_setcurr();}//如果接收缓冲满,则重置
	lds R2,_curr_temp
	lds R3,_curr_temp+1
	lds R4,_curr
	lds R5,_curr+1
	cp R4,R2
	cpc R5,R3
	brsh L12
	.dbline 66
	.dbline 66
	xcall _rtl_setcurr
	.dbline 66
L12:
	.dbline 67
; 		 rtl_isr_status=0;
	clr R2
	sts _rtl_isr_status,R2
	.dbline 68
; 		 break;
	xjmp L9
L14:
	.dbline 71
; 	case 0x02://数据包已正确发送
; 	     //isr_ok=0;
; 		 rtl_setcurr();
	xcall _rtl_setcurr
	.dbline 72
; 		 rtl_isr_status=0;
	clr R2
	sts _rtl_isr_status,R2
	.dbline 73
; 	     break;
L8:
L9:
	.dbline 75
L3:
	.dbline 41
	xjmp L2
X1:
	.dbline -2
L1:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbsym r rtl8019status 20 c
	.dbsym r udptest2 22 c
	.dbsym r udptest1 20 c
	.dbend
	.area vector(rom, abs)
	.org 120
	jmp _uart1_rx_isr
	.area text(rom, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\main.c
	.dbfunc e uart1_rx_isr _uart1_rx_isr fV
	.even
_uart1_rx_isr::
	.dbline -1
	.dbline 81
;    }
;   }
; }
; 
; 
; #pragma interrupt_handler uart1_rx_isr:31
; void uart1_rx_isr(void)
; {
	.dbline -2
L15:
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\main.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	xcall push_lset
	.dbline -1
	.dbline 88
;  //uart has received a character in UDR
; }
; 
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 89
;  rtl_isr_status=rtl_isrstatus();
	xcall _rtl_isrstatus
	sts _rtl_isr_status,R16
	.dbline -2
L16:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 8
	jmp _int1_isr
	.area text(rom, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\main.c
	.dbfunc e int1_isr _int1_isr fV
	.even
_int1_isr::
	st -y,R24
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 95
;  //isr_ok=1;
; }
; 
; #pragma interrupt_handler int1_isr:3
; void int1_isr(void)
; {
	.dbline 96
;  key1_ok=1;//external interupt on INT1
	ldi R24,1
	sts _key1_ok,R24
	.dbline -2
L17:
	ld R24,y+
	out 0x3f,R24
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 101
; }
; 
; //////////////////////////////////////////////////////////////////
; void port_init(void)
; {
	.dbline 102
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 103
;  DDRA  = 0x00;
	out 0x1a,R2
	.dbline 104
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 105
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 106
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 107
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 108
;  PORTD = 0x02;
	ldi R24,2
	out 0x12,R24
	.dbline 109
;  DDRD  = 0x30;
	ldi R24,48
	out 0x11,R24
	.dbline 110
;  PORTE = 0x00;
	out 0x3,R2
	.dbline 111
;  DDRE  = 0x00;
	out 0x2,R2
	.dbline 112
;  PORTF = 0x00;
	sts 98,R2
	.dbline 113
;  DDRF  = 0x00;
	sts 97,R2
	.dbline 114
;  PORTG = 0x00;
	sts 101,R2
	.dbline 115
;  DDRG  = 0x08;
	ldi R24,8
	sts 100,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 120
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 122
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 123
;  XDIV  = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
	.dbline 124
;  XMCRA = 0x04; //external memory
	ldi R24,4
	sts 109,R24
	.dbline 125
;  mapping_init();
	xcall _mapping_init
	.dbline 126
;  port_init();
	xcall _port_init
	.dbline 127
;  uart1_init();
	xcall _uart1_init
	.dbline 129
;  
;  MCUCR = 0x80;
	ldi R24,128
	out 0x35,R24
	.dbline 130
;  EICRA = 0x0b; //extended ext ints
	ldi R24,11
	sts 106,R24
	.dbline 131
;  EICRB = 0x00; //extended ext ints
	clr R2
	out 0x3a,R2
	.dbline 132
;  EIMSK = 0x03;
	ldi R24,3
	out 0x39,R24
	.dbline 133
;  TIMSK = 0x00; //timer interrupt sources
	out 0x37,R2
	.dbline 134
;  ETIMSK = 0x00; //extended timer interrupt sources
	sts 125,R2
	.dbline 135
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_100ms _delay_100ms fV
;              i -> R16,R17
;              k -> R18,R19
	.even
_delay_100ms::
	.dbline -1
	.dbline 140
;  //all peripherals are now initialized
; }
; 
; void delay_100ms(void)
; {
	.dbline 141
;  unsigned int i=0;
	clr R16
	clr R17
	.dbline 142
;  unsigned int k=0;
	clr R18
	clr R19
	.dbline 143
;  for(;i<1000;i++)
	xjmp L24
L21:
	.dbline 144
;  {
	.dbline 145
;   for(k=0;k<100;k++)
	clr R18
	clr R19
	xjmp L28
L25:
	.dbline 146
	.dbline 147
	wdr
	.dbline 148

⌨️ 快捷键说明

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