📄 main.s
字号:
.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 + -