
#include 	<hs16f2612.h> 	
#include 	<main.h>		

unsigned char DemoVar;
bit VarDemo = 0;


/*-------------------------------------------------
 *  routine ：Interrupt
----------------------------*/
//1ms中断一次
void interrupt myIsr(void) {
	if (T1IF == 1) {
		T1TL = (65535 - 1000) % 256;
		T1TH = (65535 - 1000) / 256;

		T1IF = 0;
		PA7 = ~PA7;


	}
}


/*-------------------------------------------------
 *  函数名称：IO_Init
 *  功能：   io 初始化函数
 *  输入参数：无
 * 	返回参数：无
 -------------------------------------------------*/
void GPIO_Init(void) {
	PORTA = 0b00000000;	    //PA输出赋值
	TRISA = 0b00000000;	    //PA输入输出配置 :0-输出  ;1=输入  
	PAODCON = 0b00000000;	//PA漏极开路配置 :1-使能  ;0-禁止 
	PAHCON = 0b11111111;	//PA内部上拉配置 :1-禁止  ;0-使能 
	PADCON = 0b11111111;	//PA内部下拉配置 :1-禁止  ;0-使能 
	WUACON = 0b00000000;	//PA端口唤醒配置 :1-使能  ;0-禁止 
	PORTC = 0b00000000;	    //PA输出赋值
	TRISC = 0b00000000;	    //PA输入输出配置 :0-输出  ;1=输入 

	//----------------------------------------------------------------------
	PORTC = 0b00000000;	    //PA输出赋值
	TRISC = 0b00000000;	    //PA输入输出配置 :0-输出  ;1=输入 
	PCDCON = 0b11111111;	//PA内部下拉配置 :1-禁止  ;0-使能 
	PCHCON = 0b11111111;	//PA内部上拉配置 :1-禁止  ;0-使能 	
}

/*-------------------------------------------------
 *  函数名称：System_Init
 *  功能：   中断初始化配置
 *  输入参数：无
 * 	返回参数：无
 -------------------------------------------------*/
void System_Init(void) {
	OPTIONR = 0b00000010;//Bit7 INT1EDG, 外部中断1触发方式 0 INT1引脚下降沿触发
	//Bit6 INTEDG, 外部中断 触发方式 0 INT引脚下降沿触发
	//Bit5 T0CS, TMR0时钟源选择位 0 内部指令时钟
	//Bit4 T0SE, TMR0时钟源边沿选择位 0 T0CKI引脚下降沿触发计数
	//Bit1 PSA, 预分频分配位 0 预分频器分配给TMR0
	//Bit2:0 PS[2:0], 预分频配置 010 '8分频
	PCON = 0b10110000;
	//Bit7 WDTE,看门狗定时器控制  1-使能WDT   0-禁止WDT
//Bit6 EIS,PB0管脚复用控制位  1-使能为外部中断输入脚  0-屏蔽中断功能	
//Bit5 LVDTE,LVDT低压复位使能,电压点由配置字决定  	
				//Bit4 SMTS,施密特使能位 1-施密特有效，0-施密特禁止
//Bit3 空	
//Bit2 空
//Bit1 空
//Bit0 空				
	INTCON = 0B00000000;
	//Bit7 GIE 使能全局中断     1-使能 0-禁止	
	//Bit6 T3IE 使能T3溢出中断  1-使能 0-禁止
	//Bit5 INT1IE 使能外部中断1 1-使能 0-禁止
	//Bit4 T2IE 使能T2溢出中断  1-使能 0-禁止
	//Bit3 TC1IE 使能T1溢出中断 1-使能 0-禁止
	//Bit2 INTIE 使能外部中断0  1-使能 0-禁止
	//Bit1 PBIE 使能端口变化中断1-使能 0-禁止 
	//Bit0 T0IE TIME0溢出中断   1-使能 0-禁止
	PIR1 = 0B00000000;
	//Bit7 空	
	//Bit6 T3IF T3溢出中断标志位
	//Bit5 INT1IF 外部中断1标志位
	//Bit4 T2IF T2溢出中断标志位	
	//Bit3 TC1IF TC1溢出中断标志位		
	//Bit2 INTIF 外部中断0标志位		
	//Bit1 PBIF PA/PB输入状态变化中断标志位	
	//Bit0 T0IF TIME0溢出中断标志位		
	PIR2 = 0B00000000;
	//Bit7 空	
//Bit6 空
//Bit5 空
//Bit4 空	
//Bit3 空	
//Bit2 ADCIE ADC中断使能位 1-使能 0-禁止
//Bit1 空
//Bit0 TKIE 触摸中断使能位 1-使能 0-禁止		
}




void T1_init() {
	T1CON = 0x31; //Fcpu 8分频 =1MHZ
	//bit7:门控翻转位    0:低电平			1：高电平   (T1 计数时的门控有效电平）
	//bit6:门控使能			0:m门控关闭	1：门控使能
	//bit5~bit4:	
							//	 00 1分频			
							//	 01 2分频
							//	 10 4分频
							//	 11 8分频
	//bit3:T1CKS1  T1 外部时钟源选择（T1CKS0=1 时有效） 0:外部时钟PA7   1:内部低速RC 或者外部低速晶振
	//bit2:T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效） 0:同步  1:异步
	//bit1:T1CKS0  T1 内外时钟源选择		0:内部Fcpu   1:外部时钟源
	//bit0:T1REN：定时器T1使能   0:T1关闭    1:T1使能

	//定时器16计数器
	T1TL = (65535 - 1000) % 256;
	T1TH = (65535 - 1000) / 256;

	T1IF = 1; //清T1 中断标志
	PIE1 = 0x01;// T1 中断
	FGIE = 1;   //全局中断
	PEIE = 1;		//外设中断

}

void main(void) {
	System_Init();
	GPIO_Init();
	T1_init();



	while (1) {
		//PA7 = ~PA7;

		CLRWDT();
	}
}


void DelayMs(unsigned char x) {
	unsigned int i, j;
	for (i = 0; i < x; i++)
		for (j = 0; j < 141; j++) {
			//CLRWDT();
		}
}
