1. TEMPORIZADOR TEMPORIZADOR CON TIEMPO BASE EN 1ms… El cual se observa en un LED de salida EN PORTB CALCULO PREVIO: Usando cristal de 4Mz y preescaler 1:8 Retardo=4*Tosc*TMR1*Preescaler Retardo=4*0.25us * 1*8 Retardo=1 ms
PROGRAMA:
LIST
P=16F877A INCLUDE "P16F877A.INC"
ORG 0X00 ; GOTO PRINCIPAL ; ORG 0X04 ; GOTO INTERRUM ; ORG 0X05 ; ;----------------PROGRAMA PRINCIPAL CLRF PORTC CLRF PORTB BSF STATUS,RP0 BSF PIE1,TMR1IE MOVLW 0X00 MOVWF TRISB MOVLW 0XFF MOVWF TRISC CLRF STATUS
PRINCIPAL----------------------------; LIMPIO EL PUETO C ; LIMPIA LOS BITS DEL PUERTO B ; SELECCIONA EL BANCO 1 ; HABILITO LA INTERRUPCIÓN POR TIMER1 ; PARA CONFIGURAR EL PUERTO B ; CONFIGURA PUERTO B COMO SALIDA (porqye salida sera un led) ; PARA CONFIGURAR LOS PUERTOS COMO ENTRADAS ; CONFIGURA EL PUERTO C COMO ENTRADA ; REGRESA AL BANCO 0
;-------------------CONFIGURACIÓN DEL TIMER 1--------------------BSF BSF BSF BCF BCF BCF
T1CON,0 T1CON,1 T1CON,2 T1CON,3 T1CON,4 T1CON,5
; HABILITAMOS EL TIMER 1 (TMR1ON=1) ; SEÑAL DEL RELOJ DEL TIMER 1 EXTERNA (TMR1CS=1) ; NO SE SINCRONIZA LA SEÑAL DE RELOJ DEL TMR1 CON LA SEÑAL EXTERNA (T1SYNC=1) ; NO HABILITA EL OSCILADOR DEL TIMER 1 (T1OSCEN=0) ; PRE DIVISOR DE FRECUENCIA EN 1 (T1CKPS0=0) ; PRE DIVISOR DE FRECUENCIA EN 1 (T1CKPS1=0)
;-------------------HABILITACION DE INTERRUPCIONES---------------BSF BSF GOTO GOTO
INTCON
; Habilitamos interrupción
INTCON,GIE ; HABILITAMOS TODAS LAS INTERRUPCIONES SUEÑO ; A DORMIR!!!! SUEÑO ; A DORMIR!!!!
;-------------------RUTINA DE SERVICIO DE INTERRUPCIÓN-----------INTERRUM BTFSC PORTB,1 ; PREGUNTO COMO ESTÁ EL LED, ENCENDIDO O APAGADO? GOTO OFF_LED ; ESTA PRENDIDO, VOY A APAGARLO BSF PORTB,1 ; ESTA APAGADO, VOY Y LO ENCIENDO BCF PIR1,TMR1IF ; BORRO LA BANDERA DE INTERRUPCIÓNPOR TMR1 RETFIE ; ME RGRESO AL PROGRAMA OFF_LED
BCF PORTB,1 ; APAGO EL LED BCF PIR1,TMR1IF ; BORRO LA BANDERA DE INTERRUPCIÓN POR TMR1 RETFIE ; ME REGRESO AL PROGRAMA END
; FIN DE PROGRAMA
2. El accionamiento del limpiador de parabrisas de un automóvil. _CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador LIST p=16F877A INCLUDE
ORG 0x00 ; Inicio de programa N EQU 0x00 cont1 EQU 0x20 cont2 EQU 0x21 BCF STATUS,RP0 BCF STATUS,RP1 CLRF PORTB BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 BSF PORTB,0 Q INICIA Encledsec CALL Retardo RLF PORTB,1 GOTO Encledsec
; Accede a banco 0 ; Limpia PORTB ; Accede a banco 1 ; Configura todas las patitas de PORTB como salidas ; Regresa a banco 0 ; La línea RA0 de PORTB toma el valor 1, PULSO DE ACTIVACION SEÑAL…. AQUÍ SE ASUME ;EL MOTOR DEL PARABRISA ; Llamada a la rutina de retardo ; Recorre el bit de RB0 a RB7 ; Va a la etiqueta Encledsec
Retardo MOVLW N MOVWF cont1 Rep1 MOVLW N MOVWF cont2 Rep2 DECFSZ cont2,1 GOTO Rep2 DECFSZ cont1,1 GOTO Rep1 RETURN
; Rutina de retardo
; Retorno a la llamada de rutina de retardo.
END
; Fin de programa
3. TMR1 como contador, la salida del conteo es en binario por el PORTB y PORTC, sin límite de cuenta. LIST P=16F877A INCLUDE CBLOCK 0X20 CONT UNIDAD DECENA ENDC ORG 0X2007 DW 0X3F7A ORG 0X0000 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 BSF TRISA,4 ; Entrada del sensor infrarrojos para detectar objetos CLRF TRISB ; Salida a display de 7 segmentos 2 digitos MOVLW 0X38 ; Ck externo, disparo con flanco de bajada, sin prescaler MOVWF OPTION_REG BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 DISPLAYOFF: CLRF TMR1 CLRF CONT CALL DISPLAY SIGUE: MOVFW TMR0 MOVWF CONT CALL DISPLAY GOTO SIGUE DISPLAY: CLRF DECENA MOVFW CONT MOVWF UNIDAD RESTA10: MOVLW .10 SUBWF UNIDAD,F BTFSS STATUS,C GOTO SUMA10 INCF DECENA,F GOTO RESTA10 SUMA10: MOVLW .10 ADDWF UNIDAD,F SWAPF DECENA,W ADDWF UNIDAD,W MOVWF PORTB RETURN END
4. Un pian o do nd e los tiemp os d e las notas m us icales sean a travé s de un o de los tempo rizadores d el PIC. LIST P=16F877A INCLUDE CBLOCK 0X20 LAPSO ; Variable para la duración del tono (0.5s) FACTOR ; Variable para el Periodo del tono ENDC ORG 0X2007 DW 0X3F7A ORG 0X0000 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 BCF TRISA,0 ; Salida al SPEAKER BSF TRISB,0 ; Entradas de teclas BSF TRISB,1 ; MOVLW 0X00 ; Ck interno, Prescaler /2 MOVWF OPTION_REG BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 INICIO: LEETECLAS:
DO: DO1:
TDO: TDO1:
MI: MI1:
BSF PORTA,0
; SPEAKER OFF
BTFSS PORTB,0 GOTO DO BTFSS PORTB,1 GOTO MI GOTO LEETECLAS
; Pulsó ; SI, ir al sonido del DO ; Pulsó ; SI, ir al sonido del MI
MOVLW .131 MOVWF LAPSO BSF PORTA,0 CALL TDO BCF PORTA,0 CALL TDO DECFSZ LAPSO,F GOTO DO1 GOTO LEETECLAS
; Duración de 0.5 seg. la nota DO
MOVLW .19 MOVWF FACTOR CALL TBASE DECFSZ FACTOR,F GOTO TDO1 RETURN MOVLW .165 MOVWF LAPSO BSF PORTA,0 CALL TMI BCF PORTA,0
; Nivel alto ; Nivel bajo
; Repite 131 veces el Periodo
; Medio Periodo del DO ( 0.0019 seg )
; Repite 19 veces el tiempo base
; Duración de 0.5 seg. la nota MI ; Nivel alto ; Nivel bajo
CALL TMI DECFSZ LAPSO,F GOTO MI1 GOTO LEETECLAS TMI: TMI1:
TBASE: SENSA:
MOVLW .15 MOVWF FACTOR CALL TBASE DECFSZ FACTOR,F GOTO TDO1 RETURN
; Repite 165 veces el Periodo
; Medio Periodo del MI ( 0.0030 seg )
; Repite 15 veces el tiempo base
MOVLW .206 ; Tiempo Base con el TMR0 de 100 useg. MOVWF TMR0 BTFSS INTCON,TMR0IF GOTO SENSA RETURN END