📄 enc28j60.lis
字号:
00C0 .dbline 67
00C0 ; clear=SPDR;
00C0 4FB1 in R20,0xf
00C2 .dbline 69
00C2 ;
00C2 ; Set_CS(1); //关SPI器件
00C2 01E0 ldi R16,1
00C4 B7DF xcall _Set_CS
00C6 .dbline -2
00C6 .dbline 70
00C6 ; }
00C6 L32:
00C6 0E940000 xcall pop_gset2
00CA .dbline 0 ; func end
00CA 0895 ret
00CC .dbsym r clear 20 c
00CC .dbsym r date 22 c
00CC .dbsym r address 20 c
00CC .dbend
00CC .dbfunc e Read_Buffer_Memory_order _Read_Buffer_Memory_order fV
00CC ; clear -> R20
.even
00CC _Read_Buffer_Memory_order::
00CC 0E940000 xcall push_gset1
00D0 .dbline -1
00D0 .dbline 73
00D0 ; //#########################读缓冲存储器#################################
00D0 ; void Read_Buffer_Memory_order(void)//送读缓冲存储器命令,连续读时用到
00D0 ; {uchar clear;
00D0 .dbline 74
00D0 ; Set_CS(0); //使能SPI器件
00D0 0027 clr R16
00D2 B0DF xcall _Set_CS
00D4 .dbline 76
00D4 ;
00D4 ; SPDR=0x3A; //送命令,28J60中读缓冲存储器操作前3位为001后5位为常量11010
00D4 8AE3 ldi R24,58
00D6 8FB9 out 0xf,R24
00D8 L40:
00D8 .dbline 77
00D8 L41:
00D8 .dbline 77
00D8 ; while(!(SPSR&0x80));//等待SPIF置位,等数据发送完毕
00D8 779B sbis 0xe,7
00DA FECF rjmp L40
00DC .dbline 78
00DC ; clear=SPSR;
00DC 4EB1 in R20,0xe
00DE .dbline 79
00DE ; clear=SPDR; //通过先读SPSR,紧接着访问SPDR来对SPIF清零
00DE 4FB1 in R20,0xf
00E0 .dbline -2
00E0 .dbline 80
00E0 ; }
00E0 L39:
00E0 0E940000 xcall pop_gset1
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbsym r clear 20 c
00E6 .dbend
00E6 .dbfunc e Read_Buffer_Memory_date _Read_Buffer_Memory_date fc
00E6 ; clear -> R16
.even
00E6 _Read_Buffer_Memory_date::
00E6 .dbline -1
00E6 .dbline 82
00E6 ; uchar Read_Buffer_Memory_date(void)//收到读到的数据,连续读时用到此函数
00E6 ; {uchar clear;
00E6 .dbline 83
00E6 ; SPDR=0xc0;//随便送个数以起动时钟以接收从28J60控制寄存器里传来的数据
00E6 80EC ldi R24,192
00E8 8FB9 out 0xf,R24
00EA L44:
00EA .dbline 84
00EA L45:
00EA .dbline 84
00EA ; while(!(SPSR&0x80));
00EA 779B sbis 0xe,7
00EC FECF rjmp L44
00EE .dbline 85
00EE ; clear=SPSR;
00EE 0EB1 in R16,0xe
00F0 .dbline 86
00F0 ; clear=SPDR; //接收到控制寄存器里的数据
00F0 0FB1 in R16,0xf
00F2 .dbline 87
00F2 ; return clear;//返回读到的数据
00F2 .dbline -2
00F2 L43:
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbsym r clear 16 c
00F4 .dbend
00F4 .dbfunc e Read_Buffer_Memory_END _Read_Buffer_Memory_END fV
.even
00F4 _Read_Buffer_Memory_END::
00F4 .dbline -1
00F4 .dbline 90
00F4 ; }
00F4 ; void Read_Buffer_Memory_END(void)//读结束
00F4 ; {Set_CS(1); //关SPI器件
00F4 .dbline 90
00F4 01E0 ldi R16,1
00F6 .dbline -2
00F6 .dbline 91
00F6 ; }
00F6 L47:
00F6 .dbline 0 ; func end
00F6 9ECF xjmp _Set_CS
00F8 .dbend
00F8 .dbfunc e Read_Buffer_Memory _Read_Buffer_Memory fc
00F8 ; clear -> R20
.even
00F8 _Read_Buffer_Memory::
00F8 0E940000 xcall push_gset1
00FC .dbline -1
00FC .dbline 94
00FC ; //#########################读缓冲存储器#################################
00FC ; uchar Read_Buffer_Memory(void)//只读一次,地址是由ERDPT指向的存储器中的数据将从SO脚移出
00FC ; {uchar clear;
00FC .dbline 95
00FC ; Set_CS(0); //使能SPI器件
00FC 0027 clr R16
00FE 9ADF xcall _Set_CS
0100 .dbline 97
0100 ;
0100 ; SPDR=0x3A; //送命令,28J60中读缓冲存储器操作前3位为001后5位为常量11010
0100 8AE3 ldi R24,58
0102 8FB9 out 0xf,R24
0104 L49:
0104 .dbline 98
0104 L50:
0104 .dbline 98
0104 ; while(!(SPSR&0x80));//等待SPIF置位,等数据发送完毕
0104 779B sbis 0xe,7
0106 FECF rjmp L49
0108 .dbline 99
0108 ; clear=SPSR;
0108 4EB1 in R20,0xe
010A .dbline 100
010A ; clear=SPDR; //通过先读SPSR,紧接着访问SPDR来对SPIF清零
010A 4FB1 in R20,0xf
010C .dbline 102
010C ;
010C ; SPDR=0xc0;//随便送个数以起动时钟以接收从28J60控制寄存器里传来的数据
010C 80EC ldi R24,192
010E 8FB9 out 0xf,R24
0110 L52:
0110 .dbline 103
0110 L53:
0110 .dbline 103
0110 ; while(!(SPSR&0x80));
0110 779B sbis 0xe,7
0112 FECF rjmp L52
0114 .dbline 104
0114 ; clear=SPSR;
0114 4EB1 in R20,0xe
0116 .dbline 105
0116 ; clear=SPDR; //接收到控制寄存器里的数据
0116 4FB1 in R20,0xf
0118 .dbline 107
0118 ;
0118 ; Set_CS(1); //关SPI器件
0118 01E0 ldi R16,1
011A 8CDF xcall _Set_CS
011C .dbline 108
011C ; return clear;
011C 042F mov R16,R20
011E .dbline -2
011E L48:
011E 0E940000 xcall pop_gset1
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbsym r clear 20 c
0124 .dbend
0124 .dbfunc e Write_Buffer_Memory_date _Write_Buffer_Memory_date fV
0124 ; clear -> R20
0124 ; date -> R16
.even
0124 _Write_Buffer_Memory_date::
0124 0E940000 xcall push_gset1
0128 .dbline -1
0128 .dbline 112
0128 ; }
0128 ; //#########################写缓冲存储器#################################
0128 ; void Write_Buffer_Memory_date(uchar date)//写入缓冲存储器数据
0128 ; {uchar clear;
0128 .dbline 113
0128 ; SPDR=date;
0128 0FB9 out 0xf,R16
012A L56:
012A .dbline 114
012A L57:
012A .dbline 114
012A ; while(!(SPSR&0x80));
012A 779B sbis 0xe,7
012C FECF rjmp L56
012E .dbline 115
012E ; clear=SPSR;
012E 4EB1 in R20,0xe
0130 .dbline 116
0130 ; clear=SPDR;
0130 4FB1 in R20,0xf
0132 .dbline -2
0132 .dbline 117
0132 ; }
0132 L55:
0132 0E940000 xcall pop_gset1
0136 .dbline 0 ; func end
0136 0895 ret
0138 .dbsym r clear 20 c
0138 .dbsym r date 16 c
0138 .dbend
0138 .dbfunc e Write_Buffer_Memory_once _Write_Buffer_Memory_once fV
0138 ; clear -> R20
0138 ; date -> R22
.even
0138 _Write_Buffer_Memory_once::
0138 0E940000 xcall push_gset2
013C 602F mov R22,R16
013E .dbline -1
013E .dbline 119
013E ; void Write_Buffer_Memory_once(uchar date)//只写一次,地址是由EWRPT指向的存储器
013E ; {uchar clear;
013E .dbline 120
013E ; Set_CS(0); //使能SPI器件
013E 0027 clr R16
0140 79DF xcall _Set_CS
0142 .dbline 122
0142 ;
0142 ; SPDR=0x7A; //送命令,28J60中写缓冲存储器操作前3位为011后5位为常量11010
0142 8AE7 ldi R24,122
0144 8FB9 out 0xf,R24
0146 L60:
0146 .dbline 123
0146 L61:
0146 .dbline 123
0146 ; while(!(SPSR&0x80));//等待SPIF置位,等数据发送完毕
0146 779B sbis 0xe,7
0148 FECF rjmp L60
014A .dbline 124
014A ; clear=SPSR;
014A 4EB1 in R20,0xe
014C .dbline 125
014C ; clear=SPDR; //通过先读SPSR,紧接着访问SPDR来对SPIF清零
014C 4FB1 in R20,0xf
014E .dbline 127
014E ;
014E ; SPDR=date;
014E 6FB9 out 0xf,R22
0150 L63:
0150 .dbline 128
0150 L64:
0150 .dbline 128
0150 ; while(!(SPSR&0x80));
0150 779B sbis 0xe,7
0152 FECF rjmp L63
0154 .dbline 129
0154 ; clear=SPSR;
0154 4EB1 in R20,0xe
0156 .dbline 130
0156 ; clear=SPDR;
0156 4FB1 in R20,0xf
0158 .dbline 132
0158 ;
0158 ; Set_CS(1); //关SPI器件
0158 01E0 ldi R16,1
015A 6CDF xcall _Set_CS
015C .dbline -2
015C .dbline 133
015C ; }
015C L59:
015C 0E940000 xcall pop_gset2
0160 .dbline 0 ; func end
0160 0895 ret
0162 .dbsym r clear 20 c
0162 .dbsym r date 22 c
0162 .dbend
0162 .dbfunc e Bit_Field_Set _Bit_Field_Set fV
0162 ; clear -> R20
0162 ; date -> R22
0162 ; Address -> R20
.even
0162 _Bit_Field_Set::
0162 0E940000 xcall push_gset2
0166 622F mov R22,R18
0168 402F mov R20,R16
016A .dbline -1
016A .dbline 136
016A ; //#################################位域置1命令#################################
016A ; void Bit_Field_Set(uchar Address,uchar date)//指定地址的ETH控制寄存器的内容与date进行位逻辑或操作
016A ; {uchar clear;
016A .dbline 137
016A ; Address=Address+0x80;
016A 4058 subi R20,128 ; addi 128
016C .dbline 138
016C ; Set_CS(0); //使能SPI器件
016C 0027 clr R16
016E 62DF xcall _Set_CS
0170 .dbline 140
0170 ;
0170 ; SPDR=Address; //送命令,28J60中位域置1命令前3位为100后5位为地址
0170 4FB9 out 0xf,R20
0172 L67:
0172 .dbline 141
0172 L68:
0172 .dbline 141
0172 ; while(!(SPSR&0x80));//等待SPIF置位,等数据发送完毕
0172 779B sbis 0xe,7
0174 FECF rjmp L67
0176 .dbline 142
0176 ; clear=SPSR;
0176 4EB1 in R20,0xe
0178 .dbline 143
0178 ; clear=SPDR; //通过先读SPSR,紧接着访问SPDR来对SPIF清零
0178 4FB1 in R20,0xf
017A .dbline 145
017A ;
017A ; SPDR=date; //送数据
017A 6FB9 out 0xf,R22
017C L70:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -