viernes, 11 de abril de 2014

Laboratorio 3 Display 7 segmentos, Aumenta y decremento de contador

En este laboratorio se implementa un desarrollo de firmware para aumentar y decrementar una serie de nuemeros en un Display de 7 segmentos con el uso de retardos.


Trabajo realizado por:


·
Diego Armando Buitrago
Buitragofuentes@gmail.com

·
Andrey Baquero Acevedo
Andreybaquero@gmail.com

·
Oscar Felipe Yepes

felipeyepes@gmail.com


Montaje del Circuito. 






Componentes a utilizar

  • 2 Display de 7 segmento2
  • 2 Resistencia de 1 K
  • PIC 16F877A
  • Cristal de 20 MHZ.
  • 2 condensadores de 22 Picos
  • 1 pulsador
  • 1 Resistencia de 220 Ohm

Código implementado. 

;********************************************************************
; CONTADOR DECIMAL DE PULSOS
;********************************************************************
; NOMBRE: p1_led.asm
; FECHA: 14/07/2011
; VERSION: 1.00
; PROGRAMADOR: Vicente Alexander Macas
;********************************************************************
; DESCRIPCION: 
;Este programa cuenta mediante una variable los pulsos ingresados mediante ;una botonera en RB0. También habrá un SWITCH en el puerto A que indique ;modo: de incremento o de decremento. El resultado se lo visualiza en un ;DISPLAYS de 7 segmentos colocado en el puerto C.
;********************************************************************

;DIRECTIVAS

LIST p=16F887 ;Tipo de microcontrolador
INCLUDE P16F887.INC ;Define los SFRs y bits del 
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_INTOSCIO&_FCMEN_OFF
;Setea parámetros de configuración

errorlevel -302 ;Deshabilita mensajes de 
;advertencia por cambio 
;bancos
;*********************************************************************
CONTEO   EQU 0X21


;PROGRAMA
ORG 0x00 ;Vector de RESET
GOTO MAIN
ORG 0x04 ;Vector de interrupción
GOTO Interrupcion ;Va a rutina de interrupción


MAIN
;SETEO DE PUERTOS 
BSF STATUS,5
BSF STATUS,6 ;Selecciona el Banco 3
CLRF ANSELH ; Digitaliza puertos ANS.
CLRF         ANSEL
BCF STATUS,6 ;Selecciona el Banco 1
BSF OSCCON,6        
BSF OSCCON,5         
BCF OSCCON,4 ; Selecciona el reloj de 8MHz
BSF OSCCON,0 ; Selecciona el oscilador de rejor interno.
MOVLW 0XFF
MOVWF TRISA ;Setea PORTA como entrada.
MOVLW 0XFF
MOVWF TRISB ;Setea PORTB como entrada.
CLRF TRISC ;Setea PORTC como salida.
MOVLW B'10010000'
MOVWF INTCON ; GIE, INTE Habilita interrupcion por RB0.

;INICIALIZACION
BCF STATUS,5 ;Selecciona el Banco 0.
CLRF PORTA ;Encera PORTA
CLRF           PORTB ;Encera PORTB
CLRF            PORTC ;Encera PORTCINTCON
CLRF            PORTE ;Encera PORTD
CLRF CONTEO ;Encera CONTEO
MOVFW CONTEO      ;Encera el registro W.
CALL TABLA
MOVWF PORTC

INICIO
NOP
GOTO INICIO ; Lazo infinito

Interrupcion
BCF         INTCON,INTF   ; Borra la bandera de interrupcion TMR0IF
CLRF       PORTB ; Encera el PORTB.
BTFSC     PORTA,0 ; Pregunta si en RA0 esta con cero.
GOTO INCREMENTO ; RA0=1 INCREMENTO
GOTO DECREMENTO ; RA0=0 DECREMENTO
INCREMENTO
INCF CONTEO ; Incrementa CONTEO
MOVFW CONTEO ; A W le asiga CONTEO 
CALL TABLA 
MOVWF PORTC ; PORTC se le asigna el código de 7 segmentos.
MOVFW CONTEO ; a W se le asigna CONTEO
SUBLW 0X0A ; W=10-CONTEO
BTFSS STATUS,Z ; Si CONTEO=10 salta.
GOTO SALIDA
MOVLW 0X00 
MOVWF CONTEO ; CONTEO=0
MOVFW CONTEO ; W=CONTEO
CALL TABLA 
MOVWF PORTC ; PORTC se carga con el código de 7 segmentos.
GOTO SALIDA

DECREMENTO
DECF CONTEO ; Decrementa CONTEO en una unidad.
MOVFW CONTEO ; W=CONTEO
SUBLW 0XFF ; W=255-CONTEO
BTFSC STATUS,Z ; Verifica si desborde mediante Z=1.
GOTO DESBORDE 
MOVFW CONTEO ; W=CONTEO
CALL TABLA  
MOVWF PORTC ; PORTC le asigna el código de 7 segmentos.
GOTO SALIDA

DESBORDE
MOVLW 0X09 
MOVWF CONTEO ; CONTEO=9
MOVFW CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se carga con 9.

SALIDA
BSF         INTCON,GIE      ; Se habilita la interrupcion global
    RETFIE     ; Regresamos al lazo infinito a espera
  ; de otra interrupcion.                 
TABLA
    ADDWF   PCL,F       ; PCL + W -> W
; El PCL se incrementa con el 
; valor de W proporcionando un 
; salto
    RETLW   0x3F     ; Retorna con el código del 0
RETLW 0x06 ; Retorna con el código del 1
RETLW 0x5B ; Retorna con el código del 2
RETLW 0x4F ; Retorna con el código del 3
RETLW 0x66 ; Retorna con el código del 4
RETLW 0x6D ; Retorna con el código del 5
RETLW 0x7D ; Retorna con el código del 6
RETLW 0x07 ; Retorna con el código del 7
RETLW 0x7F ; Retorna con el código del 8
RETLW 0x67 ; Retorna con el código del 9
RETLW 0X00
END ; Fin del programa fuente
-










Laboratorio 2 Implementación Secuencia de Led

En este laboratorio se implementa un desarrollo de firmware para encender en secuencia led con el uso de retardos.


Trabajo realizado por:


·
Diego Armando Buitrago
Buitragofuentes@gmail.com

·
Andrey Baquero Acevedo
Andreybaquero@gmail.com

·
Oscar Felipe Yepes

felipeyepes@gmail.com


Montaje del Circuito. 







Componentes a utilizar

  • 8 Led
  • 8 Resistencia de 150 Ohm
  • PIC 16F877A
  • Cristal de 20 MHZ.
  • 2 condensadores de 22 Picos
  • 1 pulsador
  • 1 Resistencia de 1 K


Código implementado. 



list p=16f877a



#include <p16f877a.inc>




radix HEX



cblock 0x20 ;separa espacios para 20 registros
;definir 3 registros para retardo

Delay1 ;retardo 1
Delay2 ;retardo 2
Delay3 ;retardo 3
endc
org 0x00
goto Start

org 0x05

Delay 
movlw 0x03
movwf Delay3
Delayloop
Decfsz Delay1,1
Goto Delayloop
Decfsz  Delay2,1
Goto Delayloop
Decfsz Delay3,1
goto Delayloop


return



Start

bsf STATUS,RP0   ;se pone en 1 el bit 6 del registro status para cambiarnos al banco 1 
bcf STATUS,RP1 ;se pone en 0 el bit 7 del registro status para cambiarnos al banco 1
clrf TRISB 
bcf STATUS,RP0 ;se pone en 0 el bit 6 del registro status para cambiarnos al banco 0
bcf STATUS,RP1 ;se pone en 0 el bit 7  del registro status para cambiarnos al banco 0

Mainloop
bsf PORTB,0
call Delay
bcf TRISB,0
call Delay
bsf PORTB,1
call Delay
bcf PORTB,1
call Delay
bsf PORTB,2
call Delay
bcf PORTB,2
call Delay
bsf PORTB,3
call Delay
bcf PORTB,3
call Delay
bsf PORTB,4
call Delay
bcf PORTB,4
call Delay
bsf PORTB,5
call Delay
bcf PORTB,5
call Delay
bsf PORTB,6
call Delay
bcf PORTB,6
call Delay
bsf PORTB,7
call Delay
bcf PORTB,7
call Delay
bsf PORTB,6
call Delay
bcf PORTB,6
call Delay
bsf PORTB,5
call Delay
bcf PORTB,5
call Delay
bsf PORTB,4
call Delay
bcf PORTB,4
call Delay
bsf PORTB,3
call Delay
bcf PORTB,3
call Delay
bsf PORTB,2
call Delay
bcf PORTB,2
call Delay
bsf PORTB,1
call Delay
bcf PORTB,1
call Delay
  goto Mainloop


end

Resultado.















Laboratorio 1 Implementan parpadeo Led

En este laboratorio se implementa un desarrollo de firmware para encender y apagar un led con el uso de retardos.


Trabajo realizado por:


·
Diego Armando Buitrago
Buitragofuentes@gmail.com

·
Andrey Baquero Acevedo
Andreybaquero@gmail.com

·
Oscar Felipe Yepes

felipeyepes@gmail.com



Diagrama de Flujo. 



Montaje del Circuito. 





Componentes a utilizar.

  • 1 Led
  • 1 Resistencia de 150 Ohm
  • PIC 16F877A
  • Cristal de 20 MHZ.
  • 2 condensadores de 22 Picos
  • 1 pulsador
  • 1 Resistencia de 1 K


Código implementado. 


list p=16f877a



#include <p16f877a.inc>




radix HEX



cblock 0x20 ;separa espacios para 20 registros
;definir 3 registros para retardo

Delay1 ;retardo 1
Delay2 ;retardo 2
Delay3 ;retardo 3
endc
org 0x00
goto Start

org 0x05

Delay 
movlw 0x02
movwf Delay3
Delayloop
Decfsz Delay1,1
Goto Delayloop
Decfsz  Delay2,1
Goto Delayloop
Decfsz Delay3,1
goto Delayloop


return



Start

bsf STATUS,RP0   ;se pone en 1 el bit 6 del registro status para cambiarnos al banco 1 
bcf STATUS,RP1 ;se pone en 0 el bit 7 del registro status para cambiarnos al banco 1
bcf TRISB,0 
bcf STATUS,RP0 ;se pone en 0 el bit 6 del registro status para cambiarnos al banco 0
bcf STATUS,RP1 ;se pone en 0 el bit 7  del registro status para cambiarnos al banco 0

Mainloop
bsf PORTB,0
call Delay
bcf TRISB,0
call Delay
  goto Mainloop


end




Resultado.


Formato de revisión .