标题:
发一个C8051单片机U盘读写的程序供大家参考
[打印本页]
作者:
a1137607932
时间:
2018-1-20 03:44
标题:
发一个C8051单片机U盘读写的程序供大家参考
使用C8051F020单片机连接CH376S USB HOST芯片,生成CSV格式文件导入U盘内的一个小程序
单片机源程序如下:
/*****************************************************************************
;File Name: 基于C8051F020系列的简单U盘检测测试程序
;
;description: 通过测量开发板上的CH375 检测是否有U 盘挂载
;Author: 王亮
;E_mail: wangl@emsyschina.com
*****************************************************************************/
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f020.h> // SFR declarations
#include <stdio.h>
#include <intrins.h>
#include "CH375INC.H"
sbit CH375_nINT = P1^2; // CH375 INT 输出
sbit CH375_A0 = P1^3; // CH375 命令/数据控制
sbit CH375_nCS = P1^4; // CH375 片选信号
#define CH375_DATA P7 // CH375 八位数据端口
#define CH375_nWR P4 &= 0x7F; _nop_();_nop_();_nop_();_nop_(); P4 |= 0x80; // CH375 写信号
#define CH375_nRD_L P4 &= 0xBF; // CH375 读信号低电平
#define CH375_nRD_H P4 |= 0x40; // CH375 读信号高电平
#define BAUDRATE 115200 // Baud rate of UART in bps
#define SYSCLK 22118400 // Output of PLL derived from (INTCLK*2)
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void);
void PORT_Init (void);
void UART0_Init (void);
//**********************************************************
// 大延迟程序(毫秒级)
//**********************************************************
void DelayMs(unsigned int i)
{
unsigned int j;
for(;i!=0;i--)
{
for(j=200;j!=0;j--)
;
}
}
//**********************************************************
// 向CH375的命令端口写入命令
//**********************************************************
void CH375_WR_CMD_PORT(unsigned char cmd )
{
// 将CH375 数据线、读写、片选信号线设置为输出
P1MDOUT = 0x18; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
P74OUT = 0xC2; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
CH375_A0 = 1; // 高电平表示写入的是命令
CH375_DATA = cmd; // 将命令输出到CH375端口
_nop_();_nop_();
CH375_nWR // 写命令
_nop_();_nop_();
CH375_A0 = 0;
}
//**********************************************************
// 向CH375的数据端口写入数据
//**********************************************************
void CH375_WR_DAT_PORT(unsigned char dat )
{
// 将CH375 数据线、读写、片选信号线设置为输出
P1MDOUT = 0x18; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
P74OUT = 0xC2; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
CH375_A0 = 0; // 低电平表示写入的是数据
CH375_DATA = dat; // 将命令输出到CH375端口
_nop_();_nop_();
CH375_nWR // 写命令
}
//**********************************************************
// 从CH375的数据端口读出数据
//**********************************************************
unsigned char CH375_RD_DAT_PORT( void )
{
unsigned char temp;
// 将CH375 数据线信号线设置为输入
P74OUT = 0x02;
P7 = 0xff;
CH375_A0 = 0;
CH375_nRD_L
_nop_();_nop_();
temp = CH375_DATA;
CH375_nRD_H
_nop_();
return( temp );
}
//**********************************************************
// 等待CH375中断并获取状态,返回操作状态
//**********************************************************
unsigned char mWaitInterrupt( void )
{
while( CH375_nINT ); // 查询等待CH375操作完成中断(INT#低电平)
CH375_WR_CMD_PORT( CMD_GET_STATUS ); // 产生操作完成中断,获取中断状态
return( CH375_RD_DAT_PORT( ) );
}
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{
unsigned char Version = 0;
unsigned char Status = 0;
WDTCN = 0xde; // Disable watchdog timer
WDTCN = 0xad;
OSCILLATOR_Init (); // Initialize oscillator
PORT_Init (); // Initialize crossbar and GPIO
UART0_Init (); // Initialize UART1
CH375_nCS = 0; // 片选选中CH375
DelayMs( 50 );
// 获取CH375 芯片及固件版本号,表明芯片正常
CH375_WR_CMD_PORT( CMD_GET_IC_VER );
Version = CH375_RD_DAT_PORT( );
printf( "CH375 固件版本号%x\n", Version);
CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); // 初始化CH375,设置USB工作模式
CH375_WR_DAT_PORT( 6 ); // 模式代码,自动检测USB设备连接
while (1)
{
Version = mWaitInterrupt();
printf( "Insert USB disk%x\n",Version);
DelayMs( 50 );
while ( mWaitInterrupt( ) != USB_INT_CONNECT ); // 等待U盘连接
DelayMs( 5000 ); // 延时等待U盘进入正常工作状态
printf( "USB disk is CONNECT\n" ); // 表示U 盘正常插入
getchar();
}
}
//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// OSCILLATOR_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// This routine initializes the system clock to use an 22.1184MHz crystal
// as its clock source.
//
//
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void)
{
int i; // delay counter
OSCXCN = 0x67; // start external oscillator with
// 22.1184MHz crystal
for (i=0; i < 256; i++) ; // wait for oscillator to start
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock
// detector
}
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters : None
//
// This function configures the crossbar and GPIO ports.
//
// P0.0 digital push-pull UART TX
// P0.1 digital open-drain UART RX
// AIN0.1 analog Analog input (no configuration necessary)
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x04; // Route UART0 to crossbar
XBR2 |= 0x40; // Enable crossbar, weak pull-ups
P0MDOUT |= 0x01; // enable TX0 as a push-pull output
// 将CH375 数据线、读写、片选信号线设置为输出
P1MDOUT = 0x18; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
// P74OUT = 0xC2; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
P74OUT = 0xC3; // 将P7 和P4.6、P4.7、P1.3、P1.4设置为输出
P0MDOUT |= 0x01; // Set TX1 pin to push-pull
P1 |= 0x1c; //
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
CH376.rar
(83.19 KB, 下载次数: 18)
2018-1-20 03:43 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
xb12321
时间:
2018-2-11 16:45
找了很久这个东西了,谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1