Академический Документы
Профессиональный Документы
Культура Документы
//DTMF.c
//Microcontrolador: PIC16F628A.
//Oscilador interno: 4MHz
//Función principal.
void main(){
PORTB=0x00; //Inicialización.
CMCON=0x07; //Pines RA<3:0> como E/S digital.
TRISB=0x00; //Puerto B como salida.
OPTION_REG=0b11010111; //Timer0 como temporizador. Prescaler asignado
//al Timer0. Prescaler 1:256.
GIE_bit=1; //Interrupciones habilitadas.
T0IE_bit=1; //Interrupción del Timer0 habilitada.
RB0_bit=EEPROM_Read(0x00); //Actualiza el pin RB0 a su último estado.
//La primera vez que se enciende el PIC, el
estado del
//pin RB0 será 1.
TMR0=61; //Valor inicial del TMR0 (interrupción cada 50ms).
while (1){
while (RA4_bit==0) ; //Esperar mientras no hay dato disponible.
while (RA4_bit==1) ; //Dato disponible. Esperar mientras RA4 está en
alto.
i++;
estado=1;
num_cifras=i;
tecla[i]=PORTA; //Lee el dato disponible y lo almacena.
conteo=0;
}
}
void interrupt(void){
TMR0=61; //Valor inicial del TMR0.
conteo++;
if (conteo==60 && estado==1){
if (tecla[1]==1 && tecla[2]==9 && tecla[3]==7 && tecla[4]==3 &&
num_cifras==4){ //Clave:1973
RB0_bit=1; //Activa el pin RB0.
EEPROM_Write(0x00,1); //Guarda el estado del pin RB0.
}
if (tecla[1]==1 && tecla[2]==9 && tecla[3]==7 && tecla[4]==4 &&
num_cifras==4){ //Clave:1974
RB0_bit=0; //Desactiva el pin RB0.
EEPROM_Write(0x00,0); //Guarda el estado del pin RB0.
}
if (tecla[1]==3 && tecla[2]==5 && tecla[3]==7 && tecla[4]==9 &&
num_cifras==4){ //Clave:3579
RB1_bit=1; //Activa el pin RB1.
for (j=1;j<=10;j++) //Espera 10 segundos.
Delay_1sec();
RB1_bit=0; //Desactiva el pin RB1.
}
i=0; conteo=0; estado=0;
}
k++;
if (k==28800){ //Contabiliza 12 horas (28.800x30x0,050
segundos).
k=0;
m++;
if (m==30){
m=0;
RB2_bit=1; //Enciende el pin RB2.
pin=1; //Registra el encendido de RB2.
}
}
Información complementaria