51單片機(jī)和CH375問題

小弟按照ch375中文手冊(cè)做了個(gè)51單片機(jī)(SST89E58RD)驅(qū)動(dòng)CH375 讀寫U盤的電路,串口方式,沒有接其他芯片,但是不管怎樣都沒有反應(yīng).希望各位大蝦能幫個(gè)忙,給個(gè) 串口方式 的成功程序參考一下,只要能夠?qū)慤盤就可以了.TXD==>RXD;INT#==>INT0;RXD==>TXD.小弟在此謝過了! 或者發(fā)郵件給我 個(gè)人信息保護(hù),已隱藏

你先做下測(cè)試命令看下可以不可以?實(shí)際做的時(shí)候你把串口設(shè)置成9位數(shù)據(jù)方式,在寫命令的時(shí)候?qū)⒌?位設(shè)置成為1,寫數(shù)據(jù)的時(shí)候?qū)⒌?位數(shù)據(jù)設(shè)置成為0。這樣就可以了。


我應(yīng)該參考哪個(gè)程序呢? 我是剛剛開始做的,但是,時(shí)間上要求我在這兩天內(nèi)做出來,所以很急.昨晚通宵弄了一天都沒有什么反應(yīng). 我的板沒有連接電腦的,這樣可以測(cè)試嗎? 測(cè)試了下ch375 的25腳是低電平,26高電平,應(yīng)該是正常的,這樣說明芯片工作了嗎? 但是ACT#的那個(gè)LED出來就沒有亮過. 可以加我Q聊嗎?那樣快點(diǎn).QQ:181910213 謝謝!


讀寫子函數(shù)參考: void CH375_PORT_INIT( ) { SCON = 0xD0; 設(shè)置串口為9位數(shù)據(jù) 設(shè)置波特率和其它串口參數(shù) }

void xWriteCH375Cmd( UINT8 mCmd ) { TI = 0; TB8 = 1; SBUF = mCmd; while ( TI == 0 ); }

void xWriteCH375Data( UINT8 mData ) { TI = 0; TB8 = 0; SBUF = mData; while ( TI == 0 ); }

UINT8 xReadCH375Data( void ) { while ( RI == 0 ); RI = 0; return( SBUF ); } /* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; } 希望對(duì)你有用!


12M晶振,怎么設(shè)置TH1? void mInitSTDIO( ) 函數(shù)不是要有上位機(jī)連接才要的嗎?我的是不能接電腦的.我的板是自己做的.


我用LED觀測(cè)程序的進(jìn)度,發(fā)覺結(jié)果是LED閃爍,操作不成功 void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */

while ( 1 ) { LED_OUT_ACT( ); /* LED閃爍 */ mDelay100mS( ); LED_OUT_INACT( ); mDelay100mS( ); } }


你先做測(cè)試命令吧,測(cè)試命令通過了了在往下調(diào)! void mInitSTDIO( ) 是初始化串口的!


大哥,不好意思啊,因?yàn)槲沂莿倓偨佑|,所以很多不懂的東西.怎么測(cè)試命令呢?麻煩了


大哥,幫幫忙啦,不是我不懂事啊,做畢業(yè)設(shè)計(jì),時(shí)間太趕了,沒有太多的時(shí)間讓我去理解.其他模塊都做好了,就剩下把USB數(shù)據(jù)寫進(jìn)U盤了.給個(gè)可行的串口例子試試. 或是你幫我隨便寫個(gè)好不? 只要能向U寫進(jìn)一個(gè)文檔,然后在文檔寫進(jìn)一行數(shù)據(jù)就可以了 . 做了幾天了,還看不到希望啊, 27號(hào)就得交差了.急急急!!! 電路連接方式TXD==>RXD;INT#==>INT0;RXD==>TXD loventer@163.COM


UINT8 mWaitInterrupt( void ) { /* 等待CH375中斷并獲取狀態(tài),返回操作狀態(tài) */

while( CH375_INT_WIRE ); /* 查詢等待CH375操作完成中斷(INT#低電平) */ P14=0; mDelaymS( 1250 ); CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷,獲取中斷狀態(tài) */ return( CH375_RD_DAT_PORT( ) ); }

過程中檢測(cè)不到復(fù)位信號(hào),死循環(huán)了,是怎么回事呢


到我們網(wǎng)站上下載CH375LIB.ZIP.(到在線下載里搜索),文件路徑為:CH375LIB\MCS51\FILELIB5\EXAM7 例7里面有串口操作的例子(被屏蔽起來了),供你參考!


好的,我今晚試試,實(shí)在不行我就再做一個(gè)并口的板.先謝謝偉大的 紅桃六大哥和hcn大哥了~~


