📄 init_sys.c
字号:
#include <p30f4011.h>
#include "adr_port_define.h"
#include "extern_define.h"
unchar init_flag _NEAR;
unsigned int WDTFLAG1,WDTFLAG2,WDTFLAG3,WDTFLAG4,WDTFLAG5,WDTFLAG6,WDTFLAG7 _NEAR;
unchar init _NEAR;
void init_timer1()
{
Time_base=0;
PR1=1600; //400us
T1CON=0;
IFS0bits.T1IF=0;//
IEC0bits.T1IE=1;
IPC0bits.T1IP=5;
T1CON=0x0000;
}
void init_timer2()//FPWM=2000hz--PR2=2300
{ //FPWM=2400hz--PR2=2800
//PR2=80;
PR2=2800;// 400us
T2CON=0;
IFS0bits.T2IF=0;
IEC0bits.T2IE=1;
IPC1bits.T2IP=6;
T2CON=0X0000;//0x0010; //1;8 预分频
}
void init_pwm() //pwm0-pwm5 ,use pwm5
{ //产生pwm 周期的频率
FPWM=300; //init fpwm=1000hz(200-2500hz)
TRISE=0X00; // control PWM5 OUT //RE5=0, OUTPUT
IPC9bits.PWMIP=7;
IFS2bits.PWMIF=0;
IEC2bits.PWMIE=1;
PTMRbits.PTDIR = 0; //up counter+1
PTPER=FCY/FPWM - 1; // pwm 周期
PWMCON1=0X0400; //禁止PWM 独立的pwm输出 pwm5 out
PDC1=PTPER; // RE4-RE5 50% duty
PWMCON2=0X0000; //将后分频比设为1:1占空比和ptper 更新
// PWMCON1=0X0401; //enable pwm out pwm_A RE0//test _RE0
// PWMCON1=0X0410; //enable pwm out pwm_B RE1//test _RE1
PTCON=0x0000; // start pwm timer on 输input clock 预分频比1:1 pwm时基输时钟周期1tcy
}
void motor_sys()
{ //close output 1;stop 0;out
TRISB=0XFFFF;
TRISC=0XFFFF;
TRISD=0XFFFF;
TRISE=0XFFFF;
TRISF=0XFFFF;
IEC0=0;
IEC1=0;
IEC2=0;
IFS0=0;
IFS1=0;
IFS2=0;
LR_num.bits.LR0=1; //oil
LR_num.bits.LR1=1; //主轴
LR_num.bits.LR2=1; //cool
LR_num.bits.LR3=1; //Y 前行
LR_num.bits.LR4=1; //Y 后行
LR_num.bits.LR5=1; //X 左行
LR_num.bits.LR6=1; //X 右行
LR_num.bits.LR7=1; //err message
LR_num.bits.LR8=1;
LR_num.bits.LR9=1;
LR_num.bits.LR10=1;
LR_num.bits.LR11=1;
LR_num.bits.LR12=1;
LR_num.bits.LR13=1;
LR_num.bits.LR14=1;
LR_num.bits.LR15=1;
LED_num.bits.LED0=0; //平面
LED_num.bits.LED1=1; //开槽
LED_num.bits.LED2=1; //oil start
LED_num.bits.LED3=1; //主轴start
LED_num.bits.LED4=1; //cool start
LED_num.bits.LED5=0; //oil stop
LED_num.bits.LED6=0; //主轴stop
LED_num.bits.LED7=0; //cool stop
LED_num.bits.LED8=0; //x 往复 start _RE4=LED8,RE4=1,LED8=ON
//protect data
if(var2>4)var2=4; //y motion counter
if(var2<1)var2=1; //y motion counter
if(z_waitpostion>999999)z_waitpostion=999998;
if(z_waitpostion<1)z_waitpostion=1;
if(z_up_speed>9999) z_up_speed=9999;
if(z_up_speed<1) z_up_speed=1;
if(z_down_speed>9999) z_down_speed=9999;
if(z_down_speed<1) z_down_speed=1;
if(guangmo_times<1) guangmo_times=1;
if(guangmo_times>254)guangmo_times=254;
if(jingei_times>254) jingei_times=254;
if(jingei_times<1) jingei_times=1;
if(y_distance>254)y_distance=254;
if(y_distance<1) y_distance=1;
if(y_totallength>9999)y_totallength=9999;
if(y_totallength<1)y_totallength=1;
instruction=0; //tab key _PERSISTENT
z_postion_staus=0;//
y_postion_staus=0;//。最好定义为_NEAR,PIC复位后为=0;
KR_input=0; //limit err message _NEAR PIC复位后为=0;
limit_staus=0; //_NEAR
KR_staus=0; //_NEAR
}
void init_lcd()
{
_TRISE8=0;
_TRISD3=0;
_RE8=0;
_RD3=0;
LCD_FLAG=1;
init_lcdsetup();
chn_disp1(tab1); //进给次数
chn_disp2(tab2); //Y间距
chn_disp3(tab3); //Y总长
array(jingei_times,100);
wr_lcd(comm,0x30);
wr_lcd(comm,0x84); //adress
number_data();
Nop();
array(y_distance,100);
wr_lcd(comm,0x30);
wr_lcd(comm,0x94); //adress
number_data();
Nop();
array(y_totallength,1000);
wr_lcd(comm,0x30);
wr_lcd(comm,0x8C); //adress
number_data();
Nop();
wr_lcd(comm,0x30);
wr_lcd(comm,0x0C); //view staus switch
LCD_FLAG=2;
xx_photo=1;
Nop();
}
void init_sys()
{
ClrWdt();
init_flag=0;
RCONbits.LVDEN=0;
RCONbits.BGST=0;
RCONbits.POR=0;
RCONbits.BOR=0;
WDTFLAG1=RCONbits.EXTR;
WDTFLAG2=RCONbits.TRAPR;
WDTFLAG3=RCONbits.IOPUWR;
WDTFLAG4=RCONbits.SWR;
WDTFLAG5=RCONbits.SLEEP;
WDTFLAG6=0;//RCONbits.IDLE;//PIC不处于空闲状态=0,处于空闲状态为1
WDTFLAG7=RCONbits.WDTO;
///////////////////////////////// WRITE EEPROM
////****************************************************************
//asm("mov #tblpage(0X7FFC06),w0");
//
//
//asm("mov w0,TBLPAG");
//
//asm("mov #tbloffset(0X7FFC06),w0");
//
//asm("mov w0,NVMADR");
//NVMADRU=TBLPAG;
//////////////////////////////////////////
//NVMCON=0X4044;
//
//asm("push SR");
//asm("mov #0x00E0,w0");
//asm("ior SR");
//NVMKEY=0x55;
//
//NVMKEY=0xAA;
//
//NVMCONbits.WR=1;
//
//Nop();
//Nop();
//
//while(!IFS0bits.NVMIF);
//IFS0bits.NVMIF=0;
//asm("pop SR");
//
//NVMCONbits.WREN=0;
//
///////////////////////////////////////
//asm("mov #tblpage(0X7FFC06),w0");
//asm("mov w0,TBLPAG");
//
//asm("mov #tbloffset(0X7FFC06),w0");
//Nop();
//Nop();
//Nop();
////asm("tblrdl [w0],w4"); //read e2prom
//
//
//Nop();
//Nop();
//Nop();
//Nop();
//
//
//Nop();
//Nop();
//
//
//
//asm("mov _WDTFLAG1,w1");
//
//
//
//asm("tblwtl w1,[w0]");
//
//NVMCON=0X4004;
//asm("push SR");
//asm("mov #0x00E0,w0");
//asm("ior SR");
//asm("mov #0x55,w0");
//asm("mov w0,NVMKEY");
//asm("mov #0xAA,w0");
//asm("mov w0,NVMKEY");
//
//NVMCONbits.WR=1;
//
//
//Nop();
//Nop();
//
//while(!IFS0bits.NVMIF);
//IFS0bits.NVMIF=0;
//asm("pop SR");
//
////******************************************************************
////////////////////////////////////////read eeprom
////************************************************
//asm("mov #tblpage(0X7FFC06),w0");
////WREG0=tblpage(var2);
//
//asm("mov w0,TBLPAG");
//
//asm("mov #tbloffset(0X7FFC06),w0");
//
//asm("mov w0,NVMADR");
//NVMADRU=TBLPAG;
//////////////////////////////////////////
//NVMCON=0X4044;
//
//asm("push SR");
//asm("mov #0x00E0,w0");
//asm("ior SR");
//NVMKEY=0x55;
//
//NVMKEY=0xAA;
//
//NVMCONbits.WR=1;
//
//Nop();
//Nop();
//
//while(!IFS0bits.NVMIF);
//IFS0bits.NVMIF=0;
//asm("pop SR");
//
//NVMCONbits.WREN=0;
//
///////////////////////////////////////
//asm("mov #tblpage(0X7FFC06),w0");
//asm("mov w0,TBLPAG");
//
//asm("mov #tbloffset(0X7FFC06),w0");
//Nop();
//Nop();
//Nop();
//asm("tblrdl [w0],w4"); //read e2prom
//
//WDTFLAG1=WREG4;
//******************************************************
if((WDTFLAG1==1)||(WDTFLAG2==1)||(WDTFLAG3==1)||(WDTFLAG4==1)||(WDTFLAG5==1)||(WDTFLAG6==1)||(WDTFLAG7==1))
{
RCONbits.EXTR=0;//仇爱华检测是EXTR复位导致系统复位。
RCONbits.TRAPR=0;//在pic vpp脚并上俩个20PF电容,消除干扰。
RCONbits.IOPUWR=0;//也可在 configure 中关掉 master clear enable 去除复位
RCONbits.SWR=0;//这样软件没有复位脚
RCONbits.SLEEP=0;
RCONbits.IDLE=0;
RCONbits.WDTO=0;
init_flag=1;
EXCHANGE=1; //lcd refresh
init_timer1();
init_timer2();
init_pwm();
}
if(init_flag==0)
{
motor_sys();
init_timer1();
init_timer2();
init_pwm();
init_lcd();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -