Escolar Documentos
Profissional Documentos
Cultura Documentos
h>
#device adc=10
#FUSES
#FUSES
#FUSES
#FUSES
#FUSES
#FUSES
#FUSES
#FUSES
#FUSES
NOWDT
INTRC_IO
CPD
PROTECT
NOMCLR
NOPUT
NOBROWNOUT
BANDGAP_HIGH
RESERVED
#use delay(clock=4M)
#include <Puertos.c>
//*******************Declaracion de Variables**********************************
signed long
Error=0,
//Variable que almacena la diferencia entre el set_point y Tem
p
Set_Point=0,//Valor al cual deseamos poner la temperatura
Temp=0;
//Valor de temperatura medida en un instante de tiempo
/***************************************************************************
Esta funcion se realiza por la interrupcion del timer0, se utiliza el
Timer0 para determinar el tiempo necesario que transcurre despues del cruce por
cero para variar el angulo de disparo del Triac
***************************************************************************/
int1 int_flag;
#int_GLOBAL
void TIMER0_isr(void){
if(int_flag){
delay_us(135);
disable_interrupts(INT_TIMER0);
}
set_timer0(0);
GP4=1;
//Se pone a 0 GP4 para encender el optoacoplador
GP5=1;
delay_us(50); //Se hace que el ancho del pulso de disparo sea de 50us
GP4=0;
//Se pone a 1 GP4 para apagar el optoacoplador (el Triac queda
encendido)
clear_interrupt(INT_TIMER0);
//Limpiamos el flag TIMR0 para evitar reingreso a la interrupc
ion
int_flag=1;
}
void RA_isr(void){
if(Error>=255){ //Si Error es igual a 255 se debe encender el Triac justo de
spues del cruce por cero
int_flag=0;
delay_us(50);
TIMER0_isr(); //para ello saltamos a la funcion TIMER0_isr() que envia un
pulso de 30us al triac
enable_interrupts(INT_TIMER0); //desabilitamos la interrupcion del timer
0 para no reingresar
goto L1;
//Saltamos al label L1
}
else{
//Si Error es distinto a 255
GP5=0;