PIC单片机 读/写 MMC/SD 卡的简单小程序

发布者:sky0001最新更新时间:2019-11-06 来源: 51hei关键字:PIC单片机  MMC 手机看文章 扫描二维码
随时随地手机看文章

这里介绍一个简单的PIC单片机 读/写 MMC/SD 卡的小程序

// MMC module connections

sbit Mmc_Chip_Select           at LATC0_bit;  // for writing to output pin always use latch (PIC18 family)

sbit Mmc_Chip_Select_Direction at TRISC0_bit;

// eof MMC module connections


const LINE_LEN = 43;

char err_txt[20]       = "FAT16 not found";

char file_contents[LINE_LEN] = "XX MMC/SD FAT16 library by Anton Rieckertn";

char           filename[14] = "MIKRO00x.TXT";          // File names

unsigned short loop, loop2;

unsigned long  i, size;

char           Buffer[512];


// UART1 write text and new line (carriage return + line feed)

void UART1_Write_Line(char *uart_text) {

  UART1_Write_Text(uart_text);

  UART1_Write(13);

  UART1_Write(10);

}


// Creates new file and writes some data to it

void M_Create_New_File() {

  filename[7] = 'A';

  Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 0, 0); // Set file date & time info

  Mmc_Fat_Assign(&filename, 0xA0);          // Find existing file or create a new one

  Mmc_Fat_Rewrite();                        // To clear file and start with new data

  for(loop = 1; loop <= 99; loop++) {

    UART1_Write('.');

    file_contents[0] = loop / 10 + 48;

    file_contents[1] = loop % 10 + 48;

    Mmc_Fat_Write(file_contents, LINE_LEN-1);   // write data to the assigned file

  }

}


// Creates many new files and writes data to them

void M_Create_Multiple_Files() {

  for(loop2 = 'B'; loop2 <= 'Z'; loop2++) {

    UART1_Write(loop2);                  // signal the progress

    filename[7] = loop2;                 // set filename

    Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 0, 0); // Set file date & time info

    Mmc_Fat_Assign(&filename, 0xA0);     // find existing file or create a new one

    Mmc_Fat_Rewrite();                   // To clear file and start with new data

    for(loop = 1; loop <= 44; loop++) {

      file_contents[0] = loop / 10 + 48;

      file_contents[1] = loop % 10 + 48;

      Mmc_Fat_Write(file_contents, LINE_LEN-1);  // write data to the assigned file

    }

  }

}


// Opens an existing file and rewrites it

void M_Open_File_Rewrite() {

  filename[7] = 'C';

  Mmc_Fat_Assign(&filename, 0);

  Mmc_Fat_Rewrite();

  for(loop = 1; loop <= 55; loop++) {

    file_contents[0] = loop / 10 + 48;

    file_contents[1] = loop % 10 + 48;

    Mmc_Fat_Write(file_contents, LINE_LEN-1);    // write data to the assigned file

  }

}


// Opens an existing file and appends data to it

//               (and alters the date/time stamp)

void M_Open_File_Append() {

   filename[7] = 'B';

   Mmc_Fat_Assign(&filename, 0);

   Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 20, 0);

   Mmc_Fat_Append();                                    // Prepare file for append

   Mmc_Fat_Write(" for mikroElektronika 2010n", 27);   // Write data to assigned file

}


// Opens an existing file, reads data from it and puts it to UART

void M_Open_File_Read() {

  char character;

  

  filename[7] = 'B';

  Mmc_Fat_Assign(&filename, 0);

  Mmc_Fat_Reset(&size);            // To read file, procedure returns size of file

  for (i = 1; i <= size; i++) {

    Mmc_Fat_Read(&character);

    UART1_Write(character);        // Write data to UART

  }

}


// Deletes a file. If file doesn't exist, it will first be created

// and then deleted.

void M_Delete_File() {

  filename[7] = 'F';

  Mmc_Fat_Assign(filename, 0);

  Mmc_Fat_Delete();

}


// Tests whether file exists, and if so sends its creation date

// and file size via UART

void M_Test_File_Exist() {

  unsigned long  fsize;

  unsigned int   year;

  unsigned short month, day, hour, minute;

  unsigned char  outstr[12];


  filename[7] = 'B';       //uncomment this line to search for file that DOES exists

//  filename[7] = 'F';       //uncomment this line to search for file that DOES NOT exist

  if (Mmc_Fat_Assign(filename, 0)) {

    //--- file has been found - get its create date

    Mmc_Fat_Get_File_Date(&year, &month, &day, &hour, &minute);

    UART1_Write_Text(" created: ");

    WordToStr(year, outstr);

    UART1_Write_Text(outstr);

    ByteToStr(month, outstr);

    UART1_Write_Text(outstr);

    WordToStr(day, outstr);

    UART1_Write_Text(outstr);

    WordToStr(hour, outstr);

    UART1_Write_Text(outstr);

    WordToStr(minute, outstr);

    UART1_Write_Text(outstr);

    

    //--- file has been found - get its modified date

    Mmc_Fat_Get_File_Date_Modified(&year, &month, &day, &hour, &minute);

    UART1_Write_Text(" modified: ");

    WordToStr(year, outstr);

    UART1_Write_Text(outstr);

    ByteToStr(month, outstr);

    UART1_Write_Text(outstr);

    WordToStr(day, outstr);

    UART1_Write_Text(outstr);

    WordToStr(hour, outstr);

    UART1_Write_Text(outstr);

    WordToStr(minute, outstr);

    UART1_Write_Text(outstr);

    

    //--- get file size

    fsize = Mmc_Fat_Get_File_Size();

    LongToStr((signed long)fsize, outstr);

    UART1_Write_Line(outstr);

  }

  else {

    //--- file was not found - signal it

    UART1_Write(0x55);

    Delay_ms(1000);

    UART1_Write(0x55);

  }

}