我用貴公司CH375LIB.ZIP中\(zhòng)MCS51\FILELIB5\EXAM7的程序例子進(jìn)行修改,在 i = CH375LibInit( ); 就停止運(yùn)行了,請(qǐng)問是怎么回事???硬件完全按照程序說明接的. 附上修改后的程序:

#include #include #define MAX_BYTE_IO 35 /* 以字節(jié)為單位單次讀寫文件時(shí)的最大長(zhǎng)度,默認(rèn)值是29,值大則占用內(nèi)存多,值小則超過該長(zhǎng)度必須分多次讀寫 */

/* 以下定義的詳細(xì)說明請(qǐng)看CH375HF5.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */ /*#define LIB_CFG_UPD_SIZE 1*/ /* 在添加數(shù)據(jù)后是否自動(dòng)更新文件長(zhǎng)度: 0為"不更新",1為"自動(dòng)更新" */

/* 只使用單片機(jī)內(nèi)置的1KB外部RAM: 0000H-01FFH 為磁盤讀寫緩沖區(qū), 以字節(jié)為單位讀寫文件不需要文件數(shù)據(jù)讀寫緩沖區(qū)FILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長(zhǎng)度為SECTOR_SIZE */ #define FILE_DATA_BUF_ADDR 0x0000 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)長(zhǎng)度不小于一次讀寫的數(shù)據(jù)長(zhǎng)度,字節(jié)模式不用該緩沖區(qū) */ /* 由于單片機(jī)內(nèi)置的外部RAM只有1KB, 有些單片機(jī)還要去掉256字節(jié)內(nèi)部RAM, 只剩下768字節(jié)的外部RAM, 其中前512字節(jié)由CH375子程序用于磁盤數(shù)據(jù)緩沖 */ #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長(zhǎng)度不小于一次讀寫的數(shù)據(jù)長(zhǎng)度,字節(jié)模式不用該緩沖區(qū) */

#define CH375_INT_WIRE INT0 /* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */

#define NO_DEFAULT_CH375_F_ENUM 1 /* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */

#include "CH375HF5.H"

/* 在P1.4連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)U盤插入后亮 */ sbit P1_4 = P1^4; #define LED_OUT_INIT( ) { P1_4 = 1; } /* P1.4 高電平 */ #define LED_OUT_ACT( ) { P1_4 = 0; } /* P1.4 低電平驅(qū)動(dòng)LED顯示 */ #define LED_OUT_INACT( ) { P1_4 = 1; } /* P1.4 低電平驅(qū)動(dòng)LED顯示 */ sbit P1_5 = P1^5; /* 在P1.5連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)對(duì)U盤操作時(shí)亮 */ #define LED_RUN_ACT( ) { P1_5 = 0; } /* P1.5 低電平驅(qū)動(dòng)LED顯示 */ #define LED_RUN_INACT( ) { P1_5 = 1; } /* P1.5 低電平驅(qū)動(dòng)LED顯示 */ sbit P1_6 = P1^6; /* 在P1.6連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮,當(dāng)對(duì)U盤寫操作時(shí)亮 */ #define LED_WR_ACT( ) { P1_6 = 0; } /* P1.6 低電平驅(qū)動(dòng)LED顯示 */ #define LED_WR_INACT( ) { P1_6 = 1; } /* P1.6 低電平驅(qū)動(dòng)LED顯示 */

/* 本例用I/O引腳模擬產(chǎn)生CH375的并口讀寫時(shí)序 */ /* 本例中的硬件連接方式如下(實(shí)際應(yīng)用電路可以參照修改下述3個(gè)并口讀寫子程序) */ /* 單片機(jī)的引腳 CH375芯片的引腳 P3.2 INT# P1.0 A0 P1.1 CS# 如果模擬出的并口上只有CH375,那么CS#可以直接接低電平,強(qiáng)制片選 P1.2 WR# P1.3 RD# P0(8位端口) D7-D0 */ sbit CH375_A0 = P1^0; sbit CH375_CS = P1^1; sbit CH375_WR = P1^2; sbit CH375_RD = P1^3;

void mDelay1_2uS( ) /* 至少延時(shí)1.2uS,根據(jù)單片機(jī)主頻調(diào)整 */ { return; }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; P0 = 0xFF; /* 并口輸入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)1uS */

