/*******************************************************************************
//Funtion :Timer3定时4ms, PD7翻转
********************************************************************************/

#include "AD18F06A.h"
#include <stdio.h>

/******************************************************************************

*
******************************************************************************/

__CONFIG(1,_FINTOSC_DIV1_1L   & _LVREN_ON_1L       & _LVR24V_1L                                                                );
__CONFIG(2,_FLASH_CP7_OFF_2L  & _FLASH_CP6_OFF_2L  & _FLASH_CP5_OFF_2L   & _FLASH_CP4_OFF_2L   & _FLASH_CP3_OFF_2L
         & _FLASH_CP2_OFF_2L  & _FLASH_CP1_OFF_2L  & _FLASH_CP0_OFF_2L   & _CRYLEN_OFF_2L      & _CRYHEN_OFF_2L
  	     & _IDIS_OFF_2L       & _CKSUM_OFF_2L      & _CBP_OFF_2L         & _RESETE_OFF_2L      & _RSEL_LOW_2L     & _STV_ON_2L  );
__CONFIG(3, _DBG_OFF_3L & _PSUT_8_3L         & _FCPU_2T_3L        & _WDTEN_OFF_3L       & _TWDT_000_3L                                         );
__CONFIG(4,_OSCM_HIRC_16M_4L  &_ENVDDL_ON_4L       & _EEDIS_OFF_4L       & _FLDIS_OFF_4L    & _FCMEN_OFF_4L      & _IESO_OFF_4L    &       _DBGS_IOSEL_1_4L      );



void GPIO_Init(void)
{
	TRISA = 0X00;   //PA输出模式
	TRISB = 0X00;   //PB输出模式
	TRISC = 0X00;   //PC输出模式

	PORTA = 0X00;	//PORTA输出0
	PORTB = 0X00;	//PORTB输出0
	PORTC = 0X00;	//PORTC输出0

	PAPD = 0XFF;    //关闭PA下拉
	PAPU = 0XFF;    //关闭PA上拉
	PBPD = 0XFF;    //关闭PB下拉
	PBPU = 0XFF;    //关闭PB上拉
	PCPD = 0XFF;    //关闭PC下拉
	PCPU = 0XFF;    //关闭PC上拉

	PAOD = 0X00;    //关PA开漏输出
	PBOD = 0X00;    //关PB开漏输出
	PCOD = 0X00;    //关PC开漏输出

	ANASEL0 = 0X00; //关PA模拟量通道
	ANASEL1 = 0X00; //关PB模拟量通道
	ANASEL2 = 0X00; //关PC模拟量通道
}

void timer3_Init(void)
{

	T3CLKEN = 1;     //开T3时钟



	PR3H = 0X0F;    //t = 4ms
	PR3L = 0X9F;

	TMR3H = 0X00;    //
	TMR3L = 0X00;

	T3CON = 0X07;
  //



	TMR3IF = 0;      //清中断标志
	TMR3IP = 1;		 //高优先级中断
	TMR3IE = 1;      //开TMR3中断
}



void main (void)
{
	GPIO_Init();      //初始化IO
	TRISD7 = 0;

    timer3_Init();    //timer1定时10ms

	IPEN = 1;        //允许中断优先级
	GIEH = 1;        //所有外设中断
	GIEL = 1;        //开总中断

	while(1);
}




//高优先级中断服务函数

void interrupt ISR_h(void)
{
//进入中断后系统自动关闭中断
	if((TMR3IE == 1)&&(TMR3IF == 1))      //当tmr3定时时间到，产生中断时，PD7翻转
	{
		TMR3IF = 0;
		PD7 = ~PD7;

	}
}

//低优先级中断服务函数
void interrupt low_priority ISR_l (void)
{
//进入中断后系统自动关闭中断

}

