是关于PIC单片机和上位机通信的一段程序:帮看下程序的正误号码?谢了! #include #include
#define nop() asm("nop") #define USB_INT_EP2_OUT 0x02 #define CMD_RESET_ALL 0x05 #define CMD_CHECK_EXIST 0x06 #define USB_INT_EP2_IN 0x0A #define CMD_GET_STATUS 0x22 #define CMD_UNLOCK_USB 0x23 #define CMD_RD_USB_DATA 0x28 #define CMD_RET_SUCCESS 0x51 #define CMD_SET_USB_MODE 0x15 #define CMD_WR_USB_DATA7 0x2B #define A0 RA0 #define WR RE1 #define RD RE0 #define CH375_PORT PORTD __CONFIG(0x3B31); void delayms(unsigned char ms) { unsigned char i,j; for(i=ms;i!=0;i--) for(j=110;j!=0;j--); } void CH375_WR_CMD_PORT(unsigned char cmd) { CH375_PORT=cmd; A0=1; TRISD=0XFF; RD=1; WR=0; nop(); WR=1; A0=0; TRISD=0X00; PORTD=0XFF; nop(); } void CH375_WR_DAT_PORT(unsigned char dat) { CH375_PORT=dat; A0=0; TRISD=0XFF; WR=0; nop(); WR=1; nop(); TRISD=0; PORTD=0XFF; nop(); } unsigned char CH375_RD_DAT_PORT() { unsigned char dat; nop(); TRISD=0; PORTD=0XFF; RD=0; nop(); dat=CH375_PORT; RD=1; CH375_PORT=0xFF; return(dat); } void init() { TRISD=0xFF; PORTD=0xff; TRISE=0; PORTE=0; TRISA=0; PORTA=0; INTEDG=0; INTCON=0x90; } void CH375_init() { unsigned char i; TRISD=0xff; PORTD=0; CH375_WR_CMD_PORT(CMD_CHECK_EXIST); CH375_WR_DAT_PORT(0x55); i=!0x55; if (CH375_RD_DAT_PORT()!=i) { for (i=80;i!=0;i--) { CH375_WR_CMD_PORT(CMD_RESET_ALL); TRISD=0; CH375_RD_DAT_PORT(); } TRISD=0XFF; CH375_WR_CMD_PORT(0); delayms(50); } TRISD=0XFF; CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_WR_DAT_PORT(0x02); for ( i=100; i!=0; i-- ) { TRISD=0; if (CH375_RD_DAT_PORT()==CMD_RET_SUCCESS) break; } RB0=0; INTF=0; ei(); } void CH375(void) { unsigned char IntStat; unsigned char k,len; unsigned char buffer[64]; CH375_WR_CMD_PORT(CMD_GET_STATUS); IntStat=CH375_RD_DAT_PORT(); switch(IntStat) { case USB_INT_EP2_OUT: { CH375_WR_CMD_PORT(CMD_RD_USB_DATA); len =CH375_RD_DAT_PORT(); for (k=0;k buffer[k]=CH375_RD_DAT_PORT(); CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(len); for (k=0;k CH375_WR_DAT_PORT(!buffer[k]); break; } case USB_INT_EP2_IN: { CH375_WR_CMD_PORT(CMD_UNLOCK_USB); break; } default: { CH375_WR_CMD_PORT(CMD_UNLOCK_USB); break; } } } void main(void) { delayms(50); init(); CH375_init(); GIE=1; while(1) { delayms(1); RB0=!RB0; } }