#define_E_BIKE_W79E83X_C_#includeintrins.h#includeE_BIKE_W79E83X.H#includeW79E834.h/******************************************************************************主函数******************************************************************************/voidmain(void){Init();//初始化Init_IO();//初始化端口H_Sample();//霍尔信号采样Phase_Change();//相位变换AutoHelpEN(1,0x1AA,200);/*第一个参数设定助力功能允许与否,1为允许,0为禁止第二个参数设定助力力量(PWM占空比),数值范围:0~0x355,数值越大,力量越大第三个参数设定助力时间,数值越大,时间越长*/Keep_SpeedEN(1,0x20,6);/*第一个参数设定定速巡航功能允许与否,1为允许,0为禁止第二个参数设定定速巡航最低速设置第三个参数设定在巡航点保持多长时间后才进入巡航*/Current_Lim(0xB48);/*过流保护上限值设定0xB00对应限电流最大大约为2.6A0xB80对应限流值最大大约为3.8A*/LowVoltage_Lim(0x9B0);/*欠压保护下限值设定电池电压为47.9V时ADC采样值为0xB6==0xB60推算电池电压为41V时的采样值为0x9B==0x9B0推算电池电压为40V时的采样值为0x98==0x980*/EABS_Set(1,1);/*第一个参数为滑行充电功能使能,1为允许,0为禁止第二个参数为电刹车功能使能,1为允许,0为禁止*/Speed_LimHW(0,0,0,1);/*硬件控制最大速度参数只能有一个为1。第一个参数对应15km/h第二个参数对应20km/h第三个参数对应30km/h第四个参数对应40km/h*/Speed_LimSW(0x01);/*软件控制最大速度参数数值由0x00~0x20,数值越小速度越大,反之则越小*/while(1){_nop_();//AutoHelpEN(0,0x1AA,100);//Keep_SpeedEN(1,0x20,6);//Current_Lim(0xB50);//LowVoltage_Lim(0x9B0);//EABS_Set(0,0);//Speed_LimHW(0,0,0,1);}}/*******************************************************************************I/O端口初始化******************************************************************************/voidInit_IO(void){//------P0端口设置------//P0M1=0xBE;P0M2=0x01;/*P0M1.YP0M2.Y=00设置I/O端口为普通双向模式P0M1.YP0M2.Y=01设置I/O端口为推拉模式P0M1.YP0M2.Y=10设置I/O端口为输入(高阻)模式P0M1.YP0M2.Y=11设置I/O端口为开漏模式*///P0ID=0x78;//设置四个AD端口0数字输入禁止P0=0xFF;//------P1端口设置------//P1M1=0x1C;P1M2=0xC0;P1=0xFF;//------P2端口设置------//P2M1=0x01;P2M2=0x1E;P2=0xFF;}/*******************************************************************************初始化程序******************************************************************************/voidInit(void){unsignedchari;//------PWM设置------////PWMPPWMn高电平,反之低电平PWMPH=0X03;PWMPL=0X55;PWM0H=0X00;PWM0L=0X00;PWM1H=0X00;PWM1L=0X00;PWM2H=0X00;PWM2L=0X00;PWMCON1=0XC7;//打开PWM电路,三个PWM口反相输出PWMCON3=0xF0;//------飞车保护--------//EA=1;/*do{ADCCON=1;ADCCON&=0xef;ADCCON|=0x08;ADC_Ready=0;while(ADC_Ready);}while(ADCH0x60);*///-----相位检测-------//while(P02==0){H_Sample();Phase_Detect();}//------变量初始化------//for(i=0;i32;i++){Current_Buffer[i]=0;}for(i=0;i20;i++){Speed_Buffer[i]=0;}for(i=0;i16;i++){Voltage_Buffer[i]=0;}Current_P=0;Speed_P=0;Voltage_P=0;;Speed_SUM=0;//PWM_MAX=0;Current_SUM=0;Voltage_SUM=0;H_State=0;Old_State=0;PWM_Duty=0;//PWM_MAX=0;Count_Current=0;Count_Speed=0;Count_Voltage=0;Speed_REQ=0;Current_REQ=0;Voltage_REQ=0;ADC_Ready=0;//PWM_Duty=0;PWM_Duty_min=0;//*********************KeepSpeed_Flag=0;KS_Z1=0;KS_Z2=0;Motor_Speed=0x50;//*********************AutoHelp_Flag=0;Current_Max=0xcffe;Speed_Low=0x0500;//Speed_High=0x1c37;//Speed_MAX=0x1c00;//-----定时器的设置-----//TH0=0x50;TL0=0x50;//设定定时器的初值TH1=0xE0;TL1=0xE0;//设定定时器的初值TMOD=0x22;//T0选为定时器(八位)模式2,TL0自动加载TH0中的初值CKCON&=0X00;//定时器选择为1/12系统时钟ET0=1;//允许定时器中断TR0=1;//启动定时器ET1=1;TR1=1;//-----外部中断设定-----//EX1=1;//允许外部中断1IT1=0;//电平触发中断1AUXR1|=0x04;//打开ADC电路EADC=1;//允许ADC中断ADCCON&=0xE7;//SettingsofTimer2capturemodeCKCON=0x60;CAPCON0=0xA8;CAPCON1=0x00;T2MOD=0xF0;IE1|=0x80;//enablecapturemodeinterruptRCAP2L=0x00;//自动重装载低位RCAP2H=0x00;//自动重装载高位IE1|=0x40;//EA=1;//enableinterruptT2CON|=0x04;//enabletimer2//***************************//KS_EN=1;KS_Time=8;//***************************//}/*******************************************************************************ADC中断处理程序******************************************************************************/voidADC_ISR(void)interrupt11{//UB=~UB;UB=~UB;//EADC=0;ADC_Ready=1;ADCCON&=0xE7;if(Current_REQ)//电流采样{Current_REQ=0;if(Current_SUMCurrent_Buffer[Current_P])Current_SUM-=Current_Buffer[Current_P];Current_Buffer[Current_P]=ADCH;Current_SUM+=ADCH;Current_P++;if(Current_P31)Current_P=0;}if(Speed_REQ)//转把电压采样{Speed_REQ=0;if(Speed_SUMSpeed_Buffer[Speed_P])Speed_SUM-=Speed_Buffer[Speed_P];Speed_Buffer[Speed_P]=ADCH;Speed_SUM+=ADCH;Speed_P++;if(Speed_P==14)Speed_P=0;}if(Voltage_REQ)//电源电压采样{Voltage_REQ=0;if(Voltage_SUMVoltage_Buffer[Voltage_P])Voltage_SUM-=Voltage_Buffer[Voltage_P];Voltage_Buffer[Voltage_P]=ADCH;Voltage_SUM+=ADCH;Voltage_P++;if(Voltage_P15)Voltage_P=0;}//PWM_ADJ();//UB=~UB;}/*******************************************************************************定时器0中断处理函数******************************************************************************///==========InterruptCycle:100uS===================voidT0M1_ISR(void)interrupt1{//UB=~UB;//UB=~UB;ADC_Ready=0;Current_REQ=1;Speed_REQ=0;Voltage_REQ=0;ADCCON=2;Count_Speed++;KS_CNT++;AH_Count++;if(Count_Speed5)//17{ADCCON=4;Current_REQ=0;Speed_REQ=1;Count_Speed=0;Count_Voltage++;if(Count_Voltage5)//50{ADCCON=3;Speed_REQ=0;Voltage_REQ=1;Count_Voltage=0;//********KeepSpeedSetting******//KS_Finish();}}//***FunctionSet***//if(AH_Count=100){AutoHelp();//自助力AH_Count=0;}if(KS_CNT=3000){KS_CNT=0;Keep_Speed();//巡航定速}Volt_Low();//欠压保护if(P02==0)Brake_Setting();//刹车ADCCON&=0xef;ADCCON|=0x08;EADC=1;PWM_ADJ();}/******************************************************************