[求助]hcn,向你求助,帮我解释一下你们的那个控制鼠标的程序

主程序:

main() { mInitSTDIO( );//设置波特率为9600 delayms(250); if(modify_baudrate(0x03,0xcc)!=1)err(); if(set_usb_mode( 6 )!=1)err(); #ifdef TEST_LOW_SPEED set_freq(0x01); //work in 1.5M /* 设置系统工作频率 */ delayms(5); TR1 = 0; TH1 = 0xf8; /* 22.1184MHz晶振, 115200bps 修改波特率为14400*/ TR1 = 1; #endif while(1) { while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待设备端连接上来 */ delayms(5); reset_device(); delayms(5); get_descr(0x01); set_addr(5); get_descr(0x02); parse_config_descr(); set_config(config_value); if(set_idle()!=1) err(); Request.Req.bmRequestType=0x81; Request.Req.bRequest=0x06; Request.Req.wValue=0x0022; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0000|((unsigned int)(report_descr_len+0x40)<<8); if(get_report_descr_ex()==1) {} else err(); if(set_report()!=1) err(); delayms(250); EA=1; //打开中断,从中断端点接收数据 get_int_in(); //发送从中断端点读数据的令牌 do{ if(flag_output==1) { P1_2^=0x01; flag_output=0; } }while(1); while ( wait_interrupt()!=USB_INT_DISCONNECT ); /* 等待设备端连接上来 */ } }

中断程序:

void intt0() interrupt 2 { unsigned char len_temp,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ status=CH375_RD_DAT_PORT(); if(status!=USB_INT_SUCCESS) //&&((status&0xf0)==0x20)) { CH375_WR_CMD_PORT( CMD_CLR_STALL ); CH375_WR_DAT_PORT(1); endp6_mode=0x80; endp7_mode=0x80; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } else { len_temp=rd_usb_data(data_buf); for(i=0;i!=len_temp;i++) { data_in[i]=data_buf[i]; } flag_output=1; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } }

hcn,我想问你,你给我的这个控制鼠标的程序是怎么实现对鼠标热插拨的,我怎么也看不明白.

我说一下我的理解: 在主程序的 do{ }while(1) 这个循环的是: 鼠标有动作,就闪一次灯. 还有就是中断程序: 鼠标拨出后,我想中断程序应该会接收到这个 USB_INT_DISCONNECT 状态码,表明鼠标已被拨出.

我认为鼠标拨出了之后,应该要跳出主程序中那个 do{ }while(1) 循环,再次等待鼠标插上,但是这个循环中没有跳出循环的条件语句,我不明白了!

还有主程序的最后一句,即那个等待循环的作用是什么?

hcn,希望你能给我解释一下!

最后一句你把他去掉


hcn,麻烦你说一下鼠标拨去后,程序是怎样再次等待鼠标插上的,上面的程序我不明白.

我下面这的理解对不对,麻烦你看一下: 我说一下我的理解: 在主程序的 do{ }while(1) 这个循环的是: 鼠标有动作,就闪一次灯. 还有就是中断程序: 鼠标拨出后,我想中断程序应该会接收到这个 USB_INT_DISCONNECT 状态码,表明鼠标已被拨出.

我认为鼠标拨出了之后,应该要跳出主程序中那个 do{ }while(1) 循环,再次等待鼠标插上,但是这个循环中没有跳出循环的条件语句,我不明白了!


hcn,你在吗


是这样的,在鼠标拔出之后,375会检测设备的拔出,会产生中断,这个时候产生了中断状态是USB设备拔出的中断状态,你可以将程序修改为查询的方式或者是在那个死循环里面将一个中断状态的判断不就可以了


只有登录才能回复,可以选择微信账号登录