// Tries to create a swap file, whose size will be at least 100

// sectors (see Help for details)

void M_Create_Swap_File() {

  unsigned int i;


  for(i=0; i<512; i++)

    Buffer[i] = i;


  size = Mmc_Fat_Get_Swap_File(5000, "mikroE.txt", 0x20);   // see help on this function for details


  if (size) {

    LongToStr((signed long)size, err_txt);

    UART1_Write_Line(err_txt);


    for(i=0; i<5000; i++) {

      Mmc_Write_Sector(size++, Buffer);

      UART1_Write('.');

    }

  }

}


// Main. Uncomment the function(s) to test the desired operation(s)

void main() {

  #define COMPLETE_EXAMPLE         // comment this line to make simpler/smaller example

  ADCON1 |= 0x0F;                  // Configure AN pins as digital

  CMCON  |= 7;                     // Turn off comparators

  

  // Initialize UART1 module

  UART1_Init(19200);

  Delay_ms(10);


  UART1_Write_Line("PIC-Started"); // PIC present report


  // Initialize SPI1 module

  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

  

  // use fat16 quick format instead of init routine if a formatting is needed

  if (Mmc_Fat_Init() == 0) {

    // reinitialize spi at higher speed

    SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

    //--- Test start

    UART1_Write_Line("Test Start.");

    //--- Test routines. Uncomment them one-by-one to test certain features

    M_Create_New_File();

    #ifdef COMPLETE_EXAMPLE

      M_Create_Multiple_Files();

      M_Open_File_Rewrite();

      M_Open_File_Append();

      M_Open_File_Read();

      M_Delete_File();

      M_Test_File_Exist();

      M_Create_Swap_File();

    #endif

    UART1_Write_Line("Test End.");


  }

  else {

    UART1_Write_Line(err_txt); // Note: Mmc_Fat_Init tries to initialize a card more than once.

                               //       If card is not present, initialization may last longer (depending on clock speed)

  }


}

MMC-SD.jpg

关键字:PIC单片机  MMC 引用地址:PIC单片机 读/写 MMC/SD 卡的简单小程序

上一篇:基于PIC单片机的24c02调试完成
下一篇:PIC12F508项目程序

推荐阅读最新更新时间:2024-11-16 23:15