P0 = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口 */ CH375_CS = 0; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ CH375_WR = 1; /* 輸出無效的控制信號(hào), 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; P0 = 0xFF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { P0 = mData; /* 向CH375的并口輸出數(shù)據(jù) */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 輸出有效寫控制信號(hào), 寫CH375芯片的數(shù)據(jù)端口 */ CH375_CS = 0; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ CH375_WR = 1; /* 輸出無效的控制信號(hào), 完成操作CH375芯片 */ CH375_CS = 1; P0 = 0xFF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ P0 = 0xFF; /* 輸入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 輸出有效寫控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口 */ CH375_CS = 0; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ mData = P0; /* 從CH375的并口輸入數(shù)據(jù) */ CH375_RD = 1; /* 輸出無效的控制信號(hào), 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }

/* 延時(shí)100毫秒,不精確 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3; }

/* 將程序空間的字符串復(fù)制到內(nèi)部RAM中,返回字符串長(zhǎng)度 */ UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }

/* 檢查操作狀態(tài),如果錯(cuò)誤則顯示錯(cuò)誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */

while ( 1 ) { LED_OUT_ACT( ); /* LED閃爍 */ mDelay100mS( ); LED_OUT_INACT( ); mDelay100mS( ); } }

main( ) { UINT8 i, month, hour; UINT16 date, adc, len; CH375_PORT_INIT( ); /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */

LED_OUT_INIT( ); LED_OUT_ACT( ); /* 開機(jī)后LED亮一下以示工作 */ mDelay100mS( ); /* 延時(shí)100毫秒 */ LED_OUT_INACT( );

LED_RUN_ACT( ); mDelay100mS( ); /* 延時(shí)100毫秒 */ mDelay100mS( ); /* 延時(shí)100毫秒 */ mDelay100mS( ); /* 延時(shí)100毫秒 */ mDelay100mS( ); /* 延時(shí)100毫秒 */

LED_RUN_INACT( );

i = CH375LibInit( ); /* 初始化CH375程序庫(kù)和CH375芯片,操作成功返回0 */

mStopIfError( i ); /* 其它電路初始化 */

while ( 1 ) {

while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ LED_OUT_ACT( ); /* LED亮 */ mDelay100mS( ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ mDelay100mS( );

/* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ mDelay100mS( );

if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ }

LED_RUN_ACT( ); /* 開始操作U盤 */

/* 如果MY_ADC.TXT文件已經(jīng)存在則添加數(shù)據(jù)到尾部,如果不存在則新建文件 */

mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/MY_ADC.TXT" ); /* 文件名,該文件在根目錄下 */ i = CH375FileOpen( ); /* 打開文件 */ if ( i == ERR_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動(dòng)文件指針到尾部以便添加數(shù)據(jù) */

mCmdParam.ByteLocate.mByteOffset = 0xffffffff; /* 移到文件的尾部 */ i = CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { /* 沒有找到文件,必須新建文件 */ LED_WR_ACT( ); /* 寫操作 */

mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/MY_ADC.TXT" ); /* 文件名,該文件在根目錄下,剛才已經(jīng)提供給CH375FileOpen */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); } else mStopIfError( i ); /* 打開文件時(shí)出錯(cuò) */ LED_WR_ACT( ); /* 寫操作 */

i = sprintf( mCmdParam.ByteWrite.mByteBuffer, "此前文件長(zhǎng)度= %ld 字節(jié)\xd\xa", CH375vFileSize ); mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節(jié)數(shù),單次讀寫的長(zhǎng)度不能超過MAX_BYTE_IO */ i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長(zhǎng)度不能超過MAX_BYTE_IO */ mStopIfError( i );

for ( hour = 8; hour != 20; hour ++ ) { /* 用循環(huán)方式添加12行數(shù)據(jù) */ TR0=1; /* 用定時(shí)器0的計(jì)數(shù)值代替ADC數(shù)據(jù) */ month = 5; /* 假定是5月 */ date = TL1 & 0x1F; /* 因?yàn)闇y(cè)試板上沒有實(shí)時(shí)時(shí)鐘芯片,所以用定時(shí)器1的計(jì)數(shù)代替進(jìn)行演示 */ /* adc = get_adc_data( ); */


你原來不是用串口嗎?按照你上面的程序你改為模擬并口后TXD腳要接地.


已經(jīng)接地了,程序運(yùn)行的結(jié)果是不斷地閃爍.我先去開會(huì),大哥你幫我看還有什么可能出錯(cuò)的地方,謝了~


那你的硬件可能有問題,做測(cè)試命令.做完看看結(jié)果再所吧.方法如下:上電復(fù)位完成后 先發(fā)命令0X06再發(fā)數(shù)據(jù)0X55;然后再去讀數(shù)據(jù),讀到的數(shù)據(jù)是你發(fā)的是數(shù)據(jù)的按位取反,也就是0XAA.你看看是不是這個(gè)結(jié)果!


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频