如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
USB-固件程序详细注解(一)USB的程序真是浩大,不过还好不用自己写了,花下时间读下来就行了,我从主函数main()读起,不懂的就查前面的函数和定义,为这个伟大的工程努力,不过还好自己买了周立功的书,书上有中文注释,我尽量打上去,不过圈圈写的程序和书上有些不同,也要自己慢慢找,希望我贴出来的程序对大家有帮助,欢迎指正.voidmain(void){unsignedshortID;unsignedcharhigh,low;init_port();init_special_interrupts();init_flags();ID=D12_ReadChipID();high=(unsignedchar)(ID>>8);low=(unsignedchar)ID;reconnect_USB();while(TRUE){if(bEPPflags.bits.bus_reset){DISABLE;bEPPflags.bits.bus_reset=0;ENABLE;//D12SUSPD=1;}/*if(bEPPflags.bits.suspend){DISABLE;bEPPflags.bits.suspend=0;ENABLE;if(D12SUSPD==1){D12SUSPD=0;P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;D12SUSPD=1;PCON|=0x02;while(1);}}//ifsuspendchange*/if(bEPPflags.bits.setup_packet){DISABLE;bEPPflags.bits.setup_packet=0;ENABLE;control_handler();//D12SUSPD=1;}//ifsetup_packetif(bEPPflags.bits.configuration)IspControl();}//MainLoop}voidinit_port(){P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;//D12SUSPD=0;}voidinit_special_interrupts(void){EA=1;IT1=0;EX1=1;PX1=1;}voidinit_flags(){bEPPflags.bits.bus_reset=0;bEPPflags.bits.suspend=0;bEPPflags.bits.setup_packet=0;bEPPflags.bits.remote_wakeup=0;bEPPflags.bits.in_isr=0;bEPPflags.bits.control_state=0;bEPPflags.bits.configuration=0;bEPPflags.bits.ep1_rxdone=0;bEPPflags.bits.main_rxdone=0;}/*//*************************************************************************//structureanduniondefinitions//**************************************************************************/typedefunion_epp_flags{struct_flags{//unsignedchartimer:1;//时间溢出unsignedcharbus_reset:1;//总线复位标志unsignedcharsuspend:1;//挂起改变标志unsignedcharsetup_packet:1;//收到setup包unsignedcharremote_wakeup:1;//远程唤醒标志(未使用)unsignedcharin_isr:1;//USB中断标志unsignedcharcontrol_state:2;//控制端点处理状态//0:空闲//1:数据发送//2:数据接收unsignedcharconfiguration:1;//配置标志(0:未配置;1:已经配置)//unsignedcharverbose:1;unsignedcharep1_rxdone:1;//端点1收到数据标志unsignedcharmain_rxdone:1;//主端点收到数据标志unsignedcharsetup_dma:2;//V2.3//unsignedchardma_state:2;