⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init_sys.c

📁 单片机工业控制板,具备I/O,KEYBOARD,步进电机伺服电机等功能
💻 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 + -