Paso 5: SOFTWARE
He hecho mi mejor comentario este programa lo mejor que pude. Usted debe ser capaz de seguir a lo largo. No es ninguna obra maestra, pero una vez más, estaba trabajando con un conjunto de instrucciones inferior. Puede descargar el. ASM de código y utilizarlo con su disco de programador ICD2 PIC, como se ve en la imagen. También estoy encantado de responder cualquier pregunta que pueda tener relacionadas con el software!
El código ASM puede descargarse aquí: http://www.electroniclessons.com/10F222TMPO.ASM
*********************************************************************************************
CÓDIGO PRINCIPAL 0X000
MOVWF OSCCAL; registro de actualización con valor de fábrica cal
INICIALIZAR
MOVLW B '0010'; GPIO1 = COMPARADOR EN - GPIO0 RELÉ ACTIVA
GPIO DE TRIS; INICIALIZAR
CLRF ADCON0; DESACTIVAR EL ADC
CLRF GPIO; SALIDAS CLARO
MOVLW B '00001000'
OPCIÓN; HABILITAR COMO GPIO2 DIGITAL PORT
SCAN1:
BTFSS GPIO, 1; CONSULTAR PARA VER SI RUIDOSO RUIDO (CLAP SE DETECTA)
GOTO SCAN1; SI NO, OTRA VEZ DE LA EXPLORACIÓN (LAZO)
ASEGÚRESE DE:
BTFSC GPIO, 1; ¿LA FORMA DE ONDA HA DE ALTO A BAJO?
GOTO ASEGURAR; SI NO ES ASÍ, COMPRUEBE OTRA VEZ (LAZO). IF, GOTO SIGUIENTE INSTRUCCIÓN
LLAME A LOOP1; RETARDO DE
CUENTA REGRESIVA:; RUTINA DE CONTEO REGRESIVO
MOVLW 0XFF; VALOR DE REFERENCIA DE CARGA
MOVWF TEMP5; TIEMPO DE CARGA REGISTRO #1 CON VALOR DE REFERENCIA ANTERIOR
MOVLW 0XFF; VALOR DE REFERENCIA DE CARGA
MOVWF TEMP6; REGISTRO DE TIEMPO DE CARGA #2 CON VALOR DE REFERENCIA
COUNTDOWN2:; RUTINA DE DOUNTDOWN REAL
BTFSC GPIO, 1; CONSULTAR PARA VER SI EL RUIDO ES EVIDENTE.
GOTO RELAYACTIVATE; SI SÍ, ACTIVAR RELÉ (ALTERNAR)
DECFSZ TEMP5; SI NO, DECREMENTO CONTADOR #1 SI REG = 0, SALTAR SIGUIENTE PASO
GOTO COUNTDOWN2; VOLVER ATRÁS Y BUSCAR OTRA VEZ SEGUNDO RUIDO
MOVLW 0XFF; REGISTRO DE TIEMPO DE CARGA #1 CON VALOR COMPLETO OTRA VEZ
MOVWF TEMP5; CARGA
DECFSZ TEMP6; DISMINUIR T-REGISTRO #2
GOTO COUNTDOWN2; SI REGISTRO DE TIEMPO #2 NO ES Z, SEGUNDO SCAN DE NUEVO
GOTO SCAN1; SI REGISTRO DE TIEMPO #2 FUE 0, VOLVER A EMPEZAR
RELAYACTIVATE:
BSF GPIO, 0; ACTIVAR RELÉ
LLAME A LOOP1; SERIE DE 3 RETRASOS
LLAME A LOOP1
LLAME A LOOP1
; ESTA SECUENCIA SIGUIENTE ES SÓLO UN IMITAR DE LA PRIMERA SECUENCIA, SÓLO ESTAMOS
; ESPERA PARA ACTIVAR EL RELÉ A SU POTISION ORIGINAL.
; HE AÑADIDO UN BREVE RETRASO EN EL COMIENZO, POR ***
SCAN2:
LLAME A LOOP1; SERIE DE 3 RETRASOS
LLAME A LOOP1
LLAME A LOOP1
BTFSS GPIO, 1
GOTO SCAN2
ENSURE2:
BTFSC GPIO, 1
GOTO ENSURE2
LLAME A LOOP1
COUNTDOWN3:
MOVLW 0XFF
MOVWF TEMP5
MOVLW 0XFF
MOVWF TEMP6
COUNTDOWN4:
BTFSC GPIO, 1
GOTO RELAYDEACTIVATE
DECFSZ TEMP5
GOTO COUNTDOWN4
MOVLW 0XFF
MOVWF TEMP5
DECFSZ TEMP6
GOTO COUNTDOWN4
GOTO SCAN2
RELAYDEACTIVATE:
BCF GPIO, 0; DESACTIVAR RELÉ
RESET ; PROGRAMA DE RESET
LOOP1:
; LOS TRABAJOS DE RUTINA BUCLE LIKE THIS. CARGA SINCRONIZACIÓN REGISTRO TEMP1/2 CON 8 BITS
VALORES Y ES OBRAS PARA ESENCIALMENTE EL PRIMER REGISTRO, Y
CUANDO EL PRIMER REGISTRO ES 0, EL PROGRAMA REDUCE EL SEGUNDO REGISTRO DE SINCRONIZACIÓN (TEMP2). EN ESTE PUNTO, ESTE SIGUE HACIENDO LO MISMO HASTA EL VALOR DEL REGISTRO TEMP2 = 0, EN QUE PUNTO, LOS EXTREMOS DE LA DEMORA Y VOLVER AL PROGRAMA.
MOVLW 0 X 00
MOVWF TEMP1
MOVLW 0XF0
MOVWF TEMP2
LOOP2:
DECFSZ TEMP1
GOTO LOOP2
DECFSZ TEMP2
GOTO LOOP2
VOLVER
FINAL
***********************************************************************************************