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

📄 spi.lst

📁 spi的i/o茉莉程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0273 2711      CLR	R17
    0274 DE2D      RCALL	_Send_abyte
(0161) Send_abyte(table[address0/16]);
    0275 E120      LDI	R18,0x10
    0276 E030      LDI	R19,0
    0277 2F06      MOV	R16,R22
    0278 2711      CLR	R17
    0279 D0AE      RCALL	div16s
    027A 01F8      MOVW	R30,R16
    027B ED86      LDI	R24,0xD6
    027C E090      LDI	R25,0
    027D 0FE8      ADD	R30,R24
    027E 1FF9      ADC	R31,R25
    027F 8100      LDD	R16,Z+0
    0280 2711      CLR	R17
    0281 DE20      RCALL	_Send_abyte
(0162) Send_abyte(table[address0%16]);
    0282 E120      LDI	R18,0x10
    0283 E030      LDI	R19,0
    0284 2F06      MOV	R16,R22
    0285 2711      CLR	R17
    0286 D09D      RCALL	mod16s
    0287 01F8      MOVW	R30,R16
    0288 ED86      LDI	R24,0xD6
    0289 E090      LDI	R25,0
    028A 0FE8      ADD	R30,R24
    028B 1FF9      ADC	R31,R25
    028C 8100      LDD	R16,Z+0
    028D 2711      CLR	R17
    028E DE13      RCALL	_Send_abyte
(0163) Prints(" completed...",1);
    028F E021      LDI	R18,1
    0290 E030      LDI	R19,0
    0291 EB0A      LDI	R16,0xBA
    0292 E010      LDI	R17,0
    0293 DE16      RCALL	_Prints
    0294 D0CE      RCALL	pop_gset5
    0295 9624      ADIW	R28,4
    0296 9508      RET
_Read_string:
  address0             --> R10
  address1             --> R12
  address2             --> Y+0
  i                    --> R14
  n                    --> Y+15
  address              --> Y+11
    0297 D087      RCALL	push_arg4
    0298 D0CC      RCALL	push_gset5
    0299 9721      SBIW	R28,1
