📄 prj1.lst
字号:
__start:
__text_start:
6B EFCF LDI R28,0xFF
6C E1D0 LDI R29,0x10
6D BFCD OUT 0x3D,R28
6E BFDE OUT 0x3E,R29
6F 51C0 SUBI R28,0x10
70 40D0 SBCI R29,0
71 EA0A LDI R16,0xAA
72 8308 STD Y+0,R16
73 2400 CLR R0
74 E4E9 LDI R30,0x49
75 E0F1 LDI R31,1
76 E011 LDI R17,1
77 37E8 CPI R30,0x78
78 07F1 CPC R31,R17
79 F011 BEQ 0x007C
7A 9201 ST R0,Z+
7B CFFB RJMP 0x0077
7C 8300 STD Z+0,R16
7D E8EC LDI R30,0x8C
7E E0F0 LDI R31,0
7F E0A0 LDI R26,0
80 E0B1 LDI R27,1
81 E010 LDI R17,0
82 E000 LDI R16,0
83 BF0B OUT 0x3B,R16
84 3DE5 CPI R30,0xD5
85 07F1 CPC R31,R17
86 F021 BEQ 0x008B
87 95C8 LPM
88 9631 ADIW R30,1
89 920D ST R0,X+
8A CFF9 RJMP 0x0084
8B 940E 008E CALL _main
_exit:
8D CFFF RJMP _exit
FILE: E:\__test\_RTL8019_M128_struct_Test\Main.c
(0001) //*01. 本程序的晶体为 7.3728mHz ATMEGA128
(0002) //*02. 网卡板UDP的IP: 192.168.1.201
(0003) //*03. 网卡板UDP的端口: 9000
(0004) //*04. 网卡板MAC: { 0, 0, 'a', 'b', 'c', 'd' }
(0005) //*05. 网卡板: 192.168.1.201 9000
(0006) //*06. 远程电脑IP: 192.168.1.160
(0007) //*07. 远程电脑端口: 9000
(0008) //*08. 远程电脑MAC: { 0, 0x10, 0xB5, 0xAC, 0xF1, 0x31 }
(0009) //*09. 无网关(GATE)
(0010) //*10. 无子网掩码(MASK)
(0011)
(0012) //#include <string.h>
(0013) //#include <stdio.h>
(0014) #include <iom128v.h>
(0015) #include <macros.h>
(0016)
(0017) #include "Delay_7.37M.h"
(0018) #include "Lcd7920.h"
(0019) #include "Usart1_M128.h"
(0020) #include "Rtl8019as_Ethernet_M128.h"
(0021) #include "Rtl8019as_M128.h"
(0022)
(0023) //设置网络默认值
(0024) unsigned char MY_IP[4] = { 192,168,1,201 };
(0025) unsigned char MY_PORT[2] = { 0x23,0x28 }; //端口9000
(0026) unsigned char MY_MAC[6] = { 0,0,'a','b','c','d' };
(0027)
(0028) unsigned char REMOTE_IP[4] = { 192,168,1,160};
(0029) unsigned char REMOTE_PORT[2] = { 0x23,0x28 }; //端口9000
(0030) unsigned char REMOTE_MAC[6] = { 0,0x10,0xB5,0xAC,0xF1,0x31 };
(0031)
(0032) #define set_packet32(d,s) packet[d] = make8(s,3); \
(0033) packet[d+1] = make8(s,2); \
(0034) packet[d+2] = make8(s,1); \
(0035) packet[d+3]= make8(s,0);
(0036)
(0037) #define make8(var,offset) (var >> (offset * 8)) & 0xFF
(0038) #define make16(varhigh,varlow) ((varhigh & 0xFF)* 0x100) + (varlow & 0xFF)
(0039) #define make32(var1,var2,var3,var4) \
(0040) ((unsigned long)var1<<24)+((unsigned long)var2<<16)+ \
(0041) ((unsigned long)var3<<8)+((unsigned long)var4)
(0042)
(0043) unsigned char flg_arp;
(0044)
(0045)
(0046) void DoWithUart(void); //处理串口接收
(0047)
(0048)
(0049)
(0050)
(0051)
(0052) void main(void)
(0053) {
(0054) CLI();
_main:
8E 94F8 BCLR 7
(0055) UART1_Init(); //串口初始化要放在8019初始化前面,以免向串口发空乱数据
8F 940E 0117 CALL _UART1_Init
(0056) LCD_Init();
91 940E 01AE CALL _LCD_Init
(0057)
(0058) ////init_RTL8019AS();
(0059)
(0060) ////clr_synflag;
(0061) ////clr_finflag;
(0062)
(0063) //网络数据初始化 (--以后改用memcpy)
(0064) nodRemote.cIp[0]= REMOTE_IP[0];
93 9020 010C LDS R2,REMOTE_IP
95 9220 0152 STS 0x0152,R2
(0065) nodRemote.cIp[1]= REMOTE_IP[1];
97 9020 010D LDS R2,REMOTE_IP+1
99 9220 0153 STS 0x0153,R2
(0066) nodRemote.cIp[2]= REMOTE_IP[2];
9B 9020 010E LDS R2,REMOTE_IP+2
9D 9220 0154 STS 0x0154,R2
(0067) nodRemote.cIp[3]= REMOTE_IP[3];
9F 9020 010F LDS R2,REMOTE_IP+3
A1 9220 0155 STS 0x0155,R2
(0068) nodRemote.cPort[0]=REMOTE_PORT[0];
A3 9020 0110 LDS R2,REMOTE_PORT
A5 9220 0156 STS 0x0156,R2
(0069) nodRemote.cPort[1]=REMOTE_PORT[1];
A7 9020 0111 LDS R2,REMOTE_PORT+1
A9 9220 0157 STS 0x0157,R2
(0070) nodRemote.cMac[0]= REMOTE_MAC[0];
AB 9020 0112 LDS R2,REMOTE_MAC
AD 9220 014C STS nodRemote,R2
(0071) nodRemote.cMac[1]= REMOTE_MAC[1];
AF 9020 0113 LDS R2,REMOTE_MAC+1
B1 9220 014D STS nodRemote+1,R2
(0072) nodRemote.cMac[2]= REMOTE_MAC[2];
B3 9020 0114 LDS R2,REMOTE_MAC+2
B5 9220 014E STS nodRemote+2,R2
(0073) nodRemote.cMac[3]= REMOTE_MAC[3];
B7 9020 0115 LDS R2,REMOTE_MAC+3
B9 9220 014F STS nodRemote+3,R2
(0074) nodRemote.cMac[4]= REMOTE_MAC[4];
BB 9020 0116 LDS R2,0x0116
BD 9220 0150 STS 0x0150,R2
(0075) nodRemote.cMac[5]= REMOTE_MAC[5];
BF 9020 0117 LDS R2,0x0117
C1 9220 0151 STS 0x0151,R2
(0076)
(0077) nodLoc.cIp[0]=MY_IP[0];
C3 9020 0100 LDS R2,MY_IP
C5 9220 0166 STS 0x0166,R2
(0078) nodLoc.cIp[1]=MY_IP[1];
C7 9020 0101 LDS R2,MY_IP+1
C9 9220 0167 STS 0x0167,R2
(0079) nodLoc.cIp[2]=MY_IP[2];
CB 9020 0102 LDS R2,MY_IP+2
CD 9220 0168 STS 0x0168,R2
(0080) nodLoc.cIp[3]=MY_IP[3];
CF 9020 0103 LDS R2,MY_IP+3
D1 9220 0169 STS 0x0169,R2
(0081) nodLoc.cPort[0]=MY_PORT[0];
D3 9020 0104 LDS R2,MY_PORT
D5 9220 016A STS 0x016A,R2
(0082) nodLoc.cPort[1]=MY_PORT[1];
D7 9020 0105 LDS R2,MY_PORT+1
D9 9220 016B STS 0x016B,R2
(0083) nodLoc.cMac[0]= MY_MAC[0];
DB 9020 0106 LDS R2,MY_MAC
DD 9220 0160 STS nodLoc,R2
(0084) nodLoc.cMac[1]= MY_MAC[1];
DF 9020 0107 LDS R2,MY_MAC+1
E1 9220 0161 STS nodLoc+1,R2
(0085) nodLoc.cMac[2]= MY_MAC[2];
E3 9020 0108 LDS R2,MY_MAC+2
E5 9220 0162 STS nodLoc+2,R2
(0086) nodLoc.cMac[3]= MY_MAC[3];
E7 9020 0109 LDS R2,MY_MAC+3
E9 9220 0163 STS nodLoc+3,R2
(0087) nodLoc.cMac[4]= MY_MAC[4];
EB 9020 010A LDS R2,0x010A
ED 9220 0164 STS 0x0164,R2
(0088) nodLoc.cMac[5]= MY_MAC[5];
EF 9020 010B LDS R2,0x010B
F1 9220 0165 STS 0x0165,R2
(0089)
(0090) flg_arp='f';
F3 E686 LDI R24,0x66
F4 9380 0149 STS flg_arp,R24
(0091)
(0092) //delay_ms(1500); //keep it, wait for arp
(0093)
(0094) LCD_WriteStrAuto("Wan tst 080123B");
F6 E20C LDI R16,0x2C
F7 E011 LDI R17,1
F8 940E 027F CALL _LCD_WriteStrAuto
(0095) SEI();
FA 9478 BSET 7
(0096)
(0097) UART1_Puts("12345abc");
FB E203 LDI R16,0x23
FC E011 LDI R17,1
FD 940E 0190 CALL _UART1_Puts
FF C005 RJMP 0x0105
(0098)
(0099) //******************************************************************
(0100) //* Look for a packet in the receive buffer ring
(0101) //******************************************************************
(0102) while(1)
(0103) {
(0104) //Delay_nms_Preci(1500);
(0105)
(0106) //串口接收处理
(0107) if (flg_Received )
100 9020 0148 LDS R2,flg_Received
102 2022 TST R2
103 F009 BEQ 0x0105
(0108) {
(0109) DoWithUart();
104 D002 RCALL _DoWithUart
105 CFFA RJMP 0x0100
106 9508 RET
(0110) }
(0111)
(0112) /* //start the NIC
(0113) write_rtl(CR,0x22);
(0114)
(0115) //wait for a good packet
(0116) while(!(PIND & INT0_pin)) //循环, 直到INT0为高电平, 执行后面的程序
(0117) {
(0118) //if (flg_arp=='f')
(0119) //{
(0120) // sendarp(); delay_ms(350);
(0121) // }
(0122)
(0123) //串口接收处理
(0124) if (flg_Received )
(0125) {
(0126) DoWithUart();
(0127) }
(0128) }
(0129)
(0130) //read the interrupt status register
(0131) read_rtl(ISR);
(0132)
(0133) //if the receive buffer has been overrun
(0134) if(byte_read & OVW)
(0135) overrun();
(0136)
(0137) //if the receive buffer holds a good packet
(0138) if(byte_read & PRX)
(0139) get_frame();
(0140)
(0141) //make sure the receive buffer ring is empty
(0142) //if BNRY = CURR, the buffer is empty
(0143) read_rtl(BNRY);
(0144) data_L = byte_read;
(0145) write_rtl(CR,0x62);
(0146) read_rtl(CURR);
(0147) data_H = byte_read;
(0148) write_rtl(CR,0x22);
(0149) //buffer is not empty.. get next packet
(0150)
(0151) if(data_L != data_H)
(0152) get_frame();
(0153)
(0154) //reset the interrupt bits
(0155) write_rtl(ISR,0xFF);
(0156) */
(0157) }
(0158)
(0159) }
(0160)
(0161) void DoWithUart(void)
(0162) {
(0163) UART1_Puts("uart in ok");
_DoWithUart:
107 E108 LDI R16,0x18
108 E011 LDI R17,1
109 940E 0190 CALL _UART1_Puts
(0164) Delay_nus(5);
10B E005 LDI R16,5
10C E010 LDI R17,0
10D 940E 02D0 CALL _Delay_nus
(0165)
(0166) //UdpSendoutStr("12345",5);
(0167)
(0168) Delay_nus(5);
10F E005 LDI R16,5
110 E010 LDI R17,0
111 940E 02D0 CALL _Delay_nus
(0169) flg_Received=0;
113 2422 CLR R2
114 9220 0148 STS flg_Received,R2
116 9508 RET
FILE: E:\__test\_RTL8019_M128_struct_Test\Usart1_M128.c
(0001) #include <string.h>
(0002)
(0003) #include "Usart1_M128.h"
(0004)
(0005) unsigned char RX_data[RX_SIZE]={0}; //串口接收缓冲区
(0006) unsigned char RX_data2[RX_SIZE]={0}; //串口接收缓冲区
(0007) volatile unsigned int iNum; //串口接收字符计数
(0008) unsigned char flg_Received=0; //已接收一个卡号
(0009)
(0010) void UART1_Init(void)
(0011) {
(0012) UCSR1B = (1<<RXCIE1)| (1<<RXEN1) |(1<<TXEN1); //允许串口发送和接收,并响应接收完成中断
_UART1_Init:
117 E988 LDI R24,0x98
118 9380 009A STS 0x009A,R24
(0013) UBRR1L = BAUD; //波特率为9600(7.3728MHz晶振)
11A E28F LDI R24,0x2F
11B 9380 0099 STS 0x0099,R24
(0014) UBRR1H = 0;
11D 2422 CLR R2
11E 9220 0098 STS 0x0098,R2
(0015) UCSR1C = (1<<UCSZ11)|(1<<UCSZ10); //8位数据+1位stop位, 异步模式
120 E086 LDI R24,6
121 9380 009D STS 0x009D,R24
123 9508 RET
_UART1_Receive:
cRec --> R10
124 920A ST R0,-Y
125 921A ST R1,-Y
126 922A ST R2,-Y
127 923A ST R3,-Y
128 924A ST R4,-Y
129 925A ST R5,-Y
12A 926A ST R6,-Y
12B 927A ST R7,-Y
12C 928A ST R8,-Y
12D 929A ST R9,-Y
12E 92AA ST R10,-Y
12F 930A ST R16,-Y
130 931A ST R17,-Y
131 932A ST R18,-Y
132 933A ST R19,-Y
133 938A ST R24,-Y
134 939A ST R25,-Y
135 93AA ST R26,-Y
136 93BA ST R27,-Y
137 93EA ST R30,-Y
138 93FA ST R31,-Y
139 B60F IN R0,0x3F
13A 920A ST R0,-Y
13B 92AA ST R10,-Y
13C 9722 SBIW R28,2
(0016) }
(0017)
(0018) #pragma interrupt_handler UART1_Receive: iv_USART1_RX
(0019) void UART1_Receive(void)
(0020) {
(0021) unsigned char cRec;
(0022)
(0023) cRec= UDR1;
13D 90A0 009C LDS R10,0x009C
(0024)
(0025) RX_data[iNum++]=cRec;
13F 9020 014A LDS R2,iNum
141 9030 014B LDS R3,iNum+1
143 01C1 MOVW R24,R2
144 9601 ADIW R24,1
145 9390 014B STS iNum+1,R25
147 9380 014A STS iNum,R24
149 E38C LDI R24,0x3C
14A E091 LDI R25,1
14B 01F1 MOVW R30,R2
14C 0FE8 ADD R30,R24
14D 1FF9 ADC R31,R25
14E 82A0 STD Z+0,R10
(0026)
(0027) //每接收RX_SIZE=6个字符显示一次
(0028) if (iNum==RX_SIZE)
14F 9180 014A LDS R24,iNum
151 9190 014B LDS R25,iNum+1
153 3086 CPI R24,6
154 E0E0 LDI R30,0
155 079E CPC R25,R30
156 F499 BNE 0x016A
(0029) {
(0030) memcpy(RX_data2,RX_data,RX_SIZE);
157 E086 LDI R24,6
158 E090 LDI R25,0
159 8399 STD Y+1,R25
15A 8388 STD Y+0,R24
15B E32C LDI R18,0x3C
15C E031 LDI R19,1
15D E402 LDI R16,0x42
15E E011 LDI R17,1
15F 940E 0318 CALL _memcpy
(0031) flg_Received=1;
161 E081 LDI R24,1
162 9380 0148 STS flg_Received,R24
(0032) iNum=0;
164 2422 CLR R2
165 2433 CLR R3
166 9230 014B STS iNum+1,R3
168 9220 014A STS iNum,R2
(0033) }
(0034)
(0035) RX_data[0]=cRec;
16A 92A0 013C STS RX_data,R10
(0036) flg_Received=1;
16C E081 LDI R24,1
16D 9380 0148 STS flg_Received,R24
16F 9622 ADIW R28,2
170 90A9 LD R10,Y+
171 9009 LD R0,Y+
172 BE0F OUT 0x3F,R0
173 91F9 LD R31,Y+
174 91E9 LD R30,Y+
175 91B9 LD R27,Y+
176 91A9 LD R26,Y+
177 9199 LD R25,Y+
178 9189 LD R24,Y+
179 9139 LD R19,Y+
17A 9129 LD R18,Y+
17B 9119 LD R17,Y+
17C 9109 LD R16,Y+
17D 90A9 LD R10,Y+
17E 9099 LD R9,Y+
17F 9089 LD R8,Y+
180 9079 LD R7,Y+
181 9069 LD R6,Y+
182 9059 LD R5,Y+
183 9049 LD R4,Y+
184 9039 LD R3,Y+
185 9029 LD R2,Y+
186 9019 LD R1,Y+
187 9009 LD R0,Y+
188 9518 RETI
(0037) }
(0038)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -