請(qǐng)教一段程序

請(qǐng)大家?guī)臀铱纯催@段程序,主要功能是完成372芯片對(duì)數(shù)據(jù)的接受和發(fā)送,本人是初學(xué)者,畢業(yè)設(shè)計(jì)師這方面的題目,希望大家多多指導(dǎo)。謝謝大家!

#include #include typedef unsigned char *PUINT8; typedef unsigned char UINT8; typedef unsigned char volatile xdata IOPORT; IOPORT CH372_CMD_PORT _at_ 0x9001; /*命令口地址*/ IOPORT CH372_DAT_PORT _at_ 0x9000; /*數(shù)據(jù)口地址*/

void Delay( ) /*延時(shí)程序*/ { UINT8 i; for ( i=3; i>0; i-- );

}

void CH372_WR_CMD_PORT(UINT8 cmd) /*向命令口寫(xiě)入命令(cmd=15h)*/ { Delay(); CH372_CMD_PORT=cmd; Delay(); } void CH372_WR_DAT_PORT(UINT8 dat) /*向數(shù)據(jù)口寫(xiě)入數(shù)據(jù)*/ { CH372_DAT_PORT=dat; Delay(); } UINT8 CH372_RD_DAT_PORT() /*讀取數(shù)據(jù)*/ { Delay(); return(CH372_DAT_PORT); }

void CH372_INIT() /*372初始化*/ { UINT8 i; CH372_WR_CMD_PORT(CMD_SET_USB_MODE); /*設(shè)置USB工作模式*/ CH372_WR_DAT_PORT(2); /*設(shè)置USB為內(nèi)置固件方式*/ for(i=100;i>0;i--) if(CH372_RD_DAT_PORT()==CMD_RET_SUCCESS) /*等待操作成功*/ break; IT1=1; /*外部中斷1低電平有效*/ IE1=0; /*清中斷標(biāo)志*/ EX1=1; /*允許372中斷(372已經(jīng)連接到單片機(jī)的INT1腳)*/ }

UINT8 UsbLength; /*USB緩沖區(qū)長(zhǎng)度*/ UINT8 UsbBuffer[CH372_MAX_DATA_LEN]; /*USB緩沖區(qū)*/

/* CH372中斷服務(wù)程序,假定CH372的INT#引腳連接到單片機(jī)的INT1,使用寄存器組1 */ void CH372Interrupt() interrupt 2 using 1 { PUINT8 buf; UINT8 cnt; UINT8 IntStatus; CH372_WR_CMD_PORT(CMD_GET_STATUS); /*獲取中斷狀態(tài)并取消中斷*/ IntStatus=CH372_RD_DAT_PORT(); /*獲取中斷狀態(tài)*/ IE1=0; switch(IntStatus){ case USB_INT_EP2_OUT: /*接收數(shù)據(jù)成功*/ CH372_WR_CMD_PORT(CMD_RD_USB_DATA); UsbLength=cnt=CH372_RD_DAT_PORT(); /*首先讀出數(shù)據(jù)塊的長(zhǎng)度*/ if(cnt) { buf=UsbBuffer; /*指針指向緩沖區(qū)*/ do { *buf=CH372_RD_DAT_PORT(); /*接收數(shù)據(jù)*/ buf++; }while(--cnt); } else break; case USB_INT_EP2_IN: /*發(fā)送數(shù)據(jù)成功*/ CH372_WR_CMD_PORT(CMD_WR_USB_DATA7); cnt=UsbLength; CH372_WR_DAT_PORT(cnt); /*首先寫(xiě)入數(shù)據(jù)塊長(zhǎng)度*/ if(cnt) { buf=UsbBuffer; /*指針指向緩沖區(qū)*/ do { CH372_WR_DAT_PORT(*buf); /*寫(xiě)入數(shù)據(jù)*/ buf++; }while(--cnt); CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); /*釋放緩沖區(qū)*/ } else break; default: CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } }

main() { CH372_INIT(); EA=1; while(1); }

現(xiàn)在是什么問(wèn)題?ch372上電先延時(shí)50ms


因?yàn)槲揖幍倪@段程序還沒(méi)有調(diào)試,也不知道接收和發(fā)送模塊有沒(méi)有編正確,不知道有沒(méi)有這方面的軟件可以仿真一下,謝謝!


是否正確,對(duì)照我們的例程也能比較出來(lái)啊,好像還沒(méi)有軟件可以仿真,調(diào)試一下試試 USB_INT_EP2_IN中無(wú)論是否有后續(xù)數(shù)據(jù),都需要解鎖,CH372_WR_CMD_PORT( CMD_UNLOCK_USB )位置不對(duì)


到我們網(wǎng)站上下載ch372evt.zip,下位機(jī)參考TEST.C程序,上位機(jī)下載ch372dbg.zip進(jìn)行調(diào)試


哪個(gè)CH372_WR_CMD_PORT( CMD_UNLOCK_USB )位置不對(duì)???因?yàn)橛袃蓚€(gè)地方出現(xiàn)了這個(gè)語(yǔ)句。


USB_INT_EP2_IN中:你的程序只有繼續(xù)上傳數(shù)據(jù)后,才會(huì)CMD_UNLOCK_USB,如果沒(méi)有數(shù)據(jù)上傳的話(huà),也是需要CMD_UNLOCK_USB的 if(cnt) { .... } CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); break;


謝謝?。『呛?!


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

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