- 在淘寶上買的北京博通電子的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;//熄滅測試板指示燈
- }
復制代碼 |