/** I N C L U D E S **********************************************************/
#include <p18f4550.h> // Necess�rio para que o compilador adicione a biblioteca
// com as defini��es do PIC selecionado no
projeto, neste
// caso, o modelo 18F4550.
/** D E F I N E S ************************************************************/
// LED's: saida digital
//atribui��o: 0 = LED desligado
// 1 = LED ligado
#define LED_VERDE PORTBbits.RB7
#define LED_VERMELHO PORTBbits.RB6
#define LED_AMARELO PORTBbits.RB5
// LAMP=1 LIGADA
// LAMP=0 DESLIGADA
#define LAMP PORTCbits.RC2
//Bot�o INT2
//Bot�o=0 n�o pressionado
//Bot�o=1 pressionado
#define INT2 PORTBbits.RB2
/** P R O T O T I P O S P R I V A D O S ***********************************/
void MCU_Init (void);
void Toca_Buzina(void);
/** P R O T O T I P O S D A S F U N � � E S D E I N T E R R U P � � O*/
void ConfiguraInterrupcao(void);
void Tratamento_High_Interrupt(void);
void Tratamento_Low_Interrupt(void);
/** F U N C O E S ************************************************************/
/******************************************************************************
* Funcao: void main(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: Fun��o principal do programa. O termo "main" significa
* principal, e isto � relacionado a esta fun��o pois eh
a
* mesma � a primeira a ser chamada apos o reset da PIC.
* Todas as outras fun��es sao chamadas a partir da
"main".
*****************************************************************************/
void main(void)
{
}//end while
}//end main
/******************************************************************************
* Funcao: void MCU_Init(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: MCU_Init � a rotina de configura��o principal do PIC.
* Seu objetivo � configurar as portas de I/O e os
perif�ricos
* do microcontrolador para que os mesmos trabalhem da
maneira
* desejada no projeto.
*
*****************************************************************************/
void MCU_Init(void)
{
// Configura todas as 13 portas anal�gicas ANx (portas do conversor A/D) como pinos
digitais
ADCON1 |= 0x0F; // Todos os pinos como digital
// No PIC18F4550 temos:
// AN0=RA0
// AN1=RA1
// AN2=RA2
// AN3=RA3
// AN4=RA5
// AN5=RE0
// AN6=RE1
// AN7=RE2
// AN8=RB2
// AN9=RB3
// AN10=RB1
// AN11=RB4
// AN12=RB0
}//end ConfiguraSistema
/******************************************************************************
* Funcao: void ConfiguraInterrupcao(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: Fun��o que configura as interrup��es utilizadas no projeto
*
*****************************************************************************/
void ConfiguraInterrupcao(void)
{
RCONbits.IPEN=1; // Habilita prioridade de interrup��o
/******************************************************************************
* Funcao: void Tratamento_High_Interrupt(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: Fun��o de tratamento das interrup��es de ALTA prioridade
* Nessa fun��o deve-se lembrar de fazer a seguinte lista:
* 1- verificar qual foi a causa da interrup��o,
comparando
* os flags de cada tipo de interrup��o.
* 2- tratar a interrup��o selecionada.
* 3- limpar o flag que causou a interrup��o!!!
Importante
* para garantir que n�o ocorrer� uma chamada indesejada ao
sair
* do tratamento da interrup��o.
*
* Ao sair dessa fun��o � usado o retorno do tipo "retfie
fast",
* pois esta fun��o � declarada como ALTA prioridade com a
diretiva
* #pragma interrupt
*
*****************************************************************************/
// ATEN��O NA SINTAXE de declara��o com #pragma interrupt = Alta prioridade
#pragma interrupt Tratamento_High_Interrupt
void Tratamento_High_Interrupt(void)
{
// Verifica se o motivo da chamada da interrup��o foi mudan�a de estado no
PORTB
if(INTCON3bits.INT2IF)
{
Toca_Buzina();
LED_AMARELO = !(LED_AMARELO);
INTCON3bits.INT2IF = 0; //Limpa flag da interrup��o do PORTB
}// end tratamento da interrup��o do PORTB (INTCONbits.RBIF)
/******************************************************************************
* Funcao: void Tratamento_High_Interrupt(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: Fun��o de tratamento das interrup��es de BAIXA prioridade
* Nessa fun��o deve-se lembrar de fazer a seguinte lista:
* 1- verificar qual foi a causa da interrup��o,
comparando
* os flags de cada tipo de interrup��o.
* 2- tratar a interrup��o selecionada.
* 3- limpar o flag que causou a interrup��o!!!
Importante
* para garantir que n�o ocorrer� uma chamada indesejada ao
sair
* do tratamento da interrup��o.
*
* Ao sair dessa fun��o � usado o retorno do tipo "retfie",
* pois esta fun��o � declarada como BAIXA prioridade com a
diretiva
* #pragma interruptlow
*
*****************************************************************************/
// ATEN��O NA SINTAXE de declara��o com #pragma interruptlow = Baixa prioridade
#pragma interruptlow Tratamento_Low_Interrupt
void Tratamento_Low_Interrupt(void)
{
//Escreva o codigo de tratamento da interrup��o de baixa prioridade aqui
// Verifica se o motivo da chamada da interrup��o foi mudan�a de estado no
PORTB
if(INTCONbits.RBIF)
{
LED_AMARELO=0;
Toca_Buzina();
//LED_AMARELO = !(LED_AMARELO);
INTCONbits.RBIF = 0; //Limpa flag da interrup��o do PORTB
}// end tratamento da interrup��o do PORTB (INTCONbits.RBIF)
}//end Tratamento_Low_Interrupt
/******************************************************************************
* Funcao: void Toca_Buzina(void)
* Entrada: Nenhuma (void)
* Sa�da: Nenhuma (void)
* Descri��o: Aciona o buzzer (RE1) com dois bip's curtos
*
*****************************************************************************/
void Toca_Buzina(void)
{
BUZZER=0; // desliga BUZZER
BUZZER=1; // liga BUZZER
Delay10KTCYx(100); // espera 50ms
BUZZER=0; // desliga BUZZER
Delay10KTCYx(100); // espera 30ms
BUZZER=1; // liga BUZZER
Delay10KTCYx(100); // espera 50ms
BUZZER=0; // desliga BUZZER
}
/** V E C T O R R E M A P P I N G ******************************************/
// Se��o necess�ria para informar ao compilador C18 onde s�o os novos endere�os
//da mem�ria de programa que ele deve alocar as rotinas de tratamento do "reset"
//do microcontrolador e das rotinas de tratamento de interrup��o.
//
//ATEN��O: COPIAR ESTA SE��O DO CODIGO PARA TODO ARQUIVO "main.c" DOS PROJETOS QUE
//UTILIZAM O BOOTLOADER PARA GRAVA��O IN-CIRCUIT.
/** F I M D A S E � � O D E V E C T O R R E M A P P I N G *************/