单片机U盘读写参考程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*******************************************************/
#include"reg52.h"
#include"stdio.h"
#include "string.h"
#include "intrins.h"
#include"CH375INC.H"
/*******************************************************/
#define uchar unsigned char
#define uint unsigned int
/*******************************************************/
sbit CH375_INT=P3^3;
sbit CH375_A0=P3^4;
sbit CH375_RD=P3^5;
sbit CH375_WR=P3^6;
sbit CH375_CS=P3^7;
/*******************************************************/
uchar xdata my_buf[512];
/*******************************************************/
void uart_init()
{
TMOD=0X20;
TH1=TL1=0XFD;
TR1=1;
REN=1;
SM0=0;SM1=1;
EA=1;
ES=1;
}
/*******************************************************/
void uart_send_pc(uchar *s) //串口监视//void uart_send_pc(uchar a[20]) { //{
uchar len=strlen(s); // uchar i;
uchar i; // for(i=0;i<20;i++)
for(i=0;i { // ES=0; ES=0; // SBUF=a[i]; SBUF=s[i]; // while(!TI); while(!TI); // TI=0; TI=0; // ES=1; ES=1; // } } //} } /*******************************************************/ void Delay2us() //@11.0592MHz { unsigned char i; _nop_(); _nop_(); i = 2; while (--i); } //********************1ms延时函数************* void delay1ms(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=845;y>0;y--); } /*******************************************************/ void ch375_write_datcmd(uchar dat_cmd,uchar k) //写数据、命令{ Delay2us(); CH375_CS=0; CH375_A0=k; // 0:data 1:cmd P2=dat_cmd; CH375_WR=0; CH375_WR=1; CH375_CS=1; CH375_A0=1; Delay2us(); } uchar ch375_read_dat() //读数据 { uchar dat; CH375_CS=0; CH375_A0=0; P2=0XFF; CH375_RD=0; // P2=0XFF; dat=P2; CH375_RD=1; CH375_CS=1; CH375_A0=1; return dat; } /************************等待获取状态并取消中断操作*******************************/ uchar ch375_wait_int() { CH375_INT=1; while(CH375_INT); ch375_write_datcmd(CMD_GET_STATUS,1); //获取状态并取消中断 return ch375_read_dat(); } /************************获取U盘容量操作*******************************/ unsigned long* get_volume() { unsigned long volume[2]; uchar status,i; ch375_write_datcmd(CMD_DISK_SIZE,1); status=ch375_wait_int(); if(status==USB_INT_SUCCESS) { ch375_write_datcmd(CMD_RD_USB_DA TA,1); i=ch375_read_dat(); for(i=0;i<4;i++) { volume[0]=volume[0]<<8; volume[0]=volume[0]+ch375_read_dat(); delay1ms(1); } for(i=0;i<4;i++) { volume[1]=volume[1]<<8; volume[1]=volume[1]+ch375_read_dat(); delay1ms(1); } } return volume; } /************************U盘初始化操作*******************************/ uchar ch375_init() { uchar status; // uart_send_pc("请插入U盘:\n"); status=ch375_wait_int(); //等待插入,并获取状态 if(status!=USB_INT_CONNECT) {