📄 readsd.lst
字号:
C51 COMPILER V8.08 READSD 12/26/2008 19:38:32 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE READSD
OBJECT MODULE PLACED IN readSD.OBJ
COMPILER INVOKED BY: C:\Keil C51\C51\BIN\C51.EXE readSD.c LARGE OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************
2 *引用头文件
3 ***********************************************************************/
4 #include <absacc.h>
5 #include <reg52.h>
6 #include <stdio.h>
7 #include <string.h>
8 #include "SDCARDREAD.h"
9 #include "spi.c"
10 #include "SD.c"
11
12
13 //初始化系统
14 void init_SYS(void)
15 {
16 1 TMOD=0x21; //设置波特率为57600定时器1方式和定时器0使用16位定时器
17 1 TL1=0xff; //设置波特率为
18 1 TH1=0xff;
19 1 SCON=0x50;//串口方式1,10位异步收发
20 1 PCON=0x80;//波特率倍增
21 1 //TR1=1;//打开定时器开始计时
22 1 AUXR&=0xbf;
23 1 //ES=1;
24 1 //设置定时器0计时,100MS溢出一次
25 1 TH0=0x4C;
26 1 TL0=0X00;
27 1 ET0=1; //开定时器0中断
28 1
29 1 TI=0;
30 1 RI=0;
31 1 //TBDATA=78; //78*200=15600≈8000000/512=15625=1秒
32 1 }
33
34 //=====================================================================
35 //串口接收数据
36 //=====================================================================
37 uchar UARTin(uchar *RecData,uchar longofRecData)
38 {
39 1 uchar i=0;
40 1 Timeout=0;
41 1 for(i=0;i<longofRecData;i++)
42 1 {
43 2 TR0=1; //开启超时计数
44 2 while(RI==0) //等待接收1字节数据
45 2 {
46 3 if(Timeout==1) //如果延时Delaytime未接收到数据退出循环
47 3 {
48 4 Timeout=0;
49 4 TR0=0;
50 4 return 0;
51 4 }
52 3 }
53 2 act=0; //如果接收到了则act归零,act用来记延时
54 2 TR0=0;
55 2 RI=0;
C51 COMPILER V8.08 READSD 12/26/2008 19:38:32 PAGE 2
56 2 *(RecData+i)=SBUF;
57 2 }
58 1 return 1;
59 1 }
60 //=====================================================================
61 //串口发送数据
62 //=====================================================================
63 void UARTout(uchar *sendData,uchar sendNum)
64 {
65 1 uchar i;
66 1 // while(TI==0); //正处于移发送忙
67 1 for(i=0;i<sendNum;i++)
68 1 {
69 2 SBUF= *(sendData++); //取字节到发送串口缓冲区
70 2 while(TI==0); //正处于移发送忙
71 2 //可以发送新数据
72 2 TI=0; //置发送忙标志,启动发送
73 2 }
74 1 }
75 /*****************************************************************************
76 *main主函数,看接收到的SD卡的厂商和序列号
77 *****************************************************************************/
78 void main()
79 {//$1
80 1 uchar i=0;
81 1 uchar Request[3]={0xbb,0xaa,0xcc};
82 1
83 1 init_SYS();
84 1 Timeout=0;
85 1 cou=0;
86 1 act=0;
87 1 for(i=0;i<5;i++)publicdata[i]=0; //初始化
88 1 EA=1; //开全局中断
89 1 //TR0=1; //启动TC0开始计时
90 1 TR1=1; //打开定时器1开始计时
91 1
92 1 while(1)
93 1 {//$4
94 2 UARTout(Request,3);
95 2 if(UARTin(Request,1)==1)
96 2 {
97 3 if (Request[0]=='X')
98 3 //读取SD卡信息
99 3 {
100 4 //* send command CMD0 to SD Card (reset SD Card)
101 4 /*Request[0]=SD_SendCmd2(0,0);
102 4 //* send command CMD1 to SD Card (set SD Card Model:SPI)
103 4 Request[1]=SD_SendCmd2(1,0);
104 4 UARTout(Request,3);*/
105 4
106 4 sd_init();
107 4 UARTout(publicdata,8);
108 4 }
109 3 }
110 2 }//$4
111 1
112 1 }//$1
113
114 //定时器0中断,50ms一次中断
115 void timer0(void)interrupt 1 using 1
116 {
117 1 if(cou++==20)
C51 COMPILER V8.08 READSD 12/26/2008 19:38:32 PAGE 3
118 1 {//每秒act+1
119 2 cou=0;
120 2 if(act++==DelayTime)
121 2 {
122 3 //BUSY_AT45=!BUSY_AT45;
123 3 act=0;
124 3 Timeout=1;
125 3 //UARTout(Request,3);
126 3 }
127 2 }
128 1 //计数器重新装载
129 1 TH0=0x4C;
130 1 TL0=0X00;
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 824 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = 104 29
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -