Sunteți pe pagina 1din 8

PRACTICAS PIC16F84 MUESTRAS EN PROTOBOARD

;************************** Display ************************************

; En un display de 7 segmentos conectado al Puerto B se visualiza la cantidad leída por

; el Puerto A. Así por ejemplo si por la entrada lee "---0101" en el display visualiza "5".

; ZONA DE DATOS
;**********************************************************************

LIST P=16F84A

INCLUDE <P16F84A.INC>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; ZONA DE CÓDIGOS
********************************************************************

ORG 0 ; El programa comienza en la dirección 0.

Inicio

bsf STATUS,RP0 ; Acceso al Banco 1.

clrf PORTB ; Las líneas del Puerto B se configuran como salida.

movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada.

movwf PORTA

bcf STATUS,RP0 ; Acceso al Banco 0.

Principal

movf PORTA,W ; Lee la entrada

andlw b'00001111' ; Máscara para quedarse con el valor de las

; entradas correspondientes al nibble bajo.

call Binario_a_7Segmentos ; Convierte código binario a 7 segmentos del display.

movwf PORTB ; Resultado se visualiza por el puerto de salida.

goto Principal
; Subrutina "Binario_7Segmentos" --------------------------------------------------------

Binario_a_7Segmentos ; Tabla para display de 7 segmentos.

addwf PCL,F

Tabla retlw 3Fh ; El código 7 segmentos para el "0".

retlw 06h ; El código 7 segmentos para el "1".

retlw 5Bh ; El código 7 segmentos para el "2".

retlw 4Fh ; El código 7 segmentos para el "3".

retlw 66h ; El código 7 segmentos para el "4".

retlw 6Dh ; El código 7 segmentos para el "5".

retlw 7Dh ; El código 7 segmentos para el "6".

retlw 07h ; El código 7 segmentos para el "7".

retlw 7Fh ; El código 7 segmentos para el "8".

retlw 67h ; El código 7 segmentos para el "9".

retlw 77h ; El código 7 segmentos para la "A".

retlw 7Ch ; El código 7 segmentos para la "B".

retlw 39h ; El código 7 segmentos para la "C".

retlw 5Eh ; El código 7 segmentos para la "D".

retlw 79h ; El código 7 segmentos para la "E".

retlw 71h ; El código 7 segmentos para la "F".

END ; Fin del programa.

; ===================================================================
;************* Int_T0I_ ONDA CUADRADA ************************************

; Por la línea 3 del puerto B se genera una onda cuadrada de 10 kHz, cada semiperiodo dura

; 50 µs. Los tiempos de temporización se lograrán mediante la interrupción por desbordamiento

; del Timer 0. A la línea de salida se puede conectar un altavoz que producirá un pitido.

; ZONA DE DATOS
**********************************************************************

LIST P=16F84A

INCLUDE <P16F84A.INC>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C

ENDC

TMR0_Carga50us EQU d'256'-d'50'

#DEFINE Salida PORTB,3

; ZONA DE CÓDIGOS
********************************************************************

ORG 0

goto Inicio

ORG 4 ; Vector de interrupción.

goto Timer0_Interrupcion

Inicio

bsf STATUS,RP0 ; Acceso al Banco 1.

bcf Salida ; Línea configurada como salida.

movlw b'00001000'

movwf OPTION_REG ; Sin prescaler para TMR0 (se asigna al Watchdog).

bcf STATUS,RP0 ; Acceso al Banco 0.

movlw TMR0_Carga50us ; Carga el TMR0.


movwf TMR0

movlw b'10100000'

movwf INTCON ; Autoriza interrupción T0I y la general (GIE).

Principal ; No puede pasar a modo de bajo consumo

goto $ ; porque detendría el Timer 0.

; Subrutina "Timer0_Interrupcion" -------------------------------------------------------

; Como el PIC trabaja a una frecuencia de 4 MHz el TMR0 evoluciona cada microsegundo. Para

; conseguir un retardo de 50 µs con un prescaler de 1 el TMR0 tiene que contar 50 impulsos.

; Efectivamente: 1 µs x 50 x 1 = 50 µs.

Timer0_Interrupcion

movlw TMR0_Carga50us

movwf TMR0 ; Recarga el timer TMR0.

btfsc Salida ; Testea el anterior estado de la salida.

goto EstabaAlto

EstabaBajo

bsf Salida ; Estaba bajo y lo pasa a alto.

goto FinInterrupcion

EstabaAlto

bcf Salida ; Estaba alto y lo pasa a bajo.

FinInterrupcion

bcf INTCON,T0IF ; Repone flag del TMR0.

retfie

; Comprobando con el simulador del MPLAB se obtienen unos tiempos para la onda cuadrada de

; 61 µs para el nivel alto y de 58 µs para el bajo.

END

; ===================================================================
;***************************** MotorDC **********************************

; Programa de control para un motor de corriente continua en funcionamiento y sentido de

; giro. Con RA0=0, el motor se pone en marcha y su sentido de giro dependerá del valor

; que tenga RA4.

; ZONA DE DATOS
**********************************************************************

LIST P=16F84A

INCLUDE <P16F84A.INC>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

#DEFINE EntradaMarcha PORTA,0 ; Interruptor de puesta en marcha.

#DEFINE EntradaSentido PORTA,4 ; Interruptor de sentido de giro.

; ZONA DE CÓDIGOS
********************************************************************

ORG 0

Inicio

bsf STATUS,RP0

bsf EntradaMarcha ; Configura las líneas de entrada.

bsf EntradaSentido

clrf PORTB ; Las líneas del Puerto B configuradas como salida.

bcf STATUS,RP0

Principal

clrw ; Con esta combinación se detiene el motor.

btfsc EntradaMarcha ; Comprueba el estado del interruptor de


funcionamiento.

goto ActivaSalida

movlw b'00010010' ; Gira en un sentido.

btfsc EntradaSentido ; Comprueba el sentido de giro deseado.


movlw b'00010001' ; Gira en el otro sentido.

ActivaSalida

movwf PORTB

goto Principal

END

; ===================================================================
;**************************** MotorDC_ ****BITS****************************

; Programa de control para un motor de corriente continua en funcionamiento y sentido de

; giro. Con RA0=1, el motor se pone en marcha y su sentido de giro dependerá del valor

; que tenga RA1. Se diferencia del anterior en que trabaja con bits.

; ZONA DE DATOS
*************************************************************************

LIST P=16F84A

INCLUDE <P16F84A.INC>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

#DEFINE SalidaSentido PORTB,0 ; Salida que determina el sentido de giro.

#DEFINE SalidaMarcha PORTB,1 ; Salida de puesta en marcha o paro del


motor.

#DEFINE EntradaMarcha PORTA,0 ; Interruptor de puesta en marcha.

#DEFINE EntradaSentido PORTA,4 ; Interruptor de sentido de giro.

; ZONA DE CÓDIGOS
*********************************************************************

ORG 0

Inicio

bsf STATUS,RP0

bsf EntradaMarcha ; Configura las líneas de entrada y salida.

bsf EntradaSentido

bcf SalidaMarcha

bcf SalidaSentido

bcf STATUS,RP0

Principal
btfsc EntradaMarcha ; Comprueba estado del interruptor de
funcionamiento.

goto Gira

bcf SalidaMarcha ; Para el motor, poniendo a cero la línea de

goto Fin ; habilitación y sale.

Gira

bsf SalidaMarcha ; Pone en marcha el motor.

btfsc EntradaSentido ; Comprueba el sentido de giro deseado.

goto GiroOtroSentido

bcf SalidaSentido ; Gira en un sentido.

goto Fin

GiroOtroSentido

bsf SalidaSentido ; Gira en el otro sentido.

Fin goto Principal

END

; ===================================================================

S-ar putea să vă placă și