急問(wèn)一個(gè)問(wèn)題??!

1. 問(wèn)一下:CH372EVT里面有C++寫(xiě)的CH372UPDownDlg有數(shù)據(jù)端點(diǎn)2的下傳、數(shù)據(jù)端點(diǎn)2的上傳和中斷端點(diǎn)1的上傳,我想問(wèn)的是我在下位機(jī)以批量端點(diǎn)2發(fā)送數(shù)據(jù)(上位機(jī)只是讀數(shù)據(jù)),我只用你們的數(shù)據(jù)端點(diǎn)2的上傳對(duì)話框能不能讀到下位機(jī)送來(lái)的數(shù)???如果不行是什么原因??

[Emot]1[/Emot]

應(yīng)該可以,不過(guò)你的下位機(jī)程序要加一條命令就可以了,你在初始化372之后加上下面的程序就可以實(shí)現(xiàn)直接上傳而不需要先下傳在上傳:while(1){ /*用來(lái)確定主機(jī)是否準(zhǔn)備好*/ Delay50ms(); CH375_WR_CMD_PORT(0x0a);//GET_TOGGLE命令 CH375_WR_DAT_PORT(0x20); c=CH375_RD_DAT_PORT(); if((c&0x20)==0x20)break; } 因?yàn)槟阆壬蟼鞯脑?,上位機(jī)不知道你是否準(zhǔn)備好,所以先要知道上位機(jī)準(zhǔn)備好了沒(méi)有,如果準(zhǔn)備好了就可以發(fā)送了


根據(jù)你寫(xiě)的C我寫(xiě)的匯編如下:AGAIN: MOV DPTR,#CH375_CMD_PORT MOV A, #CMD_GET_TOGGLE MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOV A,#0X20 MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOVX A, @DPTR ANL A,#20H JZ AGAIN 對(duì)不對(duì)????? 還有同步就說(shuō)明上位機(jī)準(zhǔn)備好了?。???


對(duì)了不是20H吧????應(yīng)該是10H,這樣才是位4,20H是位5了?。?/p>


不是同步的意思,這個(gè)命令就是先給計(jì)算機(jī)發(fā)一個(gè)數(shù)據(jù)下去,如果計(jì)算機(jī)返回的數(shù)據(jù)的位5為1的話,那就說(shuō)明計(jì)算機(jī)準(zhǔn)備好了


再問(wèn)一下:為什么是位5?還有我的匯編程序是不是對(duì)的?謝謝!


程序這樣寫(xiě): AGAIN: MOV DPTR,#CH375_CMD_PORT MOV A, #CMD_GET_TOGGLE MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOV A,#0X20 MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOVX A, @DPTR ANL A,#20H CJNE A,#20H AGAIN


我試了一下,讀不了數(shù)!奇怪的是我的數(shù)據(jù)采集也不能工作了?。。? 程序如下: STACK EQU 50H ;堆棧區(qū)棧頂(向上延伸) CMD_GET_TOGGLE EQU 0AH CH372_CMD_PORT EQU 0BDF1H ;CH372命令口的地址,地址譯碼后自動(dòng)片選 CH372_DAT_PORT EQU 0BCF0H ;CH372數(shù)據(jù)口的地址,地址譯碼后自動(dòng)片選 CMD_SET_USB_MODE EQU 15H ;設(shè)置USB工作模式的命令代碼 CMD_RET_SUCCESS EQU 51H ;設(shè)置操作成功的命令代碼 CMD_UNLOCK_USB EQU 23H ;設(shè)備方式: 釋放當(dāng)前USB緩沖區(qū) CMD_GET_STATUS EQU 22H ;獲取中斷狀態(tài)并取消中斷請(qǐng) USB_INT_EP2_IN EQU 0AH ;USB端點(diǎn)2的IN CMD_WR_USB_DATA7 EQU 2BH ;向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 ; 定義位標(biāo)志 FLAG_SEND_WAIT BIT 20H.1 ;發(fā)送等待標(biāo)志,1指示有數(shù)據(jù)塊正在CH372中等待發(fā)送 ;**************************************************************************** ; ;對(duì)外接口子程序 ; ; 1. CH372_INIT 初始化子程序 ; USE: ACC, R7, DPTR ; ; 2. CH372_UPLOAD 上傳數(shù)據(jù)塊子程序(通過(guò)批量端點(diǎn)上傳) ; ENTRY: R0 指向存放了準(zhǔn)備上傳數(shù)據(jù)的緩沖區(qū), R7 準(zhǔn)備上傳的數(shù)據(jù)長(zhǎng)度, 有效數(shù)值是0到64 ; USE: ACC, R0, R7, DPTR ;**************************************************************************** ;主程序 ORG 0000H ;復(fù)位后單片機(jī)入口 LJMP START ORG 0003H ;CH372中斷 LJMP CH372_INTER

START: ; 以下初始化指令不是必要的,將單片機(jī)恢復(fù)為默認(rèn)狀態(tài) CLR EA ;關(guān)中斷 MOV SP,#STACK ;置堆棧初值 MOV A,#0FFH MOV P0,A MOV P1,A ;清端口狀態(tài) MOV P2,A MOV P3,A CLR A MOV IE,A ;清中斷允許控制寄存器 MOV IP,A ;清中斷優(yōu)先級(jí)控制寄存器 MOV PSW,A ;清程序狀態(tài)字 MOV TCON,A ;清定時(shí)器/計(jì)數(shù)器控制寄存器 MOV TMOD,A ;清定時(shí)器/計(jì)數(shù)器工作方式寄存器 MOV PCON,A ;清電源控制寄存器 MOV R7,#0FFH CALL DELAY_MS ;延時(shí)等待CH372初始化完成 CALL CH372_INIT ;初始化 SETB EA ;允許中斷 WAIT_REQUEST: NOP CALL CH372_UPLOAD LJMP WAIT_REQUEST ;主循環(huán) ; 初始化子程序 ; USE: ACC, R7, DPTR CH372_INIT: CLR FLAG_SEND_WAIT ;清發(fā)送等待標(biāo)志,1指示有數(shù)據(jù)塊正在CH372中等待發(fā)送 CLR P2.6 SETB P2.5 SETB P2.4 ; 設(shè)置USB工作模式 MOV DPTR,#CH372_CMD_PORT ;命令口地址 MOV A,#CMD_SET_USB_MODE MOVX @DPTR,A ;設(shè)置USB工作模式 ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) MOV DPTR,#CH372_DAT_PORT ;數(shù)據(jù)口地址 MOV A,#02H MOVX @DPTR,A ;設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) CH372_INIT_WT: MOVX A,@DPTR ;返回操作狀態(tài) XRL A,#CMD_RET_SUCCESS JNZ CH372_INIT_WT ;等待操作成功,通常需要等待10uS-20uS ; 下述三條指令用于啟用中斷 CLR IT0 ;置外部信號(hào)為低電平觸發(fā) SETB PX0 ;置高優(yōu)先級(jí) CLR IE0 ;清中斷標(biāo)志 SETB EX0 ;允許CH372中斷 RET

; 上傳數(shù)據(jù)塊子程序(通過(guò)批量端點(diǎn)上傳) ; ENTRY: R0 指向存放了準(zhǔn)備上傳數(shù)據(jù)的緩沖區(qū), R7 準(zhǔn)備上傳的數(shù)據(jù)長(zhǎng)度, 有效數(shù)值是0到64 ; USE: ACC, R0, R7, DPTR CH372_UPLOAD: NOP ;為了防止計(jì)算機(jī)程序沒(méi)有讀取數(shù)據(jù)而導(dǎo)致單片機(jī)一直在此等待,可以計(jì)算超時(shí),參考CH372_UP_INT子程序 JB FLAG_SEND_WAIT,CH372_UPLOAD ;如果正在等待發(fā)送(前次發(fā)送尚未完成)則繼續(xù)等待,超過(guò)正常應(yīng)該取走數(shù)據(jù)的時(shí)間未取走數(shù)據(jù)則認(rèn)定為超時(shí),可以跳出等待 CLR EX0 ;為了防止中途被中斷而亂了順序,必須先禁止中斷 ;數(shù)據(jù)采集 MOV R3,#10H;設(shè)定上傳的字節(jié)數(shù) MOV R1,#38H;設(shè)定數(shù)據(jù)上傳的首地址 MOV R2,#04H;置通道數(shù) LOOP_O: MOV DPTR,#3FF8H;選通2.7,且指向通道0 LOOP:MOVX @DPTR,A;啟動(dòng)A/D轉(zhuǎn)換 WAIT:JB P1.0,WAIT;采用查詢方式,等待A/D轉(zhuǎn)換結(jié)束 MOVX A,@DPTR;讀取數(shù)據(jù) MOV @R1,A;存儲(chǔ)數(shù)據(jù) INC R1 INC DPL DJNZ R3,LOOP;循環(huán)采集完16個(gè)數(shù)據(jù) DJNZ R2,LOOP_O; AGAIN: MOV DPTR,#CH375_CMD_PORT MOV A, #CMD_GET_TOGGLE MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOV A,#0X20 MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOVX A, @DPTR ANL A,#20H JZ AGAIN MOV R0,#38H MOV R7,#40H CH372_UPLOAD_1: MOV DPTR,#CH372_CMD_PORT ;命令口地址 MOV A,#CMD_WR_USB_DATA7 MOVX @DPTR,A ;向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) MOV DPTR, #CH372_DAT_PORT ;數(shù)據(jù)口地址 MOV A,#40H MOVX @DPTR,A ;首先寫(xiě)入后續(xù)數(shù)據(jù)長(zhǎng)度 CH372_INT_SEND: MOV A,@R0 MOVX @DPTR,A ;發(fā)送數(shù)據(jù) INC R0 DJNZ R7,CH372_INT_SEND ;繼續(xù)發(fā)送數(shù)據(jù)直至結(jié)束 SETB FLAG_SEND_WAIT ;置等待發(fā)送標(biāo)志 SETB EX0 ;允許中斷 RET ; 中斷服務(wù)子程序 ; USE: 堆棧8字節(jié) CH372_INTER: PUSH PSW ;現(xiàn)場(chǎng)保護(hù) PUSH ACC PUSH DPL PUSH DPH MOV DPTR,#CH372_CMD_PORT ;命令口地址 MOV A,#CMD_GET_STATUS MOVX @DPTR,A ;獲取中斷狀態(tài)并取消中斷請(qǐng)求 ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) ; NOP ;如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) MOV DPTR,#CH372_DAT_PORT ;數(shù)據(jù)口地址 MOVX A,@DPTR ;返回操作狀態(tài) CLR IE0 ;清中斷標(biāo)志,對(duì)應(yīng)于INT0中斷 CH372_INT_1: CJNE A,#USB_INT_EP2_IN,CH372_INT_RET ;批量端點(diǎn)上傳成功,發(fā)送數(shù)據(jù)成功 CH372_INT_RET: MOV DPTR,#CH372_CMD_PORT ;命令口地址 MOV A,#CMD_UNLOCK_USB MOVX @DPTR,A ;釋放當(dāng)前USB緩沖區(qū) POP DPH POP DPL POP ACC POP PSW ;恢復(fù)寄存器 RETI ;********************************************************************************************

; 以毫秒為單位延時(shí) ; ENTRY: R7 延時(shí)毫秒數(shù) ; USE: ACC, R7 DELAY_MS: MOV A,#0FAH ;250*(1*6+2)*0.5=1000uS DELAY_1MS: NOP NOP NOP NOP NOP NOP DJNZ ACC,DELAY_1MS ;每周期延時(shí)1毫秒 DJNZ R7,DELAY_MS RET ;******************************************************************************************** END


你將你的AGAIN: MOV DPTR,#CH375_CMD_PORT MOV A, #CMD_GET_TOGGLE MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOV A,#0X20 MOVX @DPTR,A MOV DPTR,#CH375_DAT_PORT MOVX A, @DPTR ANL A,#20H CJNE A,#20H AGAIN 程序放到主程序開(kāi)始的時(shí)候你看可以不可以


你是說(shuō)放在設(shè)置工作模式之前嗎??


放在設(shè)置模式之后


還是不行?。?!麻煩你仔細(xì)看看我這個(gè)問(wèn)題到底出在哪兒???


到底是什么地方有問(wèn)題?。?? 我加上這段程序后在上傳數(shù)據(jù)塊子程序(通過(guò)批量端點(diǎn)上傳)之前和之后都不能工作!!數(shù)據(jù)采集同樣不能工作,如果不加數(shù)據(jù)采集工作?。≌?qǐng)HCN幫忙看看??!


那你就要檢查你采集數(shù)據(jù)的地址和375的地址有沒(méi)有地址沖突。


可是我能初始化,如果地址有沖突應(yīng)該不能初始化!??!


你初始化的時(shí)候并沒(méi)有操作采集系統(tǒng)?。∵@樣的話就在后面有問(wèn)題了啊,也有客戶開(kāi)始用我們的372沒(méi)問(wèn)題,但是一接上LCD就出問(wèn)題了啊


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

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