標(biāo)題:
發(fā)一個(gè)C8051單片機(jī)U盤讀寫的程序供大家參考
[打印本頁]
作者:
a1137607932
時(shí)間:
2018-1-20 03:44
標(biāo)題:
發(fā)一個(gè)C8051單片機(jī)U盤讀寫的程序供大家參考
使用C8051F020單片機(jī)連接CH376S USB HOST芯片,生成CSV格式文件導(dǎo)入U(xiǎn)盤內(nèi)的一個(gè)小程序
單片機(jī)源程序如下:
/*****************************************************************************
;File Name: 基于C8051F020系列的簡單U盤檢測(cè)測(cè)試程序
;
;description: 通過測(cè)量開發(fā)板上的CH375 檢測(cè)是否有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 命令/數(shù)據(jù)控制
sbit CH375_nCS = P1^4; // CH375 片選信號(hào)
#define CH375_DATA P7 // CH375 八位數(shù)據(jù)端口
#define CH375_nWR P4 &= 0x7F; _nop_();_nop_();_nop_();_nop_(); P4 |= 0x80; // CH375 寫信號(hào)
#define CH375_nRD_L P4 &= 0xBF; // CH375 讀信號(hào)低電平
#define CH375_nRD_H P4 |= 0x40; // CH375 讀信號(hào)高電平
#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);
//**********************************************************
// 大延遲程序(毫秒級(jí))
//**********************************************************
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 數(shù)據(jù)線、讀寫、片選信號(hào)線設(shè)置為輸出
P1MDOUT = 0x18; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
P74OUT = 0xC2; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
CH375_A0 = 1; // 高電平表示寫入的是命令
CH375_DATA = cmd; // 將命令輸出到CH375端口
_nop_();_nop_();
CH375_nWR // 寫命令
_nop_();_nop_();
CH375_A0 = 0;
}
//**********************************************************
// 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù)
//**********************************************************
void CH375_WR_DAT_PORT(unsigned char dat )
{
// 將CH375 數(shù)據(jù)線、讀寫、片選信號(hào)線設(shè)置為輸出
P1MDOUT = 0x18; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
P74OUT = 0xC2; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
CH375_A0 = 0; // 低電平表示寫入的是數(shù)據(jù)
CH375_DATA = dat; // 將命令輸出到CH375端口
_nop_();_nop_();
CH375_nWR // 寫命令
}
//**********************************************************
// 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù)
//**********************************************************
unsigned char CH375_RD_DAT_PORT( void )
{
unsigned char temp;
// 將CH375 數(shù)據(jù)線信號(hào)線設(shè)置為輸入
P74OUT = 0x02;
P7 = 0xff;
CH375_A0 = 0;
CH375_nRD_L
_nop_();_nop_();
temp = CH375_DATA;
CH375_nRD_H
_nop_();
return( temp );
}
//**********************************************************
// 等待CH375中斷并獲取狀態(tài),返回操作狀態(tài)
//**********************************************************
unsigned char mWaitInterrupt( void )
{
while( CH375_nINT ); // 查詢等待CH375操作完成中斷(INT#低電平)
CH375_WR_CMD_PORT( CMD_GET_STATUS ); // 產(chǎn)生操作完成中斷,獲取中斷狀態(tài)
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 芯片及固件版本號(hào),表明芯片正常
CH375_WR_CMD_PORT( CMD_GET_IC_VER );
Version = CH375_RD_DAT_PORT( );
printf( "CH375 固件版本號(hào)%x\n", Version);
CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); // 初始化CH375,設(shè)置USB工作模式
CH375_WR_DAT_PORT( 6 ); // 模式代碼,自動(dòng)檢測(cè)USB設(shè)備連接
while (1)
{
Version = mWaitInterrupt();
printf( "Insert USB disk%x\n",Version);
DelayMs( 50 );
while ( mWaitInterrupt( ) != USB_INT_CONNECT ); // 等待U盤連接
DelayMs( 5000 ); // 延時(shí)等待U盤進(jìn)入正常工作狀態(tài)
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 數(shù)據(jù)線、讀寫、片選信號(hào)線設(shè)置為輸出
P1MDOUT = 0x18; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
// P74OUT = 0xC2; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
P74OUT = 0xC3; // 將P7 和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
P0MDOUT |= 0x01; // Set TX1 pin to push-pull
P1 |= 0x1c; //
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
CH376.rar
(83.19 KB, 下載次數(shù): 18)
2018-1-20 03:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
xb12321
時(shí)間:
2018-2-11 16:45
找了很久這個(gè)東西了,謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1