[求助]自己寫的程序有點問題.

由于自己用的單片機只有128個字節(jié)的內(nèi)存,沒法用提供的文件級接口,只好自己寫低層的程序,但老出問題,

CH375_WR EQU P3.6 ;0,寫 CH375_RD EQU P3.7 ;0,讀 CH375_A0 EQU P2.0 ;1,命令 0,數(shù)據(jù) CH375_CS EQU P2.2 CH375_IN EQU 33H CH375_OUT EQU R5

CH375_INPUT_CMD: SETB CH375_RD CLR CH375_WR SETB CH375_A0 LCALL OPEAN_CH375 MOV P1,CH375_IN NOP LCALL CLOSE_CH375 NOP LCALL CLOSE_CH375 RET

CH375_INPUT_DATA: SETB CH375_RD CLR CH375_WR CLR CH375_A0 LCALL OPEAN_CH375 MOV P1,CH375_IN NOP LCALL CLOSE_CH375 RET

CH375_READ_DATA:MOV P1,#0FFH SETB CH375_WR CLR CH375_RD CLR CH375_A0 LCALL OPEAN_CH375 LCALL DEL_5UMS MOV CH375_OUT,P1 NOP LCALL CLOSE_CH375 RET

OPEAN_CH375:CLR CH375_CS NOP RET

CLOSE_CH375:SETB CH375_CS RET 以上是基本的函數(shù),再開始設置ch375工作狀態(tài)

     MOV CH375_IN,#15H LCALL CH375_INPUT_CMD

MOV CH375_IN,#06H LCALL CH375_INPUT_DATA

LCALL DEL_10UMS LCALL DEL_10UMS

LCALL CH375_READ_DATA 先寫入 #15H 的命令,再寫入 #06H 的數(shù)據(jù),再讀時,得到的是 14H ,而不是 51H,或 5FH,不知道為什么? [Emot]1[/Emot]

讀寫子函數(shù)有點問題: CH375_INPUT_CMD: MOV P1,CH375_IN SETB CH375_A0 SETB CH375_RD LCALL OPEAN_CH375 CLR CH375_WR NOP //對于高速單片機,該指令用于延時,以便向CH375_WR產(chǎn)生寬度至少為80nS的低電平脈沖 SET CH375_WR LCALL CLOSE_CH375 CLR CH375_A0 LCALL DELAY2US -------------延時2um左右 RET CH375_INPUT_DATA: MOV P1,CH375_IN SETB CH375_RD LCALL OPEAN_CH375 CLR CH375_WR NOP SET CH375_WR LCALL CLOSE_CH375 LCALL DELAY2US RET CH375_READ_DATA: MOV P1,#0FFH LCALL OPEAN_CH375 SETB CH375_WR CLR CH375_RD LCALL OPEAN_CH375 //用來延時 MOV CH375_OUT,P1 SET CH375_RD LCALL CLOSE_CH375 RET


先做測試命令CHECK-EXIST命令成功之后在設置模式


謝謝,設置模式成功了!


測試命令CHECK-EXIST命令也成功了,謝謝指點!


在設置模式成功后,聯(lián)上U盤,應該會產(chǎn)生中斷吧? 接下來進行的磁盤初始化不能成功,請高手指點,謝謝! USB_INT:JB INT0,$ SETB INT0     MOV CH375_IN,#22H     LCALL CH375_INPUT_CMD     NOP     LCALL CH375_READ_DATA     CJNE CH375_OUT,#15H,USB_INT     MOV CH375_IN,#51H     LCALL CH375_INPUT_CMD     JB INT0,$ SETB INT0     MOV CH375_IN,#22H     LCALL CH375_INPUT_CMD     NOP     LCALL CH375_READ_DATA     CJNE CH375_OUT,#14H,U_I_STP ?。@示成功*/     MOV DPTR,#LOOP3     LCALL PUTSTR     RET U_I_STP:MOV DPTR,#LOOP4     ?。@示失?。?     LCALL PUTSTR     RET


初始化U盤按照下面的流程來操作: UINT8 mInitDisk( void ) { /* 初始化磁盤 */ UINT8 Status,i,j=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ Status = CH375_RD_DAT_PORT( ); if ( Status == USB_INT_DISCONNECT ) return( Status ); /* USB設備斷開 */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存儲器 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出現(xiàn)錯誤 */ while(1){j++; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯誤 */ mDelaymS( 250 ); if(j==5) return(Status); } CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ){ /* 出現(xiàn)錯誤 */ for(i=0;i!=5;i++){ printf("Ready\n"); CH375_WR_CMD_PORT( CMD_DISK_READY ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯誤 */ } } return( 0 ); /* U盤已經(jīng)成功初始化 */ }


請問,我對USB進行初始化時,不獲取USB存儲器的容量可以嗎?


輸入初始化命令后,總是得到?。玻茫龋恢?,這是什么狀態(tài)?


2CH是返回超時了,主要有下面幾種情況: 1,UD+,UD-串接的電阻太大,從而導致USB的UD+和UD-的電壓降的太多,從而不工作 2,中斷腳沒有連接的時候也是會出現(xiàn)這種情況的


但是,在UD+,UD-上,我沒串接電阻。 有時輸入初始化命令后,得到 20H。 有什么解決方法?


20H也是超時狀態(tài), 先在確定U盤連接后加數(shù)百毫秒延時


延時了400ms還是顯示2cH


哪位高手能幫幫忙,謝謝!


將你的程序發(fā)到技術信箱看下:tech@wch.cn


會不會是時序上的問題,我的U盤初始化的測試程序已經(jīng)發(fā)過去了。

還有硬件上的連接會不會引起U盤初始化失敗,我將CH375焊在通用板上,再于單片機模塊連接,布線不是很簡潔,D+,D-與CH375的連線就有點長。

請指教!


只有登錄才能回復,可以選擇微信賬號登錄

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