📄 sd.lst
字号:
C51 COMPILER V7.06 SD 11/12/2008 23:04:11 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SD
OBJECT MODULE PLACED IN sd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include "sd.h"
3 #include <stdio.h>
4 #include <intrins.h>
5 #include "D12_Define.h"
6
7 ///////全局变量///
8
9 //////////////////////////
10
11
12 void delay()
13 {
14 1 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
15 1
16 1 }
17 ///////////////////////////////硬件层函数/////////////////////
18 void Write_SD(uchar idata val) //写一个字节数据
19 {
20 1 uchar idata i;
21 1 for(i=0;i<8;i++)
22 1 {
23 2 SD_DataIn=0;
24 2 if(0x80==(val&0x80))
25 2 SD_DataIn=1;
26 2 SD_CLK=0;
27 2 delay();
28 2 SD_CLK=1;
29 2 val=val<<1;
30 2 }
31 1 SD_DataIn=1;
32 1 }
33
34 uchar Read_SD()
35 {
36 1 uchar idata R1=0,i;
37 1 for(i=0;i<8;i++)
38 1 {
39 2 SD_CLK=0;
40 2 R1=R1<<1;
41 2 R1=R1|SD_DataOut;
42 2 SD_CLK=1;
43 2 }
44 1 return R1;
45 1 }
46 ///////////////////////////////硬件层函数/////////////////////
47
48
49 //////////////////////////////D12_函数//////////////////////////
50 uchar Write_SD_COM(uchar idata com,unsigned long int idata arg) //写SD命令
51 {
52 1 uchar idata i;
53 1 //SD_DataOut=1;
54 1 SD_CS=0;
55 1 // while(!SD_DataOut); //总线忙 等待
C51 COMPILER V7.06 SD 11/12/2008 23:04:11 PAGE 2
56 1 Write_SD(0xff); //写八个时钟周期
57 1 Write_SD(com|0x40); //写命令字
58 1 Write_SD((uchar)(arg>>24)); //arg可能是扇区地址等
59 1 Write_SD((uchar)(arg>>16));
60 1 Write_SD((uchar)(arg>>8));
61 1 Write_SD((uchar)arg);
62 1 Write_SD(0x95); //此CRC是CMD0的CRC,之后可以写一个CMD59命令对SPI写命令都免除CRC位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -