[求助]用372實(shí)現(xiàn)PC與單片機(jī)通信為何一直發(fā)現(xiàn)不了USB設(shè)備??

請(qǐng)問做過(guò)PC機(jī)和單片機(jī)之間用372實(shí)現(xiàn)USB通信的兄弟,我的程序是按照別人寫的例程來(lái)寫的,基本沒改過(guò),芯片引腳是P2.0接A0,P2.6接CS#,int0接INT#,P3.6接WR#,P3.7接RD#,D0-D7直接接的P0.1—P0.7,但是卻總發(fā)現(xiàn)不了USB設(shè)備,郁悶的很,是不是硬件電路有問題?我以前沒怎么做過(guò)電路,基礎(chǔ)不是很好,這到底是怎么回事啊,保托各位知道的幫個(gè)忙,盡量說(shuō)的詳細(xì)點(diǎn)。以下是程序:

#include #include #include #include "CH375INC.H" #define uchar unsigned char

uchar volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 CS接P2.1,A0接P2.0,D0-D7連P0-P7*/ uchar volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375數(shù)據(jù)端口的I/O地址 */

/* 延時(shí)根據(jù)具體情況調(diào)節(jié) */ void delay3us( ) { unsigned char i; for ( i = 3; i != 0; i -- ); /* 根據(jù)單片機(jī)的時(shí)鐘選擇初值 */ }

/* 與CH375有關(guān)的基本I/O操作 */

void CH375_WR_CMD_PORT(uchar cmd) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ delay3us( ); CH375_CMD_PORT=cmd; delay3us( ); }

void CH375_WR_DAT_PORT(uchar dat) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ CH375_DAT_PORT=dat; //Delay(1); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ }

uchar CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ //Delay(1); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ return(CH375_DAT_PORT); }

/* 延時(shí)50毫秒,不精確 */ void Delay50ms( ) { unsigned char i, j; for ( i=200; i!=0; i-- ) for ( j=250; j!=0; j-- ); }

/* CH375初始化子程序 */ void CH375_Init( ) { uchar i; /* 測(cè)試CH375是否正常工作,可選操作,通常不需要 */ CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 測(cè)試CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 寫入測(cè)試數(shù)據(jù) */ i = ~ 0x55; /* 返回?cái)?shù)據(jù)應(yīng)該是測(cè)試數(shù)據(jù)取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT(0);

Delay50ms( ); /* 延時(shí)50ms */ }

/* 設(shè)置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_WR_DAT_PORT(2); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } /* if ( i==0 ) { CH375存在硬件錯(cuò)誤 }; */ /* 下述啟用中斷,假定CH375連接在INT0 */ IT0 = 0; /* 置外部信號(hào)為低電平觸發(fā) */ IE0 = 0; /* 清中斷標(biāo)志 */ EX0 = 1; /* 允許CH375中斷 */ }

/* CH375中斷服務(wù)程序,使用寄存器組1 */ void mCh375Interrupt( ) interrupt 0 using 1 { uchar InterruptStatus; uchar i, length; uchar data buffer[ 64 ];

CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請(qǐng)求 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 獲取中斷狀態(tài) */ switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點(diǎn)下傳成功 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = CH375_RD_DAT_PORT( ); /* 首先讀取后續(xù)數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_RD_DAT_PORT( ); /* 接收數(shù)據(jù)包 */ /* 測(cè)試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機(jī) */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( length ); /* 首先寫入后續(xù)數(shù)據(jù)長(zhǎng)度,回傳剛接收到的數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計(jì)算機(jī)應(yīng)用程序測(cè)試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } } }

/*主程序*/ main( ) { Delay50ms( ); /* 延時(shí)等待CH375初始化完成,如果單片機(jī)由CH375提供復(fù)位信號(hào)則不必延時(shí) */ CH375_Init( ); /* 初始化CH375 */ EA = 1; /* 允許中斷 */ while ( 1 ); /* 以下指令開始工作循環(huán),等待PC機(jī)命令進(jìn)行操作 */ }

首先,你得看看你的375是不是復(fù)位完全正常工作了;其次,你在初始化CH375的時(shí)候,發(fā)了測(cè)試命令也就是CMD_CHECK_EXIST返回的數(shù)據(jù)是0X55的取反0XAA嗎?如果不是的話,說(shuō)明你的硬件連線上還有問題.設(shè)置模式2成功了嗎? 還有就是你用來(lái)和PC機(jī)先連的線應(yīng)該是帶屏蔽的USB線.


謝謝,但是我不知道怎么確認(rèn)375是否復(fù)位完全正常工作了;其次,我根本連usb設(shè)備都找不到啊,怎么測(cè)試呢?按照說(shuō)明說(shuō),硬件連線應(yīng)該沒問題的。怎樣確認(rèn)設(shè)置的模式是否成功? 另外,用來(lái)和PC機(jī)相連的線是帶屏蔽的USB線.電腦城買的新線,插上去以后連點(diǎn)反應(yīng)都沒有,絕望了。。。


你用示波器打到乘10檔看晶振的波形,也就是看晶振有沒有起振正常工作.測(cè)試命令的話是用來(lái)測(cè)試你的單片機(jī)和372的硬件連線是不是正常,和你的PC機(jī)無(wú)關(guān),也就是CMD_CHECK_EXIST 這個(gè)命令,看返回的數(shù)據(jù)是0X55的取反0XAA嗎?模式是否設(shè)置成功的話,看發(fā)了命令: CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_WR_DAT_PORT(2); 看讀回來(lái)的狀態(tài)是不是CMD_RET_SUCCESS.如果你前面的 測(cè)試命令過(guò)了的話,也可以不用讀?。懿榭催@個(gè)狀態(tài).


確認(rèn)復(fù)位好不好以及晶振有沒有起振,只需要看下375的35腳和26腳的電壓就可以了,要是復(fù)位好以及晶振起振的話,那么25腳為低電平,26腳為高電平.


謝謝各位了,現(xiàn)在能找到設(shè)備了,但是卻出現(xiàn)提示“未識(shí)別的USB設(shè)備”,總是無(wú)法識(shí)別,裝了驅(qū)動(dòng)也沒有用啊 請(qǐng)各位知道的再給點(diǎn)建議,謝謝了?。?!


未識(shí)別的設(shè)備實(shí)際上還是你的模式?jīng)]有設(shè)置成功,你先按照上面說(shuō)的如果復(fù)位和晶振起振的話,那就做檢測(cè)命令,如果過(guò)了的話,那么設(shè)置好模式之后就應(yīng)該可以找到新的硬件并且會(huì)提示你裝驅(qū)動(dòng),如果這個(gè)時(shí)候不成功的話,仔細(xì)檢查你的USB連接線是否為屏蔽線,還有就是375的晶振是否為12M以及UD+和UD-有沒有接反?


我用的是372,這個(gè)好像是內(nèi)部有上電復(fù)位的吧,晶振和連線都沒有問題,請(qǐng)問是不是我的程序有問題?。楷F(xiàn)在仍然是無(wú)法識(shí)別設(shè)備


那你的測(cè)試程序可以通過(guò)嗎?不通過(guò)的話就沒辦法識(shí)別到新硬件,即使識(shí)別到的話也是無(wú)法識(shí)別的新硬件


啊,還要測(cè)試啊,--我沒測(cè)試哦,不好意思啊,我不知道怎么測(cè)試-。能不能在程序里面把測(cè)試省略掉?請(qǐng)問程序的其他部分有沒有問題?


hehe不要著急,慢慢來(lái)啊,我一開始也遇到很多問題,最后也慢慢解決了 現(xiàn)在,我這邊使用的是mega128單片機(jī)+ch375,已經(jīng)搞定了master和slave 今天剛剛寫完slave的上位機(jī)軟件,呵呵,我現(xiàn)在在家也沒有程序,明天再看看啦, 如果你還是沒搞定,就聯(lián)系我吧,


謝謝啦,還沒搞定啊,不過(guò)我會(huì)堅(jiān)持下去的。我用的s52單片機(jī)+372,現(xiàn)在只是在做借口部分的實(shí)驗(yàn),其他數(shù)據(jù)采集部分早已經(jīng)做好了,因?qū)熞覕U(kuò)展接口,并且要用USb,等接口實(shí)驗(yàn)做好了,在考慮怎么加上去。如果你方便的話,請(qǐng)你幫我看看程序,硬件電路的連接,我都在上面給出了,另外我的郵箱是個(gè)人信息保護(hù),已隱藏,有什么好的程序能共享的就給我發(fā)一點(diǎn)吧,不勝感激?。?/p>


測(cè)試程序你可以下載CH372EVT。ZIP,里面有例子程序提供的


可是我按照例子程序來(lái)的卻怎么也沒有反應(yīng),結(jié)果還是一樣無(wú)法識(shí)別,謝謝各位的幫助,我再重新做一遍試試吧,堅(jiān)持就是勝利!


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

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