#if 1
/*===========================================================================================
Project : LED ON/OFF Test
Version : LK-TB-PIC16F18F
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED 
Compiler: MPLAB+Hitech-C
Comment : 7¼¼±×¸ÕÆ® LED°¡ 0.5ÃÊ °£°ÝÀ¸·Î ¼ýÀÚ¸¦ »ó½ÂÇÏ´Â ÇÁ·Î±×·¥ ÄÚµåÀÌ´Ù. 
===========================================================================================*/
#include <pic18f452.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#define	XTAL	16000000		// crystal frequency - 4MHz
#include <htc.h>	// Required to interface with delay routines
/*Refer confguration bits for PIC18F452
https://gputils.sourceforge.io/html-help/PIC18F452-conf.html
*/
#pragma config OSC = HSPLL  // Oscillator Selection bits (HS oscillator)
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRT = OFF // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOR = OFF // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF  // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
                          // (RB3 is digital I/O, HV on MCLR must be used for programming)

void DelayMs(unsigned int ms)
{
	unsigned char i;
	do {
		i = 4;
		do {
			__delay_us(250);
		} while(--i);
	} while(--ms);

DelayMs
}
#define FND_a (0X01<<1)
#define FND_b (0X01<<2)
#define FND_c (0X01<<3)
#define FND_d (0X01<<4)
#define FND_e (0X01<<5)
#define FND_f (0X01<<6)
#define FND_g (0X01<<7)
//------------4 FND ------------------------------------
volatile char Num[11] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X27, 0X7F, 0X6F};  //0~9 ¹è¿­¼±¾ð  FND
volatile static unsigned int FndCnt; //FND Ä«¿îÆÃ ¼ýÀÚ
volatile static unsigned int CntDelay = 0;; //FND Ä«¿îÆÃ ¼ýÀÚ
void FndTimer()
{
	volatile static int cnt2 = 0;
	cnt2++;
	if (cnt2 == 500) //0.5Sec ?
	{
		cnt2 = 0;
		FndCnt++;
		if (FndCnt == 10)
		{
			FndCnt = 0;
		}
	}
}
void interrupt HIGH_ISR(void) //100us Å¸ÀÌ¸Ó Ä«¿îÅÍ ÀÎÅÍ·´Æ®
{
	INTCON &= ~0X04; //Å¸ÀÌ¸Ó ¿À¹öÇÃ·Î¿ì ÀÎÅÍ·´Æ® ÇÃ·¡±× clear
	CntDelay++;
	FndTimer();
	TMR0 += 0X83; //1ms
}
void FndTest()
{
	volatile static int m = 0;
	m = (FndCnt % 10);        //-------1ÀÇÀÚ¸®
	PORTB = Num[m]<<1;

}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISB &= ~(FND_a|FND_b|FND_c|FND_d|FND_e|FND_f|FND_g);
	//-- Å¸ÀÌ¸Ó/ Ä«¿îÅÍ ÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------
	OPTION_REG = 0b01000100;  //--  T0PS2:T0PS0=100 32ºÐÁÖºñ Å¸ÀÌ¸Ó/ÀÎÅÍ·´Æ® Ä«¿îÅÍ´Â Å¬·° Ä«¿îÆÃ½Ã 16Mhz/4= 4Mhz·Î ±¸µ¿ÇÑ´Ù.
	INTCON = 0b10100100; 		//--- GIE=1, TMR0IE=1; 	//-- ¿ÜºÎÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­-----------------------
	TMR0 = 0X83; 		
}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö 
	while(1)   //---Endless Loop
	{
		FndTest();
	}
}
#endif 