看了一段例程,其中下面一段沒太搞清楚 length = CH375_DAT_PORT; THIS_CMD_CODE = CH375_DAT_PORT;那么length=THIS_CMD_CODE ?還是說length里面存放的是上位機發(fā)送的第一個字節(jié),而THIS_CMD_CODE存放的第二個字節(jié)。謝謝幫忙解答一下 if ( InterruptStatus == USB_INT_EP2_OUT ) { /* 批量端點下傳成功 */ CH375_CMD_PORT = CMD_RD_USB_DATA; /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ Delay2us( ); /* 如果時鐘頻率低于16MHz則無需該指令延時 */ length = CH375_DAT_PORT; /* 首先讀取后續(xù)數(shù)據(jù)長度 */ if ( length != 0 ) { /* 如果長度為0則不處理 */ THIS_CMD_CODE = CH375_DAT_PORT; /* 保存當前命令碼,因為我們測試程序與PC機應用程序約定首字節(jié)為命令碼 */ if ( THIS_CMD_CODE == TEST_DOWNLOAD ) { /* 測試下傳速度 */ while ( --length != 0 ) /* 先減1以去掉首字節(jié)后 */ c1 = CH375_DAT_PORT; /* 接收數(shù)據(jù),為了測試速度,數(shù)據(jù)舍棄,24MHz的MCS51每讀取一個字節(jié)需要2uS */ }
length = CH375_DAT_PORT; --> mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A THIS_CMD_CODE = CH375_DAT_PORT --> mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A
上面的匯編假定length,THIS_CMD_CODE為data類型。其實你把CH375_DAT_PORT想成一個外部RAM就容易理解了。
謝謝您的回答,不過我還是沒搞清楚 mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A 這不就相當于把CH375_DAT_PORT中內(nèi)容給了length變量嗎? 而mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A 這不也相當于把CH375_DAT_PORT中內(nèi)容又給了THIS_CMD_CODE變量嗎? 這期間CH375_DAT_PORT中的值有改變嗎?如果沒有的話,那么length的值和THIS_CMD_CODE的值不還是應該相等的嗎? 問的可能有點傻,麻煩再幫忙解答一下
CH375_DAT_PORT中的值是改變的.第一次讀出來的是上位機下傳的數(shù)據(jù)長度,第二次讀出來的首字節(jié)是命令碼,看是進行上傳還是下傳,再接收或是發(fā)送數(shù)據(jù),長度為第一次讀出來保存的長度.
謝謝,我問的就是這個 另外我想知道,這種改變是怎么發(fā)生的,是只要你讀一個字節(jié)后,CH375_DAT_PORT中內(nèi)容就由硬件立即自動更新嗎
實際在C語言中可能是看不到這種變化的,你可以看下匯編代碼,實際匯編就很容易看出來怎么復值的了: MOV DPTR,#CH375_DAT_PORT MOVX A,@DPTR 這樣之后在將數(shù)據(jù)放到RAM里面去就可以了
謝謝樓上的,可能我匯編學的也很爛,我還是搞不明白 MOV DPTR,#CH375_DAT_PORT MOVX A,@DPTR 只要CH375_DAT_PORT中的值不變,那么讀進A累加器中的數(shù)據(jù)不都是一樣的嗎 loveapple說CH375_DAT_PORT中的值是改變的,我想知道這種改變是怎么發(fā)生的
CH375_DAT_PORT是外部地址啊!
呵呵,可能我這這問題太弱了,請別見笑啊 length = CH375_DAT_PORT; THIS_CMD_CODE = CH375_DAT_PORT; 這兩個程序先后執(zhí)行,將外部地址CH375_DAT_PORT中的內(nèi)容先后賦給length和THIS_CMD_CODE(這兩個變量得到的值應該不一樣吧) 我就想知道外部地址CH375_DAT_PORT中的值是依據(jù)什么改變的 比如說 mov dptr,#CH375_DAT_PORT movx A,@dptr mov length,A mov dptr,#CH375_DAT_PORT movx A,@dptr mov THIS_CMD_CODE,A 那么只要CH375_DAT_PORT中的值不改變,那么賦給length和THIS_CMD_CODE的值不就都一樣了嗎 還是說因為你執(zhí)行了length = CH375_DAT_PORT這條指令,外部地址CH375_DAT_PORT中的值就自動發(fā)生了改變
CH375_DAT_PORT的值實際上就是375端口上面的值,你只要讀取走了的話,值就會改變,自己仔細看下375的說明書
哦,我明白了,謝謝您的解答
我暈......估計很少用接口芯片。