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

📄 enc28j60.lis

📁 网卡控制器ENC28J60的AVR单片机ATmega16程序源代码(c),实现232toUDP功能,有非常详细的注释.
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -