/*===========================================================================================
Project : 릴레이, 부저 테스트
Version : LK-PB-F V01
Date    : 2011-07-28
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: MPLAB+Hitech-C
Comment : 릴레이, 부저를 2초마다 ON/OFF하는 프로그램이다.
===========================================================================================*/
#include <pic18f452.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 DelayMs(unsigned int ms)
{
	unsigned char i;
	do {
		i = 4;
		do {
			__delay_us(250);
		} while(--i);
	} while(--ms);
}
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 RelayBuzzTest()
{

	flilflop_Enable(FND_BUZZER_CLK, 0X00);
	flilflop_Enable(DC_SERVO_MOTOR_Relay_CLK, 0X00);
	DelayMs(500); //0.5 sec 지연
	flilflop_Enable(FND_BUZZER_CLK, 0x01);
	flilflop_Enable(DC_SERVO_MOTOR_Relay_CLK, 0X80);
	DelayMs(500);
}
void SysInit()
{
	//-- 입출력 레지스터 설정 초기화------------------
	TRISA = 0X0f;
	TRISB = 0X01;
	PORTB = 0X00;
	TRISC = 0x80;
	PORTC = 0X00;
	TRISD = 0X00;
	PORTD = 0X00;
	TRISE = 0X00;
	PORTE = 0X00;
}
void main()
{
	SysInit(); //--- 시스템 설정 초기화 함수
	while (1)   //---Endless Loop
	{
		RelayBuzzTest();
	}
}