- 在淘宝上买的北京博通电子的sd卡读写模块SDV7O5M,给的测试程序只能建立一个txt文件,但是文件是空的。/************************************************************************************/
- /* 程序名:51单片机的串口---SDV700模块测试程序 */
- /* */
- /* 晶振:22.1184 M 波特率115200 CPU型号:STC89C52 */
- /* */
- /* */
- /* 功能描述:单片机上电后,向SD卡得mydata.txt文件内不断写入数据 */
- /* */
- /* */
- /* */
- /* 北京博通电子 版权所有 */
- /* */
- /* 2009-08-20 */
- /************************************************************************************/
- #include <reg51.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit P1_0 = P1 ^ 0;//busy忙标志管脚
- sbit P1_1 = P1 ^ 1;//SD模块电源
- sbit P1_5 = P1 ^ 5;//测试板信号指示(指示发送数据)
- uchar date_temp[50]={0};//获取系统状态
- code uchar top[]={"单位:北京博通电子 SDV700"};//获取系统状态
- code uchar item[]={" 年-月-日 时:分 载荷记录(kN) 工作状态"};//获取系统状态
- uchar D_date[]={" 09-08-07 12:55 878 正常"};//定义数据格式
- void Send_UART(unsigned int num/*字节数*/,unsigned char *Date_OUT/*数据数组*/);
- unsigned char a;
- /***********************************************************************************************/
- void Delay(unsigned char a)
- {
- unsigned char i;
- while( --a != 0)
- {
- for(i = 0; i < 4; i++);
- }
- }
- /***********************************************************************************************/
- void main (void)
- {
- unsigned long tt=0;
- //Timer0Init();
- P1_1 = 1;//给SD卡模块上电
- SCON = 0x50; //0101,0000 串口方式1,允许接收,无奇偶校验位
- TMOD = 0x20; //0010,0000 时器1,定时方式2 自动重装装计数器
- PCON = 0x80; //SMOD=1
- TL1 = 0xff;
- TH1 = 0xff;
- TR1 = 1;
- P1_0 = 1;
- Delay(4000);
- //写标题
- while(P1_0);
- memcpy(date_temp,top,25);
- Send_UART(25,date_temp);
- //写条目
- while(P1_0);
- memcpy(date_temp,item,45);
- Send_UART(45,date_temp);
-
- while(1)
- {
- //连续写入数据
- while(P1_0);
- tt++;
- D_date[21] = tt/100000000+'0';
- D_date[22] = ((tt%100000000)/10000000)+'0';
- D_date[23] = (((tt%100000000)%10000000)/1000000)+'0';
- D_date[24] = ((((tt%100000000)%10000000)%1000000)/100000)+'0';
- D_date[25] = (((((tt%100000000)%10000000)%1000000)%100000)/10000)+'0';
- D_date[26] = ((((((tt%100000000)%10000000)%1000000)%100000)%10000)/1000)+'0';
- D_date[27] = (((((((tt%100000000)%10000000)%1000000)%100000)%10000)%1000)/100)+'0';
- D_date[28] = ((((((((tt%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)/10)+'0';
- D_date[29] = ((((((((tt%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)%10)+'0';
- memcpy(date_temp,D_date,43);
- Send_UART(43,date_temp);
- Delay(1);
- }
- }
- void Send_UART(unsigned int num/*字节数*/,unsigned char *Date_OUT/*数据数组*/)
- {
- unsigned int i=0;
- P1_5 = 0;//点亮测试板指示灯
- while(i<num)
- {
- TI = 0; //清零串口发送完成中断请求标志
- SBUF = Date_OUT[i]; //date[i]
- while(TI ==0); //等待发送完成
- TI = 0; //清零串口发送完成中断请求标志
- i++;
- }
- //WINDOWS里的是 13 + 10(ASCII码值)作为换行
- //-----------------------------------------------发送换行符0x0D
- SBUF = 0x0d;
- while(TI ==0); //等待发送完成
- TI = 0; //清零串口发送完成中断请求标志
- //-----------------------------------------------发送换行符0x0a
- SBUF = 0x0a;
- while(TI ==0); //等待发送完成
- TI = 0; //清零串口发送完成中断请求标志
- P1_5 = 1;//熄灭测试板指示灯
- }
复制代码 |