#if 0
/*===========================================================================================
Project : LED ON/OFF Test
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED 
Compiler: MPLAB+Hitech-C
Comment : 8°³ÀÇ ½ºÀ§Ä¡¸¦ ´©¸¦ ½Ã¿¡ LED ¹× ¸±·¹ÀÌ,ºÎÀú°¡ ON/OFF µÇ´Â ÇÁ·Î±×·¥ÀÌ´Ù. 
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#define	XTAL	16000000		// crystal frequency - 4MHz
#include <htc.h>	// Required to interface with delay routines

/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
static unsigned char SwKey=0;
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA=0X00;
	TRISB=0X00;
	TRISC=0x00;
	TRISD=0X00;
	TRISE=0X00;


}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö 
	while(1)   //---Endless Loop
	{
		PORTA=0Xff;
		PORTB=0Xff;
		PORTC=0Xff;
		PORTD=0Xff;
		PORTE=0Xff;
	__delay_ms(50);
	PORTA=0X00;
		PORTB=0X00;
		PORTC=0X00;
		PORTD=0X00;
		PORTE=0X00;
	__delay_ms(50);
	}
}
#endif 
#if 0
/*===========================================================================================
Project : S/W Test
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED 
Compiler: MPLAB+Hitech-C
Comment : 8°³ÀÇ ½ºÀ§Ä¡¸¦ ´©¸¦ ½Ã¿¡ LED ¹× ¸±·¹ÀÌ,ºÎÀú°¡ ON/OFF µÇ´Â ÇÁ·Î±×·¥ÀÌ´Ù. 
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#define	XTAL	16000000		// crystal frequency - 4MHz
#include <htc.h>	// Required to interface with delay routines

/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
static unsigned char SwKey=0;

void SwInput()
{
	TRISD=0Xff;
	RC5=0;
	SwKey=PORTD;
	RC5=1;
	TRISD=0X00;
}
void interrupt HIGH_ISR(void) //100us Å¸ÀÌ¸Ó Ä«¿îÅÍ ÀÎÅÍ·´Æ® 
{	
	INTCON&=~0X04; //Å¸ÀÌ¸Ó ¿À¹öÇÃ·Î¿ì ÀÎÅÍ·´Æ® ÇÃ·¡±× clear
	SwInput();
	TMR0+=0X83; //1ms
}
void SwTest()
{
	switch(SwKey)
	{
	case 0xfe:
	PORTD=0X01;
	PORTC|=LED_CLK;
	PORTC&=~LATCH;
	PORTD=0Xff;
	PORTC|=FND_RELAY_BUZZER_CLK;
	PORTC&=~LATCH;
	break;
	case 0xfd:
	PORTD=0X02;
	PORTC|=LED_CLK;
	PORTC&=~LATCH;
	PORTD=0X00;
	PORTC|=FND_RELAY_BUZZER_CLK;
	PORTC&=~LATCH;
	break;
	case 0xfb:PORTD=0X04;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	case 0xf7:PORTD=0X08;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	case 0xef:PORTD=0X10;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	case 0xdf:PORTD=0X20;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	case 0xbf:PORTD=0X40;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	case 0x7f:PORTD=0X80;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	default: PORTD=0X00;PORTC|=LED_CLK;PORTC&=~LATCH;break;
	}
}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA=0X00;
	TRISB=0X00;
	TRISC=0x00;
	TRISD=0X00;
	TRISE=0X00;
}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö 
	while(1)   //---Endless Loop
	{
     	SwTest();
	}
}
#endif 

#if 0
/*===========================================================================================
Project : UART Test
Version : LK-PIC16F18F DEV & TRAINING
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : UARTÆ÷Æ®¿¡¼­ PCÂÊÀ¸·Î "RS232 to USB Serial Data Output Test" ¹®ÀÚ¸¦ Ãâ·ÂÇÏ°í ÀÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#include <htc.h>	// Required to interface with delay routines
#define LED_CLK 0X00
#define FNDDB_CLK 0X01
#define FND_BUZZER_CLK 0X02
#define LCDCON_CLK 0X03
#define LCDDB_CLK 0X04
#define DC_SERVO_MOTOR_Relay_CLK 0X05
#define DOT_LED_A_CLK 0X06
#define DOT_LED_K_CLK 0X07
#define CP_Sig 0X10  //Active Low Cp
/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
void flilflop_Enable(unsigned char Add, unsigned char OuputData)
{
	PORTD = OuputData;PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTC = Add; //74hc574 cp sig HIGH and 74HC138 E3 HIGH
	PORTB &= ~CP_Sig; //74hc574 cp sig LOW
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
}
void interrupt HIGH_ISR(void) //100us Å¸ÀÌ¸Ó Ä«¿îÅÍ ÀÎÅÍ·´Æ®
{
	INTCON &= ~0X04; //Å¸ÀÌ¸Ó ¿À¹öÇÃ·Î¿ì ÀÎÅÍ·´Æ® ÇÃ·¡±× clear
	if (RCIF)
	{
		while ((TXSTA&0X02 == 0))
		; //¼Û½Å ¹öÆÛ »óÅÂ Ã¼Å©
		TXREG = RCREG;
		RCIF = 0;
	}
	TMR0 += 0X83; //1ms
}
void TxOut(unsigned char data)
{
	while ((TXSTA&0X02 == 0))
	; //¼Û½Å ¹öÆÛ »óÅÂ Ã¼Å©
	TXREG = data;
}
void putch(unsigned char byte)
{
	/* output one byte */
	while (!TRMT)	/* set whilst TX in progress */
	continue;
	TXREG = byte;
}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA = 0X0f;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;

	//-- Å¸ÀÌ¸Ó/ Ä«¿îÅÍ ÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------
	OPTION_REG = 0b01000100;  //--  T0PS2:T0PS0=100 32ºÐÁÖºñ Å¸ÀÌ¸Ó/ÀÎÅÍ·´Æ® Ä«¿îÅÍ´Â Å¬·° Ä«¿îÆÃ½Ã 16Mhz/4= 4Mhz·Î ±¸µ¿ÇÑ´Ù.
	INTCON = 0b10100100; 		//--- GIE=1, TMR0IE=1; 	//-- ¿ÜºÎÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­-----------------------
	TMR0 = 0X83; 				//--- 1ms Å¸ÀÌ¸Ó/Ä«¿îÅÍ ÀÎÅÍ·´Æ® »ý¼º

	//---Åë½Å ·¹Áö½ºÅÍ ÃÊ±âÈ­---------------------------
	TXSTA = 0B00100000;  //--TXEN=1
	RCSTA = 0B10010000;  //--SPE=1
	SPBRG = 25;           //--16Mhz = 9600Bps
	PIE1 = 0B00100000;   //--RCIE=1
	INTCON = 0B11100100; //--GIE=1, PEIE=1
	//-----------------------------------------------------------

}
//----------------------------------------------------

void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö
	while (1)  //--- Endless Loop
	{
		//printf("RS232 to USB Serial Data Output Test \r\n");

	}
}
#endif 
#if 0
/*===========================================================================================
Project : FND(7-Segment) Ä«¿îÆÃ test
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : FND¿¡ ¼ýÀÚ°¡ 0.1ÃÊ °£°ÝÀ¸·Î »ó½ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#include <htc.h>	// Required to interface with delay routines
#define LED_CLK 0X00
#define FNDDB_CLK 0X01
#define FND_BUZZER_CLK 0X02
#define LCDCON_CLK 0X03
#define LCDDB_CLK 0X04
#define DC_SERVO_MOTOR_Relay_CLK 0X05
#define DOT_LED_A_CLK 0X06
#define DOT_LED_K_CLK 0X07
#define CP_Sig 0X10  //Active Low Cp
/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
//------------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 flilflop_Enable(unsigned char Add, unsigned char OuputData)
{
	PORTD = OuputData;PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTC = Add; //74hc574 cp sig HIGH and 74HC138 E3 HIGH
	PORTB &= ~CP_Sig; //74hc574 cp sig LOW
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
}
void FndTimer()
{
	volatile static int cnt2 = 0;
	cnt2++;
	if (cnt2 == 100) //0.1Sec ?
	{
		cnt2 = 0;
		FndCnt++;
		if (FndCnt == 9999)
		{
			FndCnt = 0;
		}
	}
}
void FndTest()
{
	volatile static int j, k, l, m = 0;
	j = (FndCnt % 10000) / 1000; //-------1000ÀÇÀÚ¸®
	k = (FndCnt % 1000) / 100;  //-------100ÀÇÀÚ¸®
	l = (FndCnt % 100) / 10;    //-------10ÀÇÀÚ¸®
	m = (FndCnt % 10);        //-------1ÀÇÀÚ¸®
	if (CntDelay == 1)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X02);
		flilflop_Enable(FNDDB_CLK, Num[j]);

	}
	if (CntDelay == 2)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X04);
		flilflop_Enable(FNDDB_CLK, Num[k]);

	}
	if (CntDelay == 3)
	{

		flilflop_Enable(FND_BUZZER_CLK, 0X08);
		flilflop_Enable(FNDDB_CLK, Num[l]);

	}
	if (CntDelay == 4)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X10);
		flilflop_Enable(FNDDB_CLK, Num[m]);
		CntDelay = 0;
	}
}

void interrupt HIGH_ISR(void) //100us Å¸ÀÌ¸Ó Ä«¿îÅÍ ÀÎÅÍ·´Æ®
{
	INTCON &= ~0X04; //Å¸ÀÌ¸Ó ¿À¹öÇÃ·Î¿ì ÀÎÅÍ·´Æ® ÇÃ·¡±× clear
	CntDelay++;
	FndTimer();
	TMR0 += 0X83; //1ms
}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA = 0X0f;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;
	//-- Å¸ÀÌ¸Ó/ Ä«¿îÅÍ ÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------
	OPTION_REG = 0b01000100;  //--  T0PS2:T0PS0=100 32ºÐÁÖºñ Å¸ÀÌ¸Ó/ÀÎÅÍ·´Æ® Ä«¿îÅÍ´Â Å¬·° Ä«¿îÆÃ½Ã 16Mhz/4= 4Mhz·Î ±¸µ¿ÇÑ´Ù.
	INTCON = 0b10100100; 		//--- GIE=1, TMR0IE=1; 	//-- ¿ÜºÎÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­-----------------------
	TMR0 = 0X83; 				//--- 1ms Å¸ÀÌ¸Ó/Ä«¿îÅÍ ÀÎÅÍ·´Æ® »ý¼º
			flilflop_Enable(LED_CLK, 0);
}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö
	while (1)   //---Endless Loop
	{
		FndTest();
	}
}
#endif
///////////////////////////////////////////////////////////////////////////////////////
/////////////////////ÇÁ·ÎÁ§Æ® ÄÚµå ±¸ºÐ ¶óÀÎ /////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#if 0
/*===========================================================================================
Project : FND(7-Segment) Ä«¿îÆÃ test
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : FND¿¡ ¼ýÀÚ°¡ 0.1ÃÊ °£°ÝÀ¸·Î »ó½ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#include <htc.h>	// Required to interface with delay routines
#define LED_CLK 0X00
#define FNDDB_CLK 0X01
#define FND_BUZZER_CLK 0X02
#define LCDCON_CLK 0X03
#define LCDDB_CLK 0X04
#define DC_SERVO_MOTOR_Relay_CLK 0X05
#define DOT_LED_A_CLK 0X06
#define DOT_LED_K_CLK 0X07
#define CP_Sig 0X10  //Active Low Cp
/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
//------------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 flilflop_Enable(unsigned char OuputData)
{
	/*
	PORTD = OuputData;PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTC = Add; //74hc574 cp sig HIGH and 74HC138 E3 HIGH
	PORTB &= ~CP_Sig; //74hc574 cp sig LOW
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
	*/
	PORTB = OuputData;
}
void FndTimer()
{
	volatile static int cnt2 = 0;
	cnt2++;
	if (cnt2 == 500) //0.1Sec ?
	{
		cnt2 = 0;
		FndCnt++;
		if (FndCnt == 9)
		{
			FndCnt = 0;
		}
	}
}
void FndTest()
{
	/*
	volatile static int j, k, l, m = 0;
	j = (FndCnt % 10000) / 1000; //-------1000ÀÇÀÚ¸®
	k = (FndCnt % 1000) / 100;  //-------100ÀÇÀÚ¸®
	l = (FndCnt % 100) / 10;    //-------10ÀÇÀÚ¸®
	m = (FndCnt % 10);        //-------1ÀÇÀÚ¸®
	if (CntDelay == 1)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X02);
		flilflop_Enable(FNDDB_CLK, Num[j]);

	}
	if (CntDelay == 2)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X04);
		flilflop_Enable(FNDDB_CLK, Num[k]);

	}
	if (CntDelay == 3)
	{

		flilflop_Enable(FND_BUZZER_CLK, 0X08);
		flilflop_Enable(FNDDB_CLK, Num[l]);

	}
	if (CntDelay == 4)
	{
		flilflop_Enable(FND_BUZZER_CLK, 0X10);
		flilflop_Enable(FNDDB_CLK, Num[m]);
		CntDelay = 0;
	}
	*/
	volatile static int j, k, l, m = 0;
	m = (FndCnt % 10);        //-------1ÀÇÀÚ¸®
	flilflop_Enable(Num[m]<<1);
}