PIC单片机4位16进制数除于4位16进制数子程序
;************************************************************** ; 除法子程序 ;/************************************************************* CF1 MOVLW 0FFH;被除数 MOVWF 70H ;被除数高8位寄存器 MOVLW 0FFH;被除数 MOVWF 71H;被除数低8位寄存器 MOVLW 00H MOVWF 72H ;余数高8位寄存器 MOVLW 00H MOVWF 73H ;余数低8位寄存器 MOVLW 00H MOVWF 74H;商高8位寄存器 MO
[单片机]
Novoflex Pte Ltd推出了组装电信行业SIM的革命性工艺
NovoFlex今天公布Secure Authenticable Identification Laminates (sAiL)TM,这是一项获得专利的开创性新工艺,它重新定义了将集成电路(IC)芯片嵌入电信行业目前所使用的SIM卡中的方式。Novoflex公司与印度的智能卡制造商Eastcompeace和印度尼西亚的CIPTA合作,在两国主要移动运营商发行的SIM卡中嵌入IC芯片。 这一工艺与制造SIM卡的传统方法不同,去除了模块封装和模块嵌入这两个主要步骤。这种柔性形式的sAiLTM采用塑料薄片,也可以集成到一系列日常物品中。 此外,这一工艺在所有步骤中使用的黄金量减少,因而新技术将为卡片制造商节省大量资金。由于工艺
[半导体设计/制造]
Novoflex Pte Ltd推出了组装电信行业SIM<font color='red'>卡</font>的革命性工艺
月租19元 移动王套餐上线:1元/1GB/天
    5月25日,天津移动推出移动王卡套餐。月租18元(新用户预存70元即享9元月费),支持咪咕、爱奇艺、优酷、PPTV等视频定向免流,国内被叫免费。   套餐超出后国内主叫0.1元/分钟,国内流量1元/1GB/天,赠送来电显示。 中国移动   值得一提的是,1元/1GB/天国内移动数据流量(不使用不收费)自动叠加(如超出1GB自动叠加1元1GB)。套餐外流量有效期按照自然日原则,自生效时刻起至当日24时有效。   新用户参加首充优惠活动,有效期12个月,活动生效首月按日减免月费,最高减免9元,自次月起在有效期内每月减免9元预存70元话费(其中10元为自由话费),其余话费每月返还5元,连续返还12个月。
[手机便携]
全球汽车轮毂行业首座,中信戴入选“灯塔工厂”
广告摘要声明广告 近期,世界经济论坛公布了2021年最新一批“灯塔工厂”名单,全球有21家“灯塔工厂”入选,其中10家在中国。而中信戴卡秦皇岛铝车轮工厂成为了河北省唯一入选的企业,也是全球汽车轮毂行业首家入选企业。 中信集团董事长朱鹤新在9月29日全球灯塔工厂网络年会上的发言中表示,数字化发展正在重构经济竞争新格局、产业演进新模式和企业发展新要素。中信集团正全力建设“数字中信”,构建产业数字化和数字产业化深入融合、相互促进的发展格局。 中信戴卡获评灯塔工厂,将为中信集团数字化转型起到引领和示范作用。中信也将与合作伙伴共建产业链协同发展生态,为相关行业的数字化变革积极探索有益经验。 据了解,目前汽车轮毂个性化要求差异明显,生产工艺复
[机器人]
PIC单片机用CCP1模块产生10位PWM波形程序
//该程序用于使CCP1模块产生分辨率为10位的PWM波形,占空比为50% #include p18f452.h void CCP1NIT(void) { CCPR1L=0x7f; CCP1CON=0x3c; //设置CCP1模块为PWM工作方式,且其工作 //循环的低2位为11,高8位为01111111=7F //高电平时间=(CCPR1L:CCP1CON 5:4 )*Tosc*(TMR2预分频) INTCON=0x00; //禁止总中断和外围中断 PR2=0xff; //设置PWM的工作周期=(PR2+1)*4*Tosc*(TMR2预分频) TRISC=0xfb; //设置CCP1引脚为输出方
[单片机]
英飞凌将针对欧盟对智能芯片厂商进行的反垄断调查作出的裁决提起上诉
2014年9月4日,德国纽必堡讯——今天,欧盟委员会对包括英飞凌(FSE代码:IFX / OTCQX代码:IFNNY)在内的4家从事智能卡行业的半导体企业进行的反垄断调查作出裁决。欧盟委员会认定这些企业所谓的偶尔交换竞争敏感信息的行为触犯了欧盟反垄断法规。英飞凌被罚8,280万欧元,罚金总额高达1.38亿欧元。 英飞凌因该判定缺乏事实依据而提出反对。同时,英飞凌认为欧盟委员会侵犯了其程序权益。因此,英飞凌将细致评估这项裁决,并准备向位于卢森堡的欧盟普通法院提起上诉。 通常,在这样的典型反垄断诉讼中,将按有关时间段内受影响公司的营收来决定罚金配比。因此,仅仅由于其在2003年9月至2005年3月期间,在欧洲智能卡芯片
[半导体设计/制造]
MAX6675 K型热电偶温度
K型热电偶简介 K型热电偶作为一种温度传感器,K型热电偶通常和显示仪表,记录仪表和电子调节器配套使用。 K型热电偶可以直接测量各种生产中从0℃到1300℃范围的液体蒸汽和气体介质以及固体的表面温度。 K型热电偶是目前用量最大的廉金属热电偶,其用量为其他热电偶的总和。K型热电偶丝直径一般为1.2mm~4.0mm。 正极(KP)的名义化学成分为:Ni:Cr=90:10,负极(KN)的名义化学成分为:Ni:Si=97:3,其使用温度为-200℃~1300℃。 K型热电偶具有线性度好,热电动势较大,灵敏度高,稳定性和均匀性较好,抗氧化性能强,价格便宜等优点,能用于氧化性惰性气氛中广泛为用户所采用。 MAX6675简介 MAX6675冷
[单片机]
MAX6675 K型热电偶<font color='red'>读</font>温度
凌华科技推出PCI Express接口高速图像采集PCIe-RTV24
      适用于大量图像数据传输的机器视觉与智能交通应用 2007年10月 22 日,北京讯 凌华科技领先国内业界推出最新总线PCI Express技术的高速图像采集卡PCIe-RTV24,能提供PCI Express x 1传输速度、4通道输出、与现有PCI接口完全兼容的软件层,适合各种检测设备所需的机器视觉应用及智能交通监控领域,例如定位、条形码读取、人脸辨识、车牌辨识等讲求高速及图像数据传输量大的应用,产品信息请浏览凌华网站:http:www.adlinktech.com/IA。 凌华PCIe-RTV24图像采集卡具备4个独立的图像处理IC,模拟方式的图像采集速度达到每通道每秒30帧,支持彩色RGB24、RGB16与灰
[安防电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved