单片机源程序如下:
- #include<reg51.h> //包含文件预处理命令</span>
- #define uchar unsigned char //8位单片机习惯性定义
- #define uint unsigned int //8位单片机习惯性定义
- //
- //*********AD转换要用到的特殊寄存器地址定义*************************************
- sfr adc_contr=0xc5; //定义AD转换控制寄存器地址
- sfr adc_data=0xc6; //定义AD转换结果寄存器地址
- sfr p1m0=0x91; //带有8路AD的P1口模式选择寄存器0定义地址
- sfr p1m1=0x92; //带有8路AD的P1口模式选择寄存器1定义地址
- //
- //*********PWM输出要用到的特殊寄存器地址定义************************************
- sfr ccap0h=0xfa; //PCA模块0捕捉/比较寄存器高8位
- sfr ccap1h=0xfb; //PCA模块1捕捉/比较寄存器高8位
- sfr ccap2h=0xfc; //PCA模块2捕捉/比较寄存器高8位
- sfr ccap3h=0xfd; //PCA模块3捕捉/比较寄存器高8位
- sfr pca_pwm0=0xf2; //PCA模块0-PWM寄存器
- sfr pca_pwm1=0xf3; //PCA模块1-PWM寄存器
- sfr pca_pwm2=0xf4; //PCA模块2-PWM寄存器
- sfr pca_pwm4=0xf5; //PCA模块3-PWM寄存器
- sfr ccapm0=0xda; //PCA模块0工作模式寄存器
- sfr ccapm1=0xdb; //PCA模块1工作模式寄存器
- sfr ccapm2=0xdc; //PCA模块2工作模式寄存器
- sfr ccapm3=0xdd; //PCA模块3工作模式寄存器
- sfr ch=0xf9; //PCA计数器高8位
- sfr cl=0xe9; //PCA计数器低8位
- sfr ccon=0xd8; //PCA控制寄存器
- sfr cmod=0xd9; //PCA工作模式寄存器
- sbit cr=ccon^6; //PCA计数器控制位,1开0关
- sbit epca_lvd=IE^6; //PCA中断允许控制位1开0关
- sfr auxr=0x8E; //定时器工作于1T控制位
- //==============================================================================
- sbit zb=P1^3;
- sbit pwmal=P2^3; //A相下桥驱动定义
- sbit pwmbl=P2^2; //B相下桥驱动定义
- sbit pwmcl=P2^1; //C相下桥驱动定义
- sbit led=P2^7; //指示灯定义
- sbit abs=P2^5; //ABS刹车功能选择口,对地为ABS功能
- sbit shache=P3^0; //刹车口定义,对地刹车
- sbit fd=P3^3; //防盗检测口定义
- int ledcs; //定义一个指示灯闪灯次数变量
- static fd_hej;
- static timebj; //定义一个定时器计数比较变量
- static timejs; //定义一个定时器中断计数次数变量
- static pwm_bl; //PWM输出变量
- static zs_bl=20; //pwm旧的变量数据,备份的
- static pwm_bls; //PWM软启动加速用变量
- static shache_bz; //刹车后该标志置1供软启动使用
- static hehc; //霍尔数据暂存区
- static hehc_bl; //上相霍尔数据暂存区,用于检测霍尔变化
- static dz_bz; //堵转标志,为1堵转
- static dz_bz1;
- static zbyx_bz; //转把有效标志,归0时为0,行驶时为1有效
- static ds_bf=10; //转把上次的数据备份
- static zs_js; //转速数据
- static zs_ds_js;
- static he_cs_bz1;
- static he_cs_bz2;
- static he_cs_bz3;
- static he_cs_sj1;
- static he_cs_sj2;
- static he_cs_sj3;
- int qy_1,qy_2,qy_3; //欠压测量暂存区1,2,3
- int cs1,cs2,cs3,cs_fx; //电机测速全局变量
- static qy_bf; //欠压上次的数据备份
- int h; //ABS刹车用变量
- int dz;
- int dz2;
- void zb_fx(void);
- void he_gzjc(void);
- void pwm_out(void);
-
- //*********************AD转换后PWM对照表*****************************************
- uchar code pwmout[256]=
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,//60个1为1.3v以下
- //------------------------------------------------------------------------------------------
- 241,239,237,235,233,231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,
- 201,199,197,195,193,191,189,187,185,183,181,179,177,175,173,171,169,167,165,163,
- 161,159,157,155,153,151,149,147,145,143,141,139,137,135,133,131,129,127,125,123,//60
- 121,119,117,115,113,111,109,107,105,103,101,99,97,95,93,91,89,87,85,83,81,79,77,//23
- 75,73,71,69,67,65,63,61,59,57,55,53,51,49,47,46,45,44,43,42,41,40,39,38,37,36,//26
- 35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,//26
- 9,8,7,6,5,4,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//34 //25个0为4.1--4.5v
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1}; //26个为4.5V以上
- //*********************1MS延时函数***********************************************
- void delay(int t)
- {
- int i,j;
- for(i=0;i<t;i++)
- for(j=0;j<250;j++)
- ;
- }
- //*********************ABS刹车延时函数***********************************************
- void delay1(int t)
- {
- int i,j;
- for(i=0;i<t;i++)
- for(j=adc_data;j>0;j--)
- {}
- }
- //*********************设置AD电源和开漏函数**************************************
- adc_power()
- {
- adc_contr|=0x80; //开AD电源
- delay(2); //首次开AD电源要延时1MS左右
- p1m0|=0x88; //设置P1.3和P1.7为开漏即AD转换模式
- p1m1|=0x88; //同上
- }
- //-------------------设置P1.3为转把测量通道函------------------------------------
- set_p13_adc()
- { zb=1;
- adc_contr=0xe3; //P13口为转换通道
- }
- //-------------------设置P17为电机超载测量通道函数--------------------------------
- set_p17_adc()
- {
- adc_contr=0xe7;
- }
- //------------------设置P15为欠压检测测量通道-------------------------------------
- set_p15_adc()
- {adc_contr=0xe5;}
- //===================测量电压函数=================================================
- get_ad_dy()
- { int adon=0; //定义一个整型变量用于检测AD转换是否结束
- adc_data=0; //AD转换结果寄存器清0
- adc_contr|=0x08; //转换位置1启动转换
- while(adon==0) //循环判断表达式成立反复执行语句,不成立退出
- {adon=adc_contr&0x10;} //循环语句体,即判断AD转换是否完成,完成后高第4位为1
- adc_contr&=0xe7; //循环语句退出转换完成,清adc_flag,adc_start,停止转换
- }
- //********************PWM初始化函数***********************************************
- pwm_sz()
- {
- cmod=0x82; //PCA在空闲模式下停止PCA计数器工作
- //PCA时钟源为1/2溢出
- //禁止PCA计数器溢出中断
- ccon=0x00; //禁止PCA计数器工作,清除中断标志和计数器溢出标志
- cl=0x00; //清0计数器
- ch=0x00;
- //======================以下为4路PWM输出设置程序=============================
- //设置模块0为8位PWM输出模式,PWM无需中断支持,,脉冲在P3.7口输出
- ccapm0=0x42; //***程序核心语句,-----0100,0010
- pca_pwm0=0x03; //先关闭PWM-输出为0,写入0x00就可开PWM输出
- //设置模块1为8位PWM输出模式,PWM无需中断支持,,脉冲在P3.5口输出
- ccapm1=0x42; //***程序核心语句,-----0100,0010
- pca_pwm1=0x03; //先关闭PWM-输出为0,写入0x00就可开PWM输出
- //设置模块2为8位PWM输出模式,PWM无需中断支持,,脉冲在P2.0口输出
- ccapm2=0x42; //***程序核心语句,-----0100,0010
- pca_pwm2=0x03; //先关闭PWM-输出为0,写入0x00就可开PWM输出
- //模块3未用
- epca_lvd=1; //开PCA中断
- EA=1; //开总中断
- cr=1; //开PCA计数器打开
- }
- //********************快闪灯函数***********************************************
- led_k()
- { int k; //定义一个临时变量
- for(k=0;k<ledcs;k++) //表达式2条件不满足即次数未到重复执行循环体语句
- {led=0;delay(700);
- led=1;delay(700);}
- delay(2000);
- }
- //********************定时器0和1初始化函数*******************************************
- time_csh()
- {
- TMOD=0x11; //定时器0工作于8位自动重装,1工作于方式1
- TH0=0x3c; //
- TL0=0x0b;
- TH1=0x3c; //12MHZ时50MS数据,20次为1S
- TL1=0x0b;
- IT0=1; //设置外中断0为下降沿触发358第一脚
- EX0=1; //开外中断0
- EA=1; //开总中断
- ET0=1; //开定时期0中断
- ET1=1; //开定时期1中断
- }
- //********************定时器0中断函数PWM频率用************************************
- void time0(void)interrupt 1
- {TR0=0;TH0=0x3c;TL0=0x0b;
- zs_ds_js++;
- if(zs_ds_js==10)
- {if(zs_js<20)
- {
- dz_bz1=1;zs_ds_js=0;zs_js=0;
- TH1=0X3C;TL1=0X0B;TR1=1;
- TH0=0x3c;TL0=0x0b;TR0=1;
- // pwm_bls=200;
- }
- else
- {dz_bz1=0;zs_ds_js=0;zs_js=0;zs_bl=zs_js;
- TH1=0X3C;TL1=0X0B;TR1=0;
- TH0=0X3C;TL0=0X0B;TR0=1;
- }
- }
- else
- {TR0=1;}
- }
- //********************定时器1中断函数*********************************************
- void time1(void)interrupt 3
- { TR1=0;TH1=0x3c;TL1=0x0b;
- timejs++;
- if(timejs==12) //中断次数等于给定的次数就取反LED
- {if(zbyx_bz==0) //转把归0标志为0,可以闪灯
- {led=~led;timejs=0;TR1=1;}
- }
- if(timejs==80)
- {if(dz_bz1==1)
- {TR0=0;dz_bz1=0;dz_bz=1;zs_ds_js=0;zs_js=0;timejs=0;}
- else
- {dz_bz=0;zs_ds_js=0;zs_js=0;timejs=0;}
- }
- TR1=1;
- }
- //*******************电机堵转转函数***********************************************
- //根据2S定时内一直堵转的话置DZ_BZ为1,本函数检测到该标志为1立即关闭所有输出
- //并闪烁指示灯间隔快闪2次提示,最后监控转把归0后可以退出本函数重新启动
- void dgdz(void)
- {
- while(dz_bz1==1)
- {pwm_bls=170;he_gzjc();pwm_out();
- if(dz_bz==1)
- { TR0=0;TR1=0;
- pca_pwm0=0x03; //关3路PWM信号
- pca_pwm1=0x03; //
- pca_pwm2=0x03; //
- pwmal=0;pwmbl=0;pwmcl=0; //关3路下桥
- set_p13_adc(); //电机进入保护后开始等待转把归零后可以重新启动
- do{ledcs=2;led_k();get_ad_dy();} //间隔开闪2次提示堵转保护,测量转把电压是否归0
- while(adc_data>=61); //没有归0执行DO循环体语句
- led=1;dz_bz=0;dz_bz1=0; //转把归0后关指示灯清堵转标志
- }
- }
- }
- //********************外中断0函数限流或康铜开路************************************
- void intt0()interrupt 0
- {
- TR0=0;TR1=0; //关PWM频率
- pca_pwm0=0x03; //关3路PWM信号
- pca_pwm1=0x03; //
- pca_pwm2=0x03; //
- pwmal=0;pwmbl=0;pwmcl=0; //关3路下桥
- set_p13_adc();
- get_ad_dy();
- while(adc_data>=61)
- {ledcs=4;led=0;get_ad_dy();}
- led=1;
- }
- //********************PWM驱动桥驱动输出函数****************************************
- void pwm_out(void) //入口:pwm_bl里有转把调速参数.出口:输出全桥驱动信号
- {
- switch(hehc) //多分支语句根据霍尔位置输出对应节拍
- {case 0x01:{pca_pwm1=0x03;pca_pwm2=0x03;pwmal=0;pwmbl=0;
- ccap0h=pwm_bls;pwmcl=1;pca_pwm0=0x00;break;} //第1拍ccap0h刷新参数开C下桥A上桥
- //-------------------------------------------------------------
- case 0x03:{pca_pwm0=0x03;pca_pwm2=0x03;pwmal=0;pwmbl=0;
- ccap1h=pwm_bls;pwmcl=1;pca_pwm1=0x00;break;} //第2拍ccap1h刷新参数开C下桥b上桥
- //-------------------------------------------------------------
- case 0x02:{pca_pwm0=0x03;pca_pwm2=0x03;pwmbl=0;pwmcl=0;
- ccap1h=pwm_bls;pwmal=1;pca_pwm1=0x00;break;} //第3拍ccap1h刷新参数开a下桥b上桥
- //-------------------------------------------------------------
- case 0x06:{pca_pwm0=0x03;pca_pwm1=0x03;pwmbl=0;pwmcl=0;
- ccap2h=pwm_bls;pwmal=1;pca_pwm2=0x00;break;} //第4拍ccap2h刷新参数开a下桥c上桥
- //-------------------------------------------------------------
- case 0x04:{pca_pwm0=0x03;pca_pwm1=0x03;pwmal=0;pwmcl=0;
- ccap2h=pwm_bls;pwmbl=1;pca_pwm2=0x00;break;} //第5拍ccap2h刷新参数开b下桥c上桥
- //-------------------------------------------------------------
- case 0x05:{pca_pwm1=0x03;pca_pwm2=0x03;pwmal=0;pwmcl=0;
- ccap0h=pwm_bls;pwmbl=1;pca_pwm0=0x00;break;} //第6拍ccap0h刷新参数开b下桥a上桥
- }
- }
- //********************上电初始化函数**********************************************
- void sd_csh(void)
- {P1=0xff;zb=0;P2=0xff;P3=0xff;
- pwmal=0; //上电复位后首先关闭3组下桥
- pwmbl=0; //
- pwmcl=0; //
- adc_power(); //调AD转换用初始化函数
- pwm_sz(); //调PWM输出用初始化函数
- time_csh(); //调两个定时器初始化函数
- }
- //********************上电防飞车函数归0后LED正常闪烁******************************
- void sd_ffc(void)
- {
- set_p13_adc(); //调转把电压转换通道
- get_ad_dy(); //上电后测量转把电压是否归零
- while(adc_data>=61) //61为1.2V转换值转把如果大于1.2V执行循环体语句等待归0
- {ledcs=2;led_k(); //循环体语句,2次间隔性快闪灯
- get_ad_dy(); //循环体语句,重新检测电压等待归0
- }
- TR0=0; //关PWM频率否则干扰闪灯
- timebj=12; //归0后定时器中断10次闪烁一次LED
- TR1=1; //归0后开定时器1-LED闪烁
- }
- //*************刹车函数自动选择是断电还是ABS刹车功***************************
- void sc_stop(void) //ABS刹车有外接口对地选择,对地时为ABS功能
- {
- if(shache==0) //判断语句刹车口等于0执行大语句1
- { abs=1;
- //大语句体1
- if(abs==1) //判断ABS选择不为0就执行普通刹车断电,否则执行ABS刹车
- //==========普通刹车断电==================================================
- {
- TR0=0;led=0; //关测速定时器,亮刹车灯
- pca_pwm0=0x03; //关3路PWM信号AH
- pca_pwm1=0x03; //关3路PWM信号BH
- pca_pwm2=0x03; //关3路PWM信号CH
- pwmal=0;pwmbl=0;pwmcl=0; //关3路下桥
- //----------------------------------------------------------------------
- while(shache==0) //循环语句,刹车口没松开就一直等待
- {delay(500);} //语句体,延时抗干扰防止抖动
- hehc_bl=0;led=1; //刹车口松开后清霍尔变量内存再关刹车灯
- //----------------------------------------------------------------------
- for(pwm_bls=241;pwm_bl!=pwm_bls;pwm_bls--) //以下两句为刹车口松开后减缓冲击
- {he_gzjc();pwm_out();} //从最低速度加高到实时的转把设定速度
- }
- //===========EABS刹车断电=====================================================
- else //ABS功能已选择进入ABS刹车
- { //
- TR0=0;led=0; //关测速定时器,亮刹车灯
- pca_pwm0=0x03; //关3路PWM信号AH
- pca_pwm1=0x03; //关3路PWM信号BH
- pca_pwm2=0x03; //关3路PWM信号CH
- pwmal=0;pwmbl=0;pwmcl=0; //关闭3个下桥:AL-BL-CL
- //-------------------------------------------------------------------------
- do //do-while语句先执行do再执行while判断表达式
- {
- for(h=100;h>0;h--) //每检测一次没松开就先执行1万次ABS点刹,防止刹车抖动干扰
- { pwmal=0;pwmbl=0;pwmcl=0;
- delay1(1);
- pwmal=1;pwmbl=1;pwmcl=1; //ABS点刹
- delay1(80);
- }
- }
- while(shache==0); //内镶循环语句,只要刹车没松开就一直开ABS点刹制动
- hehc_bl=0;led=1; //刹车口为1后清霍尔变量内存再关刹车灯
- pwmal=0;pwmbl=0;pwmcl=0; //点刹后要关闭所有下桥防止刹车松开后车推不动
- for(pwm_bls=241;pwm_bl!=pwm_bls;pwm_bls--)//以下几句刹车后软启动,减少刹车后高速冲击
- {he_gzjc();pwm_out();}
- }
- //---------------
- }
- }
- //*******************欠压检测函数**************************************************
- void qy_jc(void)
- { //连续3次测量电池电压抗干扰
- set_p15_adc();
- get_ad_dy(); //第1次测量电池电压
- if(adc_data<=158) //电压小于等于3.1v吗,不等于直接退出
- {TR0=0;TR1=0;led=1; //小于等于,电池电压过低,关PWM频率保护电池
- pca_pwm0=0x03; //关3路PWM信号
- pca_pwm1=0x03; //
- pca_pwm2=0x03; //
- pwmal=0;pwmbl=0;pwmcl=0; //关3路下桥
- do{ledcs=3;led_k();get_ad_dy();} //闪灯提示重新测量电压
- while(adc_data<=175); //检测是否恢复到正常电压44V
- ledcs=3;led_k(); //电压恢复44V以上再闪灯做为延时用
- hehc_bl=0; //清霍尔旧数据为了起动
- }
- }
- //*******************霍尔故障检测函数**********************************************
- void he_gzjc(void)
- {
- hehc=P1&0x07; //读入霍尔数据,并分离有效数据
- //--查霍尔是否全1--------
- while(hehc==0x07) //判断是否为3个全1,成立循环执行语句体
- {pca_pwm0=0x03; //霍尔出现故障关闭所有输出
- pca_pwm1=0x03; //
- pca_pwm2=0x03; //
- pwmal=0;pwmbl=0;pwmcl=0; //
- TR0=0;zs_ds_js=0;zs_js=0; //关测速定时器,定时计数器清0,转速度计数器清0
- ledcs=6;led_k(); //循环执行语句体6次闪烁,直到不成立退出
- hehc=P1&0x07; //重新检测霍尔
- }
- //--查霍尔是否全0--------
- while(hehc==0x00) //不为3个1再判断是否为3个0,成立执行循环语句体
- {pca_pwm0=0x03; //霍尔出现故障关闭所有输出
- pca_pwm1=0x03; //
- pca_pwm2=0x03; //
- pwmal=0;pwmbl=0;pwmcl=0; //
- TR0=0;zs_ds_js=0;zs_js=0; //关测速定时器,定时计数器清0,转速度计数器清0
- ledcs=6;led_k(); //循环执行语句体6次闪烁,直到不成立退出
- hehc=P1&0x07; //重新检测霍尔
- }
- //--查霍尔是否更新--------
- if(hehc_bl!=hehc) //判断霍尔是否变化,成立执行语句1后退出
- {hehc_bl=hehc; //语句2,霍尔变化存入新的数据到变量中
- he_cs_sj1=hehc;he_cs_bz1=1;
- if(he_cs_bz1==1){he_cs_sj2=hehc;he_cs_bz2=1;}
- if(he_cs_bz2==1){he_cs_sj3=hehc;he_cs_bz3=1;}
- //----------------------------------------
- if(he_cs_bz1==1)
- {if(he_cs_bz2==1)
- {if(he_cs_bz3==1)
- {if(he_cs_sj1&he_cs_sj2&he_cs_sj3!=0x00)
- {zs_js++;he_cs_bz1=0;he_cs_bz2=0;he_cs_bz3=0;}
- }
- }
- }
- //--------------------
- }
- }
- //**********电流自动调整函数******************************************************
- void dl_tz(void)
- { set_p17_adc();
- do
- {get_ad_dy();}
- while(adc_data>=20);
- {pwm_bls=adc_data*10+pwm_bl;
- if(pwm_bls>=241){pwm_bls=241;}
- he_gzjc();pwm_out();zb_fx();dgdz();
- }
- pwm_bls=pwm_bl;
- }
- //********************转把工作状态分析函数****************************************
- //函数出口--pwm_bl里有查表后数据,PWM输出程序直接读出放入PWM占空比寄存器
- //ccap0h,ccap1h,ccap2h中即可
- //********************************************************************************
- void zb_fx(void)
- { //---连续3次测量转把电压--------
- set_p13_adc(); //调转把电压转换通道
- get_ad_dy(); //第一次测量转把电压
- pwm_bl=pwmout[adc_data]; //在数组中查出对应的AD转换PWM值
- if(pwm_bl==1) //为1成立执行大的语句1后退出,不成立执行语句2后退出
- //语句1,转把电压等于1说明转把在1.3v以下或4.5v以上停止输出闪LED
- {
- hehc_bl=0; //霍尔存储旧数据的变量及时清0否则很难起动
- pca_pwm0=0x03; //停止所有输出
- pca_pwm1=0x03;
- pca_pwm2=0x03;
- TR0=0;zs_ds_js=0;zs_js=0; //关测速定时器,定时计数器清0,转速度计数器清0
- pwmal=0;pwmbl=0;pwmcl=0; //关3个下桥
- timebj=15; //定时器1中断12次闪烁一次LED
- TR1=1;zbyx_bz=0; //开定时器1-LED闪烁,转把归0标志位为0,pwm输出就无效
- }
- else
- //语句2,转把电压不等于1说明在1.3v-4.5v之间正常行驶数据
- {led=1;zbyx_bz=1;TR0=1;} //关定时器1指示灯,转把有效标志位为1,pwm输出有效
- }
- //**********************软启动************************************
- //dg_rqd()
- //{dgdz();
- //if(pwm_bl!=pwm_blj)
- // {for(pwm_bls=241;pwm_bl!=pwm_bls;pwm_bls--)
- // {he_gzjc();pwm_out();}pwm_blj=pwm_bl;
- // }
- //else
- // {if(shache_bz==1)
- // {for(pwm_bls=241;pwm_bl!=pwm_bls;pwm_bls--)
- // {he_gzjc();pwm_out();}pwm_blj=pwm_bl;shache_bz=0;
- // }
- // else
- // {he_gzjc();pwm_out();}
- // }
- //}
- //********************防盗锁电机函数**********************************************
- fd_dg()
- {while(fd==0)
- {
- {int fd_he;
- fd_he=P1&0X07;
- if(fd_he!=fd_hej)
- {fd_hej=fd_he;
- //switch(fd_he) //多分支语句根据霍尔位置输出对应节拍
- // {case 0x01:{
- pca_pwm0=0x03;pca_pwm2=0x03;pwmbl=0;pwmcl=0;
- ccap1h=10;pwmal=1;pca_pwm1=0x00;delay(20);
- pwmal=0;pca_pwm1=0x03;
- pwmal=1;pwmbl=1;pwmcl=1;delay(300);
- //-------
- //pwmcl=1;pca_pwm0=0x00;delay(1);
- // pwmcl=0;pca_pwm0=0x03;delay(2);
- // break;} //第1拍ccap0h刷新参数开C下桥A上桥
- //-------------------------------------------------------------
- // case 0x03:{pca_pwm0=0x03;pca_pwm1=0x03;pwmbl=0;pwmcl=0;
- // ccap2h=10;pwmal=1;pca_pwm2=0x00;delay(20);
- // pwmal=0;pca_pwm2=0x03;
- // pwmal=1;pwmbl=1;pwmcl=1;delay(200);
- //--------
- // pwmcl=1;pca_pwm1=0x00;delay(1);
- // pwmcl=0;pca_pwm1=0x03;delay(2);
- // break;} //第2拍ccap1h刷新参数开C下桥b上桥
- //-------------------------------------------------------------
- // case 0x02:{pca_pwm0=0x03;pca_pwm1=0x03;pwmal=0;pwmcl=0;
- // ccap2h=10;pwmbl=1;pca_pwm2=0x00;delay(20);
- // pwmbl=0;pca_pwm2=0x03;
- // pwmal=1;pwmbl=1;pwmcl=1;delay(200);
- // //--------
- //pwmal=1;pca_pwm1=0x00;delay(1);
- // //pwmal=0;pca_pwm1=0x03;delay(2);
- // break;} //第3拍ccap1h刷新参数开a下桥b上桥
- //-------------------------------------------------------------
- // case 0x06:{pca_pwm1=0x03;pca_pwm2=0x03;pwmal=0;pwmcl=0;
- // ccap0h=10;pwmbl=1;pca_pwm0=0x00;delay(20);
- // pwmbl=0;pca_pwm0=0x03;
- // pwmal=1;pwmbl=1;pwmcl=1;delay(200);
- //---------
- //pwmal=1;pca_pwm2=0x00;delay(1);
- //pwmal=0;pca_pwm2=0x03;delay(2);
- // break;} //第4拍ccap2h刷新参数开a下桥c上桥
- //-------------------------------------------------------------
- // case 0x04:{pca_pwm1=0x03;pca_pwm2=0x03;pwmal=0;pwmbl=0;
- // ccap0h=10;pwmcl=1;pca_pwm0=0x00;delay(20);
- // pwmcl=0;pca_pwm0=0x03;
- // pwmal=1;pwmbl=1;pwmcl=1;delay(200);
- // //---------
- //pwmbl=1;pca_pwm2=0x00;delay(1);
- //pwmbl=0;pca_pwm2=0x03;delay(2);
- // break;} //第5拍ccap2h刷新参数开b下桥c上桥
- //-------------------------------------------------------------
- // case 0x05:{pca_pwm0=0x03;pca_pwm2=0x03;pwmal=0;pwmbl=0;
- // ccap1h=10;pwmcl=1;pca_pwm1=0x00;delay(20);
- // pwmcl=0;pca_pwm1=0x03;
- // pwmal=1;pwmbl=1;pwmcl=1;delay(200);
- //----------
- // pwmbl=1;pca_pwm0=0x00;delay(1);
- // // pwmbl=0;pca_pwm0=0x03;delay(2);
- // break;} //第6拍ccap0h刷新参数开b下桥a上桥
- // }
- }
- }
- }
- }
- //********************主函数******************************************************
- main()
- {
- sd_csh(); //调上电初始化函数
- qy_jc(); //调欠压检测函数
- sd_ffc(); //调上电防飞车函数,等待归0后才往下执行
- he_gzjc(); //调霍尔故障检测函数,无故障才往下执行
- while(1)
- {
- qy_jc();
- if(fd==0){fd_hej=P1&0x07;fd_dg();}//如果防盗口为低电平执行防盗程序
- //--------------
- else //否则执行正常程序
- {
- if(dz_bz1!=1){zb_fx();} //1>调转把分析函数
- if(zbyx_bz==1) //如果转把标志位为1转把有效,就执行语句体否则不执行
- {dl_tz();dgdz();
- he_gzjc();pwm_out();
- } //语句体,调霍尔分析函数,调PWM输出函数
- sc_stop(); //调刹车断电检测函数
- }
- //-----------------------
- }
复制代码 出自:http://www.51hei.com/bbs/dpj-178970-1.html
|