完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include typedef unsigned int uint; typedef unsigned char uchar; uchar CMD0[6]={0x40,0x00,0x00,0x00,0x00,0x95};//命令0 uchar CMD1[6]={0x41,0x00,0x00,0x00,0x00,0xff};//命令1 void spi_init(void) { DDRB|=BIT(4);//CS片选 DDRB|=BIT(5);//MOSI DDRB&=~(1<<6);//MISO DDRB|=BIT(7);//SCK SPCR=0x12;//设置SPI SPSR=0x00; PORTB=0xff; SPCR|=(1<<6);//使能SPI } uchar send(uchar dat)//发送数据 { uchar dat1=0; SPDR=dat; while(!(SPSR&(1<<7)))//等待数据发送完成 dat1=SPDR; return dat1;// } uchar send_cmd(uchar *CMD)//发送命令 { uchar i,dat; PORTB|=(1<<4);//CS=0; send(0xff);//一定要有这一步,否则可能初始化不能成功 PORTB&=~(1<<4); send(CMD[0]); send(CMD[1]); send(CMD[2]); send(CMD[3]); send(CMD[4]); send(CMD[5]); do { dat=send(0xff);//读回命令的响应 i++; }while((dat==0xff)&&(i<100)); return dat; } uchar MMC_init(void)//MMC卡的初始化 { uchar m,n; PORTB&=~(1<<4); for(m=0;m<0x0f;m++) { send(0xff); }//上电发送大于74个时钟 do { n=send_cmd(CMD0);//发送CMD0复位,响应R1=0x01 m++; }while((m<200)&&(n!=0x01)); m=0; do { send_cmd(CMD1);//发送CMD1激活卡,响应R1=0x00 m++; }while(m<200); PORTB|=(1<<4); return n; } void main(void) { DDRA=0xff; PORTA=0xff; spi_init(); PORTA=MMC_init(); while(1); }
|
|
相关推荐
3 个讨论
|
|
好好好值得下载。。。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5127 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7770 浏览 0 评论
3030 浏览 2 评论
3105 浏览 1 评论
10056 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 14:12 , Processed in 0.658025 second(s), Total 50, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号