(0164) }
(0165) /**************************************************************
(0166) 读入一串字节。
(0167) ****************************************************************/
(0168) void Read_string(uint32 address,uint32 n)
(0169) {
(0170) uint8 i;
(0171) uint8 address2,address1,address0;
(0172) address2=(uint8)(address>>16);
    029A 01FE      MOVW	R30,R28
    029B 8423      LDD	R2,Z+11
    029C 8434      LDD	R3,Z+12
    029D 8445      LDD	R4,Z+13
    029E 8456      LDD	R5,Z+14
    029F 0112      MOVW	R2,R4
    02A0 2444      CLR	R4
    02A1 2455      CLR	R5
    02A2 8228      STD	Y+0,R2
(0173) address1=(uint8)(address>>8);
    02A3 E088      LDI	R24,0x8
    02A4 E090      LDI	R25,0
    02A5 01FE      MOVW	R30,R28
    02A6 8423      LDD	R2,Z+11
    02A7 8434      LDD	R3,Z+12
    02A8 8445      LDD	R4,Z+13
    02A9 8456      LDD	R5,Z+14
    02AA 938A      ST	R24,-Y
    02AB 0181      MOVW	R16,R2
    02AC 0192      MOVW	R18,R4
    02AD D0D6      RCALL	lsr32
    02AE 2EC0      MOV	R12,R16
(0174) address0=(uint8)address;
    02AF 01FE      MOVW	R30,R28
    02B0 8423      LDD	R2,Z+11
    02B1 8434      LDD	R3,Z+12
    02B2 8445      LDD	R4,Z+13
    02B3 8456      LDD	R5,Z+14
    02B4 2CA2      MOV	R10,R2
(0175) while((Read_RDSR())&0x01);
    02B5 DF42      RCALL	_Read_RDSR
    02B6 FD00      SBRC	R16,0
    02B7 CFFD      RJMP	0x02B5
(0176) WriteEN();
    02B8 DE6E      RCALL	_WriteEN
(0177) CS_0;
    02B9 98C2      CBI	0x18,2
(0178) Spi_MT(0x03);
    02BA E003      LDI	R16,3
    02BB DDD3      RCALL	_Spi_MT
(0179) Spi_MT(address2);
    02BC 8108      LDD	R16,Y+0
    02BD DDD1      RCALL	_Spi_MT
(0180) Spi_MT(address1);
    02BE 2D0C      MOV	R16,R12
    02BF DDCF      RCALL	_Spi_MT
(0181) Spi_MT(address0);
    02C0 2D0A      MOV	R16,R10
    02C1 DDCD      RCALL	_Spi_MT
(0182) for(i=0;i<n;i++)
    02C2 24EE      CLR	R14
    02C3 C009      RJMP	0x02CD
(0183) {
(0184) read_string[i]=Spi_MR();
    02C4 DDCE      RCALL	_Spi_MR
    02C5 E680      LDI	R24,0x60
    02C6 E090      LDI	R25,0
    02C7 2DEE      MOV	R30,R14
    02C8 27FF      CLR	R31
    02C9 0FE8      ADD	R30,R24
    02CA 1FF9      ADC	R31,R25
    02CB 8300      STD	Z+0,R16
    02CC 94E3      INC	R14
    02CD 01FE      MOVW	R30,R28
    02CE 8427      LDD	R2,Z+15
    02CF 8830      LDD	R3,Z+16
    02D0 8841      LDD	R4,Z+17
    02D1 8852      LDD	R5,Z+18
    02D2 2C6E      MOV	R6,R14
    02D3 2477      CLR	R7
    02D4 2488      CLR	R8
    02D5 2499      CLR	R9
    02D6 1462      CP	R6,R2
    02D7 0473      CPC	R7,R3
    02D8 0484      CPC	R8,R4
    02D9 0495      CPC	R9,R5
    02DA F348      BCS	0x02C4
(0185) }
(0186) CS_1;
    02DB 9AC2      SBI	0x18,2
    02DC 9621      ADIW	R28,1
    02DD D085      RCALL	pop_gset5
    02DE 9624      ADIW	R28,4
    02DF 9508      RET
(0187) }
(0188) /**************************************************************
(0189) 写保护
(0190) ****************************************************************/
(0191) void Write_Protect()
(0192) {
(0193) while((Read_RDSR())&0x01);
_Write_Protect:
    02E0 DF17      RCALL	_Read_RDSR
    02E1 FD00      SBRC	R16,0
    02E2 CFFD      RJMP	_Write_Protect
(0194) WriteEN();
    02E3 DE43      RCALL	_WriteEN
(0195) CS_0;
    02E4 98C2      CBI	0x18,2
(0196) Spi_MT(0x02);
    02E5 E002      LDI	R16,2
    02E6 DDA8      RCALL	_Spi_MT
(0197) Spi_MT(0X9C);
    02E7 E90C      LDI	R16,0x9C
    02E8 DDA6      RCALL	_Spi_MT
(0198) CS_1;
    02E9 9AC2      SBI	0x18,2
(0199) Prints("Chip Write Protect...",1);
    02EA E021      LDI	R18,1
    02EB E030      LDI	R19,0
    02EC E703      LDI	R16,0x73
    02ED E010      LDI	R17,0
    02EE DDBB      RCALL	_Prints
    02EF 9508      RET
_main:
  j                    --> Y+5
  i                    --> Y+5
    02F0 9724      SBIW	R28,4
FILE: E:\ICC\SPI\main.c
(0001) #include <iom8v.h>
(0002) #include "mytype.h"
(0003) #include "flash.h"
(0004) #include "uart.h"
(0005) #include "spi.h"
(0006) 
(0007) 
(0008) uint8 table[16]="0123456789abcdef";
(0009) extern uint8 read_string[];
(0010) 
(0011) 
(0012) void main(void)
(0013) {
(0014) uint8 i,j;
(0015) WP_1;
    02F1 9AC1      SBI	0x18,1
(0016) Spi_init();//SPI初始化。
    02F2 DD96      RCALL	_Spi_init
(0017) Uart_init();//串口初始化。
    02F3 DDA5      RCALL	_Uart_init
(0018) Prints("System starting...",1);
    02F4 E021      LDI	R18,1
    02F5 E030      LDI	R19,0
    02F6 EF09      LDI	R16,0xF9
    02F7 E010      LDI	R17,0
    02F8 DDB1      RCALL	_Prints
(0019) 
(0020) Sector_Erase(0x000005);//擦除第一段。
    02F9 E005      LDI	R16,5
    02FA E010      LDI	R17,0
    02FB E020      LDI	R18,0
    02FC E030      LDI	R19,0
    02FD DE33      RCALL	_Sector_Erase
(0021) Write_string("Hello,I'm a flash!",0x000001,19);//写入一段字符串。
    02FE E183      LDI	R24,0x13
    02FF 838A      STD	Y+2,R24
    0300 E041      LDI	R20,1
    0301 E050      LDI	R21,0
    0302 E060      LDI	R22,0
    0303 E070      LDI	R23,0
    0304 8368      STD	Y+0,R22
    0305 8379      STD	Y+1,R23
    0306 019A      MOVW	R18,R20
    0307 EE06      LDI	R16,0xE6
    0308 E010      LDI	R17,0
    0309 DEF7      RCALL	_Write_string
(0022) Read_string(0x000001,18);//读取地址0x000001开始的18个字节。
    030A E142      LDI	R20,0x12
    030B E050      LDI	R21,0
    030C E060      LDI	R22,0
    030D E070      LDI	R23,0
    030E 8348      STD	Y+0,R20
    030F 8359      STD	Y+1,R21
    0310 836A      STD	Y+2,R22
    0311 837B      STD	Y+3,R23
    0312 E001      LDI	R16,1
    0313 E010      LDI	R17,0
    0314 E020      LDI	R18,0
    0315 E030      LDI	R19,0
    0316 DF80      RCALL	_Read_string
(0023) Prints(read_string,1);//读取数据发送到串口。
    0317 E021      LDI	R18,1
    0318 E030      LDI	R19,0
    0319 E600      LDI	R16,0x60
    031A E010      LDI	R17,0
    031B DD8E      RCALL	_Prints
(0024) while(1);
FILE: <library>
    031C CFFF      RJMP	0x031C
    031D 9624      ADIW	R28,4
    031E 9508      RET
push_arg4:
    031F 933A      ST	R19,-Y
    0320 932A      ST	R18,-Y
push_arg2:
    0321 931A      ST	R17,-Y
    0322 930A      ST	R16,-Y
    0323 9508      RET
mod16s:
    0324 9468      BSET	6
    0325 92DA      ST	R13,-Y
    0326 2ED1      MOV	R13,R17
    0327 C004      RJMP	0x032C
div16s:
    0328 94E8      BCLR	6
    0329 92DA      ST	R13,-Y
    032A 2ED1      MOV	R13,R17
    032B 26D3      EOR	R13,R19
    032C FF17      SBRS	R17,7
    032D C004      RJMP	0x0332
    032E 9510      COM	R17
    032F 9500      COM	R16
    0330 5F0F      SUBI	R16,0xFF
    0331 4F1F      SBCI	R17,0xFF
    0332 FF37      SBRS	R19,7
    0333 C004      RJMP	0x0338
    0334 9530      COM	R19
    0335 9520      COM	R18
    0336 5F2F      SUBI	R18,0xFF
    0337 4F3F      SBCI	R19,0xFF
    0338 D00B      RCALL	xdiv16u
    0339 FED7      SBRS	R13,7
    033A C004      RJMP	0x033F
    033B 9510      COM	R17
    033C 9500      COM	R16
    033D 5F0F      SUBI	R16,0xFF
    033E 4F1F      SBCI	R17,0xFF
    033F 90D9      LD	R13,Y+
    0340 9508      RET
mod16u:
    0341 9468      BSET	6
    0342 C001      RJMP	xdiv16u
div16u:
    0343 94E8      BCLR	6
xdiv16u:
    0344 92EA      ST	R14,-Y
    0345 92FA      ST	R15,-Y
    0346 938A      ST	R24,-Y
    0347 24EE      CLR	R14
    0348 24FF      CLR	R15
    0349 E180      LDI	R24,0x10
    034A 0F00      LSL	R16
    034B 1F11      ROL	R17
    034C 1CEE      ROL	R14
    034D 1CFF      ROL	R15
    034E 16E2      CP	R14,R18
    034F 06F3      CPC	R15,R19
    0350 F018      BCS	0x0354
    0351 1AE2      SUB	R14,R18
    0352 0AF3      SBC	R15,R19
    0353 9503      INC	R16
    0354 958A      DEC	R24
    0355 F7A1      BNE	0x034A
    0356 F416      BRTC	0x0359
    0357 2D0E      MOV	R16,R14
    0358 2D1F      MOV	R17,R15
    0359 9189      LD	R24,Y+
    035A 90F9      LD	R15,Y+
    035B 90E9      LD	R14,Y+
    035C 9508      RET
pop_gset2:
    035D E0E2      LDI	R30,2
    035E C012      RJMP	pop
pop_gset3:
    035F E0E4      LDI	R30,4
    0360 C010      RJMP	pop
pop_gset4:
    0361 E0E8      LDI	R30,0x8
    0362 C00E      RJMP	pop
pop_gset5:
    0363 27EE      CLR	R30
    0364 C00C      RJMP	pop
push_gset5:
    0365 92FA      ST	R15,-Y
    0366 92EA      ST	R14,-Y
push_gset4:
    0367 92DA      ST	R13,-Y
    0368 92CA      ST	R12,-Y
push_gset3:
    0369 92BA      ST	R11,-Y
    036A 92AA      ST	R10,-Y
push_gset2:
    036B 937A      ST	R23,-Y
    036C 936A      ST	R22,-Y
push_gset1:
    036D 935A      ST	R21,-Y
    036E 934A      ST	R20,-Y
    036F 9508      RET
pop_gset1:
    0370 E0E1      LDI	R30,1
pop:
    0371 9149      LD	R20,Y+
    0372 9159      LD	R21,Y+
    0373 FDE0      SBRC	R30,0
    0374 9508      RET
    0375 9169      LD	R22,Y+
    0376 9179      LD	R23,Y+
    0377 FDE1      SBRC	R30,1
    0378 9508      RET
    0379 90A9      LD	R10,Y+
    037A 90B9      LD	R11,Y+
    037B FDE2      SBRC	R30,2
    037C 9508      RET
    037D 90C9      LD	R12,Y+
    037E 90D9      LD	R13,Y+
    037F FDE3      SBRC	R30,3
    0380 9508      RET
    0381 90E9      LD	R14,Y+
    0382 90F9      LD	R15,Y+
    0383 9508      RET
lsr32:
    0384 920F      PUSH	R0
    0385 9009      LD	R0,Y+
    0386 2000      TST	R0
    0387 F031      BEQ	0x038E
    0388 9536      LSR	R19
    0389 9527      ROR	R18
    038A 9517      ROR	R17
    038B 9507      ROR	R16
    038C 940A      DEC	R0
    038D CFF8      RJMP	0x0386
    038E 900F      POP	R0
    038F 9508      RET

⌨️ 快捷键说明

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