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

📄 sd.lis

📁 LED条屏显示程序,但是对初学者
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module SD.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\SD.c
 0000                   .dbfunc e Read_Byte_SD _Read_Byte_SD fc
                        .even
 0000           _Read_Byte_SD::
 0000                   .dbline -1
 0000                   .dbline 13
 0000           ; //ICC-AVR application builder : 2005-11-12 17:11:59
 0000           ; // Target : M16
 0000           ; // Crystal: 8.0000Mhz
 0000           ; // copyright:鲁军波(endylu)
 0000           ; // www.shop34612283.taobao.com
 0000           ; // www.adembed.com
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "main.h"
 0000           ; 
 0000           ; //=======================================================================
 0000           ; uint8 Read_Byte_SD(void) 
 0000           ; { 
 0000                   .dbline 15
 0000           ;  //char Byte; 
 0000           ;  SPDR=0xff; 
 0000 8FEF              ldi R24,255
 0002 8FB9              out 0xf,R24
 0004           L2:
 0004                   .dbline 16
 0004           L3:
 0004                   .dbline 16
 0004           ;  while(!(SPSR&(1<<SPIF)));
 0004 779B              sbis 0xe,7
 0006 FECF              rjmp L2
 0008                   .dbline 19
 0008           ;  
 0008           ;  //Byte=SPDR;
 0008           ;  return(SPDR); 
 0008 0FB1              in R16,0xf
 000A                   .dbline -2
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e Write_Byte_SD _Write_Byte_SD fV
 000C           ;           Byte -> R16
                        .even
 000C           _Write_Byte_SD::
 000C                   .dbline -1
 000C                   .dbline 24
 000C           ; }
 000C           ; 
 000C           ; //=======================================================================
 000C           ; void Write_Byte_SD(uint8 Byte) 
 000C           ; { 
 000C                   .dbline 25
 000C           ;  SPDR=Byte; 
 000C 0FB9              out 0xf,R16
 000E           L6:
 000E                   .dbline 26
 000E           L7:
 000E                   .dbline 26
 000E           ;  while(!(SPSR&(1<<SPIF)));
 000E 779B              sbis 0xe,7
 0010 FECF              rjmp L6
 0012                   .dbline -2
 0012           L5:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbsym r Byte 16 c
 0014                   .dbend
 0014                   .dbfunc e Write_Command_SD1 _Write_Command_SD1 fc
 0014           ;        Timeout -> R20
 0014           ;              a -> R22
 0014           ;            tmp -> R10
 0014           ;            CMD -> R12,R13
                        .even
 0014           _Write_Command_SD1::
 0014 0E940000          xcall push_gset4
 0018 6801              movw R12,R16
 001A                   .dbline -1
 001A                   .dbline 31
 001A           ; } 
 001A           ; 
 001A           ; //=======================================================================
 001A           ; uint8 Write_Command_SD1(uint8*CMD) 
 001A           ; { 
 001A                   .dbline 33
 001A           ;  uint8 a; 
 001A           ;  uint8 tmp=0xff; 
 001A 8FEF              ldi R24,255
 001C A82E              mov R10,R24
 001E                   .dbline 34
 001E           ;  uint8 Timeout=0; 
 001E 4427              clr R20
 0020                   .dbline 37
 0020           ; 
 0020           ;  // Raise chip select 
 0020           ;  SD_Disable(); 
 0020 C49A              sbi 0x18,4
 0022                   .dbline 37
 0022                   .dbline 40
 0022           ; 
 0022           ;  // Send an 8 bit pulse 
 0022           ;  Write_Byte_SD(0xFF); 
 0022 0FEF              ldi R16,255
 0024 F3DF              xcall _Write_Byte_SD
 0026                   .dbline 43
 0026           ;  
 0026           ;  // Lower chip select 
 0026           ;  SD_Enable(); 
 0026 C498              cbi 0x18,4
 0028                   .dbline 43
 0028                   .dbline 46
 0028           ; 
 0028           ;  //Send the 6 byte command 
 0028           ;  for(a=0;a<0x06;a++) 
 0028 6627              clr R22
 002A 05C0              xjmp L13
 002C           L10:
 002C                   .dbline 47
 002C                   .dbline 48
 002C F601              movw R30,R12
 002E 0191              ld R16,Z+
 0030 6F01              movw R12,R30
 0032 ECDF              xcall _Write_Byte_SD
 0034                   .dbline 49
 0034           L11:
 0034                   .dbline 46
 0034 6395              inc R22
 0036           L13:
 0036                   .dbline 46
 0036 6630              cpi R22,6
 0038 C8F3              brlo L10
 003A 09C0              xjmp L15
 003C           L14:
 003C                   .dbline 53
 003C           ;     {
 003C           ;      Write_Byte_SD(*CMD++); 
 003C           ;     } 
 003C           ; 
 003C           ;  //Wait for the response 
 003C           ;  while(tmp==0xff)
 003C           ;       {
 003C                   .dbline 54
 003C           ;        tmp=Read_Byte_SD(); 
 003C E1DF              xcall _Read_Byte_SD
 003E A02E              mov R10,R16
 0040                   .dbline 55
 0040           ;        if(Timeout++>100) 
 0040 242E              mov R2,R20
 0042 3324              clr R3
 0044 4F5F              subi R20,255    ; addi 1
 0046 84E6              ldi R24,100
 0048 8215              cp R24,R2
 004A 08F4              brsh L17
 004C                   .dbline 56
 004C           ;          { 
 004C                   .dbline 57
 004C           ;           break; 
 004C 03C0              xjmp L16
 004E           L17:
 004E                   .dbline 59
 004E           L15:
 004E                   .dbline 52
 004E 8A2D              mov R24,R10
 0050 8F3F              cpi R24,255
 0052 A1F3              breq L14
 0054           L16:
 0054                   .dbline 62
 0054           ;          } 
 0054           ;       } 
 0054           ;  //SD_Disable(); 
 0054           ;  //for some reason we need to delay  10here 
 0054           ;  return(tmp); 
 0054 0A2D              mov R16,R10
 0056                   .dbline -2
 0056           L9:
 0056 0E940000          xcall pop_gset4
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r Timeout 20 c
 005C                   .dbsym r a 22 c
 005C                   .dbsym r tmp 10 c
 005C                   .dbsym r CMD 12 pc
 005C                   .dbend
 005C                   .dbfunc e Write_Command_SD _Write_Command_SD fc
 005C           ;        Timeout -> R20
 005C           ;            tmp -> R22
 005C           ;        address -> y+8
 005C           ;            CMD -> R22
                        .even
 005C           _Write_Command_SD::
 005C 3A93              st -y,r19
 005E 2A93              st -y,r18
 0060 0E940000          xcall push_gset4
 0064 602F              mov R22,R16
 0066                   .dbline -1
 0066                   .dbline 67
 0066           ; }
 0066           ; 
 0066           ; //=======================================================================
 0066           ; uint8 Write_Command_SD(uint8 CMD,uint32 address) 
 0066           ; { 
 0066                   .dbline 70
 0066           ;  
 0066           ;  uint8 tmp; 
 0066           ;  uint8 Timeout=0; 
 0066 4427              clr R20
 0068                   .dbline 73
 0068           ;  
 0068           ;  // Raise chip select 
 0068           ;  SD_Disable(); 
 0068 C49A              sbi 0x18,4
 006A                   .dbline 73
 006A                   .dbline 76
 006A           ; 
 006A           ;  // Send an 8 bit pulse 
 006A           ;  Write_Byte_SD(0xFF); 
 006A 0FEF              ldi R16,255
 006C CFDF              xcall _Write_Byte_SD
 006E                   .dbline 79
 006E           ;  
 006E           ;  // Lower chip select 
 006E           ;  SD_Enable(); 
 006E C498              cbi 0x18,4
 0070                   .dbline 79
 0070                   .dbline 81
 0070           ;  //Send the 6 byte command  
 0070           ;   Write_Byte_SD(CMD);
 0070 062F              mov R16,R22
 0072 CCDF              xcall _Write_Byte_SD
 0074                   .dbline 82
 0074           ;   Write_Byte_SD(address>>24);
 0074 88E1              ldi R24,24
 0076 90E0              ldi R25,0
 0078 FE01              movw R30,R28
 007A 2084              ldd R2,z+8
 007C 3184              ldd R3,z+9
 007E 4284              ldd R4,z+10
 0080 5384              ldd R5,z+11
 0082 8A93              st -y,R24
 0084 8101              movw R16,R2
 0086 9201              movw R18,R4
 0088 0E940000          xcall lsr32
 008C BFDF              xcall _Write_Byte_SD
 008E                   .dbline 83
 008E           ;   Write_Byte_SD(address>>16);
 008E FE01              movw R30,R28
 0090 2084              ldd R2,z+8
 0092 3184              ldd R3,z+9
 0094 4284              ldd R4,z+10
 0096 5384              ldd R5,z+11
 0098 1201              movw R2,R4
 009A 4424              clr R4
 009C 5524              clr R5
 009E 022D              mov R16,R2
 00A0 B5DF              xcall _Write_Byte_SD
 00A2                   .dbline 84
 00A2           ;   Write_Byte_SD(address>>8);
 00A2 88E0              ldi R24,8
 00A4 90E0              ldi R25,0
 00A6 FE01              movw R30,R28
 00A8 2084              ldd R2,z+8
 00AA 3184              ldd R3,z+9
 00AC 4284              ldd R4,z+10
 00AE 5384              ldd R5,z+11
 00B0 8A93              st -y,R24
 00B2 8101              movw R16,R2
 00B4 9201              movw R18,R4
 00B6 0E940000          xcall lsr32
 00BA A8DF              xcall _Write_Byte_SD
 00BC                   .dbline 85
 00BC           ;   Write_Byte_SD(address);
 00BC FE01              movw R30,R28
 00BE 0085              ldd R16,z+8
 00C0 A5DF              xcall _Write_Byte_SD
 00C2                   .dbline 86
 00C2           ;   Write_Byte_SD(0xff);
 00C2 0FEF              ldi R16,255
 00C4 A3DF              xcall _Write_Byte_SD
 00C6                   .dbline 90
 00C6           ;   
 00C6           ; 
 00C6           ;  //Wait for the response 
 00C6           ;  tmp=Read_Byte_SD();
 00C6 9CDF              xcall _Read_Byte_SD
 00C8 602F              mov R22,R16
 00CA 02C0              xjmp L21
 00CC           L20:
 00CC                   .dbline 92
 00CC                   .dbline 93
 00CC 99DF              xcall _Read_Byte_SD
 00CE 602F              mov R22,R16
 00D0                   .dbline 94
 00D0           L21:
 00D0                   .dbline 91
 00D0           ;  while((tmp==0xff)&(Timeout++<8)) 
 00D0 6F3F              cpi R22,255
 00D2 21F4              brne L23
 00D4 81E0              ldi R24,1
 00D6 90E0              ldi R25,0
 00D8 6C01              movw R12,R24
 00DA 02C0              xjmp L24
 00DC           L23:
 00DC CC24              clr R12
 00DE DD24              clr R13
 00E0           L24:
 00E0 242E              mov R2,R20
 00E2 3324              clr R3
 00E4 4F5F              subi R20,255    ; addi 1
 00E6 822D              mov R24,R2
 00E8 8830              cpi R24,8
 00EA 20F4              brsh L25
 00EC 81E0              ldi R24,1
 00EE 90E0              ldi R25,0
 00F0 5C01              movw R10,R24
 00F2 02C0              xjmp L26
 00F4           L25:
 00F4 AA24              clr R10
 00F6 BB24              clr R11

⌨️ 快捷键说明

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