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

📄 at45db041.lis

📁 一个关于AVR单片机的例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00CA           ;    temp1=1;
 00CA 41E0              ldi R20,1
 00CC 01C0              xjmp L28
 00CE           L27:
 00CE                   .dbline 109
 00CE           ;   else
 00CE           ;    temp1=0;
 00CE 4427              clr R20
 00D0           L28:
 00D0                   .dbline 110
 00D0 142F              mov R17,R20
 00D2 1F5F              subi R17,255    ; addi 1
 00D4 062F              mov R16,R22
 00D6 0E940000          xcall lsl8
 00DA 602F              mov R22,R16
 00DC                   .dbline 111
 00DC DA9A              sbi 0x1b,2
 00DE                   .dbline 112
 00DE 0E940000          xcall _delay_1ms
 00E2                   .dbline 113
 00E2           L24:
 00E2                   .dbline 102
 00E2 A394              inc R10
 00E4           L26:
 00E4                   .dbline 102
 00E4 8A2D              mov R24,R10
 00E6 8830              cpi R24,8
 00E8 48F3              brlo L23
 00EA                   .dbline 114
 00EA           ;   temp2=temp2<<1+temp1;
 00EA           ;   SCK_HIGH();
 00EA           ;   delay_1ms();
 00EA           ;  }
 00EA           ;  return temp2;
 00EA 062F              mov R16,R22
 00EC                   .dbline -2
 00EC           L22:
 00EC 0E940000          xcall pop_gset3
 00F0                   .dbline 0 ; func end
 00F0 0895              ret
 00F2                   .dbsym r temp1 20 c
 00F2                   .dbsym r temp2 22 c
 00F2                   .dbsym r i 10 c
 00F2                   .dbend
 00F2                   .dbfunc e at4541_write _at4541_write fV
 00F2           ;              i -> R20
 00F2           ;           data -> R22
                        .even
 00F2           _at4541_write::
 00F2 0E940000          xcall push_gset2
 00F6 602F              mov R22,R16
 00F8                   .dbline -1
 00F8                   .dbline 123
 00F8           ; }
 00F8           ; 
 00F8           ; /**************************************
 00F8           ; ** 说明:写at45db41
 00F8           ; ** 数据:在执行at4541_commond_send(发送写命令)之后,8位的数写入
 00F8           ; ** 输出:写入的一位数
 00F8           ; **************************************/
 00F8           ; void at4541_write(unsigned char data)
 00F8           ; {
 00F8                   .dbline 124
 00F8           ;  unsigned char i=0;
 00F8 4427              clr R20
 00FA                   .dbline 126
 00FA           ;  //生成写入时序
 00FA           ;  for(i=0;i<8;i++)
 00FA 0DC0              xjmp L33
 00FC           L30:
 00FC                   .dbline 127
 00FC           ;  {
 00FC                   .dbline 128
 00FC           ;   SCK_LOW();
 00FC DA98              cbi 0x1b,2
 00FE                   .dbline 129
 00FE           ;   if(data&0x80==0x80)
 00FE 60FF              sbrs R22,0
 0100 02C0              rjmp L34
 0102                   .dbline 130
 0102           ;    SI_HIGH();
 0102 DB9A              sbi 0x1b,3
 0104 01C0              xjmp L35
 0106           L34:
 0106                   .dbline 132
 0106           ;   else
 0106           ;    SI_LOW();
 0106 DB98              cbi 0x1b,3
 0108           L35:
 0108                   .dbline 133
 0108 0E940000          xcall _delay_1ms
 010C                   .dbline 134
 010C DA9A              sbi 0x1b,2
 010E                   .dbline 135
 010E 0E940000          xcall _delay_1ms
 0112                   .dbline 136
 0112 660F              lsl R22
 0114                   .dbline 137
 0114           L31:
 0114                   .dbline 126
 0114 4395              inc R20
 0116           L33:
 0116                   .dbline 126
 0116 4830              cpi R20,8
 0118 88F3              brlo L30
 011A                   .dbline -2
 011A           L29:
 011A 0E940000          xcall pop_gset2
 011E                   .dbline 0 ; func end
 011E 0895              ret
 0120                   .dbsym r i 20 c
 0120                   .dbsym r data 22 c
 0120                   .dbend
 0120                   .dbfunc e at4541_read_status _at4541_read_status fc
 0120           ;          temp1 -> R20
 0120           ;          temp2 -> R22
 0120           ;              i -> R10
 0120           ;        commond -> R12
                        .even
 0120           _at4541_read_status::
 0120 0E940000          xcall push_gset4
 0124 C02E              mov R12,R16
 0126                   .dbline -1
 0126                   .dbline 146
 0126           ;   delay_1ms();
 0126           ;   SCK_HIGH();
 0126           ;   delay_1ms();
 0126           ;   data=data<<1;
 0126           ;  }
 0126           ; }
 0126           ; 
 0126           ; /**************************************
 0126           ; ** 说明:读取寄存器状态
 0126           ; ** 操作流程:将57H或D7H操作代码传给at45db041 
 0126           ; ** 随后芯片从SO输出8位寄存器信息,高位在前
 0126           ; **************************************/
 0126           ; unsigned char at4541_read_status(unsigned char commond)
 0126           ; {
 0126                   .dbline 147
 0126           ;  unsigned char i=0,temp1=0,temp2=0;
 0126 AA24              clr R10
 0128                   .dbline 147
 0128 4427              clr R20
 012A                   .dbline 147
 012A 6627              clr R22
 012C                   .dbline 148
 012C           ;  SCK_HIGH();
 012C DA9A              sbi 0x1b,2
 012E                   .dbline 149
 012E           ;  RESET_HIGH();
 012E D89A              sbi 0x1b,0
 0130                   .dbline 150
 0130           ;  CS_HIGH();
 0130 D99A              sbi 0x1b,1
 0132                   .dbline 151
 0132           ;  delay_1ms();
 0132 0E940000          xcall _delay_1ms
 0136                   .dbline 152
 0136           ;  CS_LOW();
 0136 D998              cbi 0x1b,1
 0138                   .dbline 153
 0138           ;  delay_1ms();
 0138 0E940000          xcall _delay_1ms
 013C                   .dbline 155
 013C           ;  //本循环把8位command传给at45db041
 013C           ;  for(i=0;i<8;i++)
 013C 0FC0              xjmp L40
 013E           L37:
 013E                   .dbline 156
 013E           ;  {
 013E                   .dbline 157
 013E           ;   SCK_LOW();
 013E DA98              cbi 0x1b,2
 0140                   .dbline 158
 0140           ;   if((commond&0x80)==0x80)
 0140 8C2D              mov R24,R12
 0142 8078              andi R24,128
 0144 8038              cpi R24,128
 0146 11F4              brne L41
 0148                   .dbline 159
 0148           ;     SI_HIGH();
 0148 DB9A              sbi 0x1b,3
 014A 01C0              xjmp L42
 014C           L41:
 014C                   .dbline 161
 014C           ;   else 
 014C           ;     SI_LOW();
 014C DB98              cbi 0x1b,3
 014E           L42:
 014E                   .dbline 162
 014E 0E940000          xcall _delay_1ms
 0152                   .dbline 163
 0152 DA9A              sbi 0x1b,2
 0154                   .dbline 164
 0154 0E940000          xcall _delay_1ms
 0158                   .dbline 165
 0158 CC0C              lsl R12
 015A                   .dbline 166
 015A           L38:
 015A                   .dbline 155
 015A A394              inc R10
 015C           L40:
 015C                   .dbline 155
 015C 8A2D              mov R24,R10
 015E 8830              cpi R24,8
 0160 70F3              brlo L37
 0162                   .dbline 168
 0162           ;   delay_1ms();
 0162           ;   SCK_HIGH();
 0162           ;   delay_1ms();
 0162           ;   commond=commond<<1;
 0162           ;  }
 0162           ;  //本循环接收传回的八位数据
 0162           ;  for(i=0;i<8;i++)
 0162 AA24              clr R10
 0164 14C0              xjmp L46
 0166           L43:
 0166                   .dbline 169
 0166           ;  {
 0166                   .dbline 170
 0166           ;   SCK_LOW();
 0166 DA98              cbi 0x1b,2
 0168                   .dbline 171
 0168           ;   delay_1ms();
 0168 0E940000          xcall _delay_1ms
 016C                   .dbline 173
 016C           ;   
 016C           ;   if(SO_PIN_HIGH)
 016C 89B3              in R24,0x19
 016E 8071              andi R24,16
 0170 8031              cpi R24,16
 0172 11F4              brne L47
 0174                   .dbline 174
 0174           ;    temp1 = 1;
 0174 41E0              ldi R20,1
 0176 01C0              xjmp L48
 0178           L47:
 0178                   .dbline 176
 0178           ;   else
 0178           ;    temp1 = 0;
 0178 4427              clr R20
 017A           L48:
 017A                   .dbline 178
 017A 142F              mov R17,R20
 017C 1F5F              subi R17,255    ; addi 1
 017E 062F              mov R16,R22
 0180 0E940000          xcall lsl8
 0184 602F              mov R22,R16
 0186                   .dbline 179
 0186 DA9A              sbi 0x1b,2
 0188                   .dbline 180
 0188 0E940000          xcall _delay_1ms
 018C                   .dbline 181
 018C           L44:
 018C                   .dbline 168
 018C A394              inc R10
 018E           L46:
 018E                   .dbline 168
 018E 8A2D              mov R24,R10
 0190 8830              cpi R24,8
 0192 48F3              brlo L43
 0194                   .dbline 182
 0194           ;   
 0194           ;   temp2 = temp2<<1 + temp1;
 0194           ;   SCK_HIGH();
 0194           ;   delay_1ms();
 0194           ;  }
 0194           ;  CS_HIGH(); //停止输出
 0194 D99A              sbi 0x1b,1
 0196                   .dbline 184
 0196           ;  
 0196           ;  delay_ms(500);
 0196 04EF              ldi R16,500
 0198 11E0              ldi R17,1
 019A 0E940000          xcall _delay_ms
 019E                   .dbline 186
 019E           ;  
 019E           ;  return temp2;
 019E 062F              mov R16,R22
 01A0                   .dbline -2
 01A0           L36:
 01A0 0E940000          xcall pop_gset4
 01A4                   .dbline 0 ; func end
 01A4 0895              ret
 01A6                   .dbsym r temp1 20 c
 01A6                   .dbsym r temp2 22 c
 01A6                   .dbsym r i 10 c
 01A6                   .dbsym r commond 12 c
 01A6                   .dbend
 01A6                   .dbfunc e at4541_stop _at4541_stop fV
                        .even
 01A6           _at4541_stop::
 01A6                   .dbline -1
 01A6                   .dbline 194
 01A6           ; }
 01A6           ; 
 01A6           ; /**************************************
 01A6           ; ** 说明:CS=1 停止at45db041
 01A6           ; **
 01A6           ; **************************************/
 01A6           ; void at4541_stop(void)
 01A6           ; {
 01A6                   .dbline 195
 01A6           ;   CS_HIGH();
 01A6 D99A              sbi 0x1b,1
 01A8                   .dbline 196
 01A8           ;   delay_ms(500);
 01A8 04EF              ldi R16,500
 01AA 11E0              ldi R17,1
 01AC 0E940000          xcall _delay_ms
 01B0                   .dbline -2
 01B0           L49:
 01B0                   .dbline 0 ; func end
 01B0 0895              ret
 01B2                   .dbend

⌨️ 快捷键说明

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