#include "include.h"
void System_Int(void)
{
	Ram_Int();   ///RAM清零  

	Gpio_Int();		//IO初始化		

	PWM23_Int();
}

void PWM23_Int(void)
{
	PWM_MAP = 0x50; 	 ///映射  PWM2  PB5  PWM3  PB6
	
	ANSELB5 = 1;  		//0 = 模拟模式	1 = 数字模式
	TRISB5 = 1;   		//0 = 输入		1 = 输出
	
	ANSELB6 = 1;  		//0 = 模拟模式	1 = 数字模式
	TRISB6 = 1;   		//0 = 输入		1 = 输出

	///  bit 4-6   PWM23时钟分频选择
	PWM23CON0 |= 2 << 4;
	
	///输出类型选择   0：边沿对齐  1；中心沿对齐
	TY23  = 0;
	
	///bit0： LED1级联控制     bit1：LED1级联发送数据控制
	///bit2： PWM2输出取反控制 bit3：PWM3输出取反控制
	PWM23CON1 = 0x00;
	
	///PWM周期寄存器
	PWM23TH  = 0x01;
	PWM23TL  = 0xFF;
	
	PWM2DH  = 0x00;
	PWM2DL  = 0xFF;
	
	PWM3DH  = PWM2DH;
	PWM3DL  = PWM2DL;
}

void Gpio_Int(void)
{
	////数字模拟模式：   1：数字    0：模拟
	ANSELA = 0x00;
	ANSELB = 0x00;
	ANSELC = 0x00;
	
	////输入输出模式：   1：输出    0：输入
	TRISA = 0x00;
	TRISB = 0x00;
	TRISC = 0x00;
	
	////IO数据寄存器：   1：高电平    0：低电平
	PORTA = 0x00;
	PORTB = 0x00;
	PORTC = 0x00;
	
	////输入上拉控制：   1：使能上拉   0：关闭上拉
	WPUA = 0x00;
	WPUB = 0x00;
	WPUC = 0x00;
	
	////输入下拉控制：   1：使能下拉   0：关闭下拉
	WPDA = 0x00;
	WPDB = 0x00;
	WPDC = 0x00;
	
	////GPIO唤醒控制：   1：使能唤醒   0：关闭唤醒
	IOCA = 0x00;
	IOCB = 0x00;
	IOCC = 0x00;	
}

void Ram_Int(void)
{
	IRP = 0;
	FSR = 0x60;
	do{
		INDF = 0;
		FSR++;
	}while(FSR != 0x80);//BANK0 60H~7FH 地址清0
      
	FSR = 0xD0;
	do{
		INDF = 0;
		FSR++;
	}while(FSR != 0xF0);//BANK1 D0H~EFH 地址清0
	
	IRP = 1;
	FSR = 0x10;
	do{
		INDF = 0;
		FSR++;
	}while(FSR != 0x70);//BANK2 110H~16FH 地址清0
      
	FSR = 0x90;
	do{
		INDF = 0;
		FSR++;
	}while(FSR != 0xF0);//BANK3 190H~1EFH 地址清0

	IRP = 0;
}