中斷傳輸問(wèn)題

我想用下位機(jī)以中斷傳輸方式通知上位機(jī)程序動(dòng)做,可是不太穩(wěn)定,有時(shí)上位機(jī)可以收到中斷但數(shù)據(jù)都為0,有時(shí)程序就死掉了。不知什么原因,網(wǎng)上也沒(méi)有更多的關(guān)于中斷傳輸資料供參考。批量上傳下傳都沒(méi)問(wèn)題。請(qǐng)指教,謝各位大俠!

\\以下是下位機(jī)部份關(guān)鍵代碼,其它略

while(1) { if(!Key1){ //當(dāng)key1按下通知上位機(jī)軟件動(dòng)做 EX0 = 0; //CH372中斷INT連接單片機(jī)中斷INT0 CH375_WR_CMD_PORT(CMD_WR_USB_DATA5);//用中斷傳輸通知PC Delay2us( ); cnt=8; CH375_WR_DAT_PORT(cnt); //發(fā)送8個(gè)字節(jié) do{ CH375_WR_DAT_PORT(0xa5); }while(--cnt); EX0 = 1; } }

\\以下是上位機(jī)VB部份關(guān)鍵代碼 private Sub Form_Load()

'--其它代碼略 '-- '-- '-- mIndex=0 mCallInt

End Sub

Public Sub mCallInt()'此段代碼在模塊里 Dim x As Boolean x = CH375SetIntRoutine(mIndex, AddressOf mInterruptEvent) '調(diào)用中斷子程序 End Sub

'此段代碼在模塊里 Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中斷服務(wù)程序 Dim bool As Boolean bool = PostMessage(FormMain.hwnd, WM_KEYDOWN, 1, 0)' 中斷特征數(shù)據(jù)1則鍵被按下 End Sub

Private Type DATA_PACKET ' 自定義的命令包結(jié)構(gòu) dat(8) As Byte ' 參數(shù) End Type

'模擬調(diào)用窗體的按鍵按下事件 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim i As Integer Dim rbuf as DATA_PACKET CH375ReadInter 0, rbuf, 8 Cls For i = 0 To 8 Print rbuf.dat(i) Next End Sub

如果使用了CH375SetIntRoutine就不能使用CH375ReadInter,可以用CH375ReadData,下位機(jī)中斷端點(diǎn)上傳成功之后可以通過(guò)端點(diǎn)2來(lái)發(fā)數(shù)據(jù),這樣的話(huà)CH375ReadData就可以讀到數(shù)據(jù)了.


另,下位機(jī)程序只要有鍵按下,就會(huì)上傳數(shù)據(jù),沒(méi)有判斷前一次是否傳成功,在上傳之前要等待前一次上傳成功以后,才能繼續(xù)上傳。


非常感謝! 現(xiàn)在可以正常的收到中斷,但反應(yīng)有5S左右,這時(shí)間也太長(zhǎng)了吧。 用CH375ReadData應(yīng)該可以收到8個(gè)字節(jié)的數(shù)據(jù)吧,現(xiàn)在收到的數(shù)據(jù)還是全為0。


CH375ReadData是收端點(diǎn)2發(fā)送的數(shù)據(jù),最大可以收64個(gè)字節(jié),你下位即里端點(diǎn)1傳完8個(gè)字節(jié)成功后再傳通過(guò)端點(diǎn)2來(lái)發(fā)數(shù)據(jù),mInterruptEvent(ByRef mBuffer As INT_PARA) 函數(shù)調(diào)用結(jié)束后那8個(gè)字節(jié)的數(shù)據(jù)就沒(méi)有了,實(shí)際上已經(jīng)被中斷讀走了,mBuffer里就是指向的那8個(gè)數(shù)據(jù),但是mInterruptEvent函數(shù)調(diào)用結(jié)束后mBuffer就無(wú)效了,反應(yīng)有5S左右應(yīng)該是你設(shè)置超時(shí)5秒,然后CH375ReadData沒(méi)收到數(shù)據(jù),等待了5秒鐘.


原來(lái)如此!很好,謝謝了!


問(wèn)題又來(lái)了 有時(shí)可以接收到數(shù)據(jù),有時(shí)設(shè)備插拔事件處理程序 pnpproce_KeyUp 提示 **CH372/CH375設(shè)備已拔出,然后就反應(yīng)了。昨天還好好的,郁悶!

//單片機(jī)部份代碼 while(1){ if(!key) { delayMs(300); EX0 = 0; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5);//用中斷傳輸方式通知上位機(jī)接收數(shù)據(jù)。 Delay2us(); CH375_WR_DAT_PORT(1); //寫(xiě)入數(shù)據(jù)長(zhǎng)度 CH375_WR_DAT_PORT(0xa5); EX0 = 1;

Delay2us(); CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); //上傳數(shù)據(jù) Delay2us(); cnt=64; CH375_WR_DAT_PORT(cnt); //寫(xiě)入數(shù)據(jù)長(zhǎng)度 do{ CH375_WR_DAT_PORT(cnt); }while(--cnt);

//EX0 = 1; } }

//VB部份代碼 '模擬調(diào)用窗體的按鍵按下事件 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim i As Integer Dim rbuf as DATA_PACKET CH375ReadData 0, rbuf, 64 Cls For i = 0 To 63 Print rbuf.dat(i) Next End Sub


用USB屏蔽線,并且屏蔽線接地試試.


我覺(jué)得應(yīng)該是程序的問(wèn)題,批量上傳下傳都沒(méi)問(wèn)題,就是中斷上傳時(shí)候老是不穩(wěn)定,最好給個(gè)例子,謝了!


如果提示"CH372/CH375設(shè)備已拔出",一般來(lái)講都是下位機(jī)程序這邊的問(wèn)題,或者是沒(méi)有用屏蔽線造成的,在ch372evt.zip中的ch372evt\vb中有個(gè)vb的例子.


我反復(fù)更換過(guò)三種不同質(zhì)量的屏蔽線,而且批量上傳下傳都沒(méi)問(wèn)題,排除線的問(wèn)題。 如果是下位機(jī)程序有問(wèn)題請(qǐng)幫忙看下上面寫(xiě)的程序哪個(gè)地方有問(wèn)題。 ch372evt.zip 里VB例子BULK、DEMO中沒(méi)找到有中斷傳輸數(shù)據(jù)的例子,只有不帶數(shù)據(jù)的中斷響應(yīng)例子。


首先,你的程序上面肯定有問(wèn)題. 其一,在你通過(guò)中斷端點(diǎn)上傳數(shù)據(jù)之后,每次寫(xiě)8個(gè)數(shù)據(jù)之后需要你等待372中斷之后解鎖之后在發(fā)送第2包數(shù)據(jù). 其二,你的程序在每次發(fā)送的時(shí)候只能是發(fā)送一次,不能先寫(xiě)中斷端點(diǎn)在寫(xiě)批量端點(diǎn)


CH372 中斷問(wèn)題搞了好久還是沒(méi)能搞定,崩潰了, 幫幫看看我的程序倒底哪錯(cuò)了。 我的目的很簡(jiǎn)單,下位機(jī)以偽中斷方式通知PC機(jī)接數(shù)據(jù),可就是不穩(wěn)定,有時(shí)可以收到數(shù)據(jù),有時(shí)上位提示設(shè)備拔出。 批量下傳和上傳都沒(méi)問(wèn)題,線沒(méi)問(wèn)題。

MCU STC12C5410AD 24M晶振

附件:下位機(jī)程序keil C 和 VB上位機(jī)程序 UploadImages/200911515462697.zip


你先用一個(gè)叫bushound的軟件監(jiān)視一下,數(shù)據(jù)是否真的上傳上來(lái),要確定"有時(shí)可以收到數(shù)據(jù)"是數(shù)據(jù)沒(méi)上傳上來(lái),還是你的編程造成的.你可以留個(gè)郵箱,我把這個(gè)軟件發(fā)給你


你的下位機(jī)也有問(wèn)題,讀寫(xiě)函數(shù)的時(shí)序有問(wèn)題 請(qǐng)參考CH372EVT\PUB\TEST\MCU\TEST.C的時(shí)序


看了你的程序,A0變化很有問(wèn)題,寫(xiě)數(shù)據(jù)的時(shí)候一定要在CS=1之后再把A0拉高,否則就有可能導(dǎo)致CH372在采樣的時(shí)候認(rèn)為是命令,如果遇到數(shù)據(jù)0X05的時(shí)候,這樣就會(huì)導(dǎo)致CH372復(fù)位,所以你會(huì)看到設(shè)備已經(jīng)被拔出了,目前分析可能是這個(gè)原因?qū)е碌?你測(cè)試一下.


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

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