void interrupt HIGH_ISR(void) //100us Å¸ÀÌ¸Ó Ä«¿îÅÍ ÀÎÅÍ·´Æ®
{
	INTCON &= ~0X04; //Å¸ÀÌ¸Ó ¿À¹öÇÃ·Î¿ì ÀÎÅÍ·´Æ® ÇÃ·¡±× clear
	CntDelay++;
	FndTimer();
	TMR0 += 0X83; //1ms
}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA = 0X0f;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;
	//-- Å¸ÀÌ¸Ó/ Ä«¿îÅÍ ÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------
	OPTION_REG = 0b01000100;  //--  T0PS2:T0PS0=100 32ºÐÁÖºñ Å¸ÀÌ¸Ó/ÀÎÅÍ·´Æ® Ä«¿îÅÍ´Â Å¬·° Ä«¿îÆÃ½Ã 16Mhz/4= 4Mhz·Î ±¸µ¿ÇÑ´Ù.
	INTCON = 0b10100100; 		//--- GIE=1, TMR0IE=1; 	//-- ¿ÜºÎÀÎÅÍ·´Æ® ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­-----------------------
	TMR0 = 0X83; 				//--- 1ms Å¸ÀÌ¸Ó/Ä«¿îÅÍ ÀÎÅÍ·´Æ® »ý¼º

}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö
	while (1)   //---Endless Loop
	{
		FndTest();
	}
}
#endif
///////////////////////////////////////////////////////////////////////////////////////
/////////////////////ÇÁ·ÎÁ§Æ® ÄÚµå ±¸ºÐ ¶óÀÎ /////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
#if 0
/*===========================================================================================
Project : RTC(½Ã°èIC), ¿ÜºÎEEPROM I2C Åë½Å Å×½ºÆ®
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : I2CÅë½ÅÀ» ÀÌ¿ëÇÏ¿© RTC(½Ã°èIC)¸¦ Á¦¾îÇÏ´Â ÇÁ·Î±×·¥ ¿¹Á¦¼Ò½ºÀÌ¸ç,
UARTÅë½Å Æ÷Æ®·Î RTC(½Ã°èIC) Á¤º¸¸¦ Ãâ·ÂÇÏ°í ÀÖ´Ù.
===========================================================================================*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
//#define	XTAL	16000000		// crystal frequency - 4MHz
#include <htc.h>	// Required to interface with delay routines
#define LED_CLK 0X00
#define FNDDB_CLK 0X01
#define FND_BUZZER_CLK 0X02
#define LCDCON_CLK 0X03
#define LCDDB_CLK 0X04
#define DC_SERVO_MOTOR_Relay_CLK 0X05
#define DOT_LED_A_CLK 0X06
#define DOT_LED_K_CLK 0X07
#define CP_Sig 0X10  //Active Low Cp
/* ÄÚµå Å×½ºÆ® 74hc574 QÇÉÀ¸·Î Ãâ·Â °ªÀÌ ÀúÀåµÇ°í ÀÖÀ½À» ÇÁ·Î±×·¥¸Ó´Â ÀÎÁöÇÏ¿©¾ß ÇÑ´Ù.*/
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
#define On             1
#define Off            0
void flilflop_Enable(unsigned char Add, unsigned char OuputData)
{
	PORTD = OuputData;PORTB |= CP_Sig; //74hc574 cp sig HIGH
	PORTC = Add; //74hc574 cp sig HIGH and 74HC138 E3 HIGH
	PORTB &= ~CP_Sig; //74hc574 cp sig LOW
	PORTB |= CP_Sig; //74hc574 cp sig HIGH
}
BYTE Read_I2C(BYTE ID, BYTE addr)
{
	BYTE Read_Data = 0;
	// Start Condition
	SEN = 1;                              //---------- Initiate bus Start Condition
	while (SEN)
	;                           //---------- Wait Start Condition is Finished

	// EEPROM Address Byte Write
	SSPBUF = ID;                        //---------- Send EEPROM ADDRESS & Write
	//while(( SSPCON2 & 0x1F ) | ( RW ));   //-------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;
	while (ACKSTAT)
	;                       //------- Wait ACK

	// Address Byte Write
	SSPBUF = addr;
	//	while(( SSPCON2 & 0x1F ) | ( RW ));   //---------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;
	while (ACKSTAT)
	;                       //---------- Wait ACK


	// ReStart Condition
	RSEN = 1;                            //---------- Send Repeated Start
	while (RSEN)
	;                         //---------- Wait ReStart Condition is Finished

	// EEPROM Address Byte Write
	SSPBUF = ID | 1;                       //---------- Send EEPROM ADDRESS & Read
	//while(( SSPCON2 & 0x1F ) | ( RW ));  //---------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;
	while (ACKSTAT)
	;                      //---------- Wait ACK

	// Data Read Byte
	RCEN = 1;                            //---------- Enable Receive Mode
	while (RCEN)
	;                         //---------- Wait Receiving is Idle

	Read_Data = SSPBUF;                  //---------- retrieve config reg or temp reg

	// Stop Condition
	PEN = 1;                             //---------- Enable Stop Condition
	while (PEN)
	;                          //---------- Wait Stop Condition is Finished

	return (Read_Data);
}
void Write_I2C(BYTE ID, BYTE addr, BYTE data)
{
	// Start Condition
	SEN = 1;                             //---------- Initiate bus Start Condition
	while (SEN)
	;                          //---------- Wait Start Condition is Finished

	// EEPROM Address Byte Write
	SSPBUF = ID;                       //---------- Send EEPROM ADDRESS & Write
	//while(( SSPCON2 & 0x1F ) | ( RW ));  //---------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;
	while (ACKSTAT)
	;                      //---------- Wait ACK

	// Low Address Byte Write
	SSPBUF = addr;
	//while(( SSPCON2 & 0x1F ) | ( RW ));  //---------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;
	while (ACKSTAT)
	;                      //---------- Wait ACK

	// Data Byte Write
	SSPBUF = data;
	//while(( SSPCON2 & 0x1F ) | ( RW ));  //---------- Wait I2C Idle
	while (SSPSTAT&0x04)
	;  //---------- Wait I2C Idle
	while (ACKSTAT)
	;                      //---------- Wait ACK

	// Stop Condition
	PEN = 1;                             //---------- Enable Stop Condition
	while (PEN)
	;                          //---------- Wait Stop Condition is Finished
}
void TxOut(unsigned char data)
{
	while ((TXSTA&0X02 == 0));
	TXREG = data;
}
void putch(unsigned char byte)
{
	/* output one byte */
	while (!TRMT)	/* set whilst TX in progress */
	continue;
	TXREG = byte;
}
void IN1307_EEPROM_Test()
{
	static unsigned char data, data1, data2 = 0;
	static unsigned char h, m, s = 0;
	static unsigned eeprom_data = 0;
	data = Read_I2C(0Xd0, 0);
	data1 = (data & 0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
	data2 = (data & 0x70);  // 10ÀÇ ÀÚ¸® ÃÊ
	data2 = (data2 >> 4) * 10; //ÃÊ
	s = (data2 + data1);

	data = Read_I2C(0Xd0, 1);
	data1 = (data & 0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
	data2 = (data & 0x70);  // 10ÀÇ ÀÚ¸® ÃÊ
	data2 = (data2 >> 4) * 10;
	m = (data2 + data1);    //ºÐ

	data = Read_I2C(0Xd0, 2);
	data1 = (data & 0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
	data2 = (data & 0x30);  // 10ÀÇ ÀÚ¸® ÃÊ
	data2 = (data2 >> 4) * 10;
	h = (data2 + data1);  //½Ã°£
	printf("RTC(hour:%d minute:%d second:%d) \r\n", h, m, s);

}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA = 0X0f;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;
	//---Åë½Å ·¹Áö½ºÅÍ ÃÊ±âÈ­---------------------------
	TXSTA = 0B00100000;  //--TXEN=1
	RCSTA = 0B10010000;  //--SPE=1
	SPBRG = 25;           //--16Mhz = 9600Bps
	//-----------------------------------------------------------
	TRISC3 = 1;                           //---------- Set SCL (PORTC,3) pin to input
	TRISC4 = 1;                           //---------- Set SDA (PORTC,4) pin to input
	SSPSTAT = 0B00000000;                 //---------- Slew Rate Control bit(400Khz)WER
	SSPCON = 0B00101000;                 //---------- SSPEN Enable SSPM = I2C Master Mode
	SSPCON2 = 0B00000000;
	SSPADD = 9;                        //---------- Master Clock = Fosc/(4*(SSPADD+1)); 400Khz Åë½Å
	//--ADC ·¹Áö½ºÅÍ ¼³Á¤----------------------------------------
	ADCON0 = 0B00000101; //-- ADCS1=0,ADCON0=0(2ºÐÁÖºñ), ADON=1;
	ADCON1 = 0B10000000; //-- ADFM=1
	Write_I2C(0Xd0, 0x00, 0x00);   //---------- RTC SECONDS
	Write_I2C(0Xd0, 0x01, 0x03);   //---------- RTC MINUTES
	Write_I2C(0Xd0, 0x02, 0x06);   //---------- RTC HOURS
	Write_I2C(0Xd0, 0x07, 0x13);   //---------- RTC CONTROL RAM INITIALIZE

}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö
	while (1)   //---Endless Loop
	{
		IN1307_EEPROM_Test();
	}
}
#endif
#if 0
/*===========================================================================
================
Project : °¡º¯ÀúÇ×, Á¶µµ¼¾¼­, ¿Âµµ¼¾¼­, Àû¿Ü¼±¼ö±¤¼¾¼­ ADÄÁ¹öÅÍ Test
Version : LK-PB-F V01
Date    : 2020-08-31
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : °¡º¯ÀúÇ×, Á¶µµ¼¾¼­¸¦ ADÄÁ¹öÆÃ(³¯·Î±×ÀÇ Àü¾ÐÀ» µðÁöÅÐ°ªÀ¸·Î º¯È¯)ÇÏ¿©
, ÀÌ¶§
º¯È¯µÈ µ¥ÀÌÅÍ¸¦ UARTÆ÷Æ®¿¡ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
=============================================================================
==============*/
#include <pic16f877a.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
//#define	XTAL	16000000		// crystal frequency - 4MHz
#include <htc.h>	// Required to interface with delay routines
unsigned int ad_buff[2];

void TxOut(unsigned char data)
{
	while ((TXSTA&0X02 == 0));
	while ((TXSTA&0X02 == 0)); //¼Û½Å ¹öÆÛ »óÅÂ Ã¼Å©
	TXREG = data;
}
void putch(unsigned char byte)
{
	/* output one byte */
	while (!TRMT)	/* set whilst TX in progress */
	continue;
	TXREG = byte;
}
void SysInit()
{
	//-- ÀÔÃâ·Â ·¹Áö½ºÅÍ ¼³Á¤ ÃÊ±âÈ­------------------
	TRISA = 0X03;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;

	//---Åë½Å ·¹Áö½ºÅÍ ÃÊ±âÈ­---------------------------
	TXSTA = 0B00100000;  //--TXEN=1
	RCSTA = 0B10010000;  //--SPE=1
	SPBRG = 25;           //--16Mhz = 9600Bps
	PIE1 = 0B00100000;   //--RCIE=1
	INTCON = 0B11100100; //--GIE=1, PEIE=1

	//--ADC ·¹Áö½ºÅÍ ¼³Á¤----------------------------------------
	ADCON0 = 0B00000101; //-- ADCS1=0,ADCON0=0(2ºÐÁÖºñ), ADON=1;
	ADCON1 = 0B10000000; //-- ADFM=1

}
unsigned int ADC_Test(unsigned char adc_input)
{

	unsigned int data = 0;
	unsigned int data, data2 = 0;
	//---------------------------¾Æ³¯·Î±× ÀÔ·Â ¼³Á¤
	PCFG0 = 0;
	PCFG1 = 0;
	PCFG2 = 0;
	PCFG3 = 0;
	//-------------------------------adcÀÔ·ÂÇÉ ¼³Á¤
	ADCON0 = (adc_input << 3 & 0x38);
	//-----------------------------------Å¬·° ¼³Á¤
	ADON = 1;
	//-----------------------------------ADC ON
	ADCS0 = 0;
	ADCS1 = 0;
	__delay_us(10);
	GO_DONE = 1;
	while (!GO_DONE)
	; //---------ADC°¡ ¿Ï·á µÉ¶§±îÁö ´ë±â
	data = ADRESH;           //--HIGH ADC Data Register
	data = (data << 8);
	data |= ADRESL;          //--LOW ADC Data Register
	ADIF = 0;   //---¹Ýµå½Ã Å¬¸®¾î ÇØ¾ß ´ÙÀ½ ÄÁ¹öÁ¯ ½ÃÀÛ
	return data;

}
void main()
{
	SysInit(); //--- ½Ã½ºÅÛ ¼³Á¤ ÃÊ±âÈ­ ÇÔ¼ö
	while (1)   //Endless Loop
	{
		printf("VR10k:%d \r\n",ADC_Test(0));
	}
}
#endif