Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Instituto Politécnico Nacional Unidad Profesional Interdisciplinaria de Biotecnología

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

INSTITUTO POLITÉCNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA DE


BIOTECNOLOGÍA

Laboratorio de sistemas digitales II


Bitácora Práctica # 5.

Grupo: 4MV3

Equipo: 2

Integrantes:
➢ Hernandez Cedillo Rey David
➢ Lujano Paez Angela Monserrat
➢ Martinez Garcia Jair Eduardo
➢ Morales Linares Ignacio Enrique

Profesores:
➢M. en C. Alejandro Florencio Ramírez.
➢M. en C. Andrés Francisco Morín Sánchez

Fecha: 26 de mayo de 2021


Ejercicio 2
Código de Ensamblador

#include p16f1827.inc ; Include register definition file


LIST P=PIC16F1827
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON &
_MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF
& _IESO_ON & _FCMEN_ON
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON &
_BORV_LO & _LVP_OFF

;====================================================================
; CONSTANTES Y ASIGNACIONES
;====================================================================
#DEFINE OPT_INIC B'10000111' ; PULLUP_ON, TIMERO<<PRESCAL_1:2
#DEFINE OSC_INIC B'01011000' ; PLL HABILITADO, Fosc=32MHz B'01011000'
#DEFINE ANA_INIA B'00000000' ;
#DEFINE ANA_INIB B'00000001' ;
#DEFINE IO_A B'11111111' ;
#DEFINE IO_B B'00111111' ;
#DEFINE IOCBP_ON B'00000010' ; HABILITACIÓN INTERRUPCION PARA FLANCO DE SUBIDA
#DEFINE IOCBN_ON B'00000010' ; HABILITACIÓN INTERRUPCION PARA FLANCO DE SUBIDA

;BITS DEL REGISTRO FLAGSA


#DEFINE RA0ANT 0
#DEFINE RA1ANT 1
#DEFINE RA2ANT 2
#DEFINE RA3ANT 3
#DEFINE FLGA4 4
#DEFINE FLGA5 5
#DEFINE FLGA6 6
#DEFINE FLGA7 7

;====================================================================
; VARIABLES
;====================================================================
PTRNUM EQU H'20'
FLAGSA EQU H'21'
CNTB0 EQU H'22'
CNTB1 EQU H'23'
CONTA EQU H'24'
TIME EQU H'25'
TIM1 EQU H'26'
TIM2 EQU H'27'
TIM3 EQU H'28'
TIM4 EQU H'29'
CNT1 EQU H'2A'
SIG EQU H'2B'

; RESET and INTERRUPT VECTORS


; Reset Vector
ORG 0x0000
RESET_0: GOTO INIC

ORG 0x0004
INTSEL: BCF INTCON,GIE
BCF INTCON,PEIE
BTFSS INTCON,INTF
GOTO __IOC
BCF INTCON,INTF
INCF PTRNUM
MOVF PTRNUM,W
SUBLW H'06'
BTFSS STATUS,Z
GOTO FIN_INT
MOVLW H'01'
MOVWF PTRNUM
GOTO FIN_INT

__IOC: BTFSS INTCON,IOCIF


GOTO PERIF
MOVLB H'07' ; SELECCIONA BANCO SIETE
BTFSS IOCBF,IOCBF1 ; ¿EL EVENTO DE DIÓ EN EL PIN RB1?
GOTO NO_INT
BCF IOCBF,IOCBF1 ; REARMA LA INTERRUPCIÓN
MOVLB H'00' ; SELECCIONA BANCO CERO
DECF PTRNUM
BTFSS STATUS,Z
GOTO FIN_INT
MOVLW H'05'
MOVWF PTRNUM
GOTO FIN_INT

PERIF: BTFSS PIR1,TMR1IF


GOTO NO_INT
BCF PIR1,TMR1IF
MOVLW B'10000011'
MOVWF TMR1L
MOVLW B'11111111'
MOVWF TMR1H
MOVLW B'01000000'
XORWF PORTB,F

FIN_INT: BSF INTCON,GIE


BSF INTCON,PEIE
RETFIE

NO_INT: RESET

; Sección de inicialización
INIC: MOVLB H'00' ; SELECCIONA BANCO CERO
CLRF PORTA
CLRF PORTB
MOVLB H'02' ; SELECCIONA BANCO DOS
CLRF (LATA&0x7F)
CLRF (LATB&0x7F)
MOVLB H'03' ; SELECCIONA BANCO TRES
MOVLW ANA_INIA
MOVWF (ANSELA&0x7F)
MOVLW ANA_INIB
MOVWF (ANSELB&0x7F)
MOVLB H'01' ; SELECCIONA BANCO UNO
MOVLW IO_A
MOVWF (TRISA&0x7F) ; PUERTO A COMO ENTRADAS
MOVLW IO_B
MOVWF (TRISB&0x7F) ; PUERTO B COMO SALIDAS
MOVLW OPT_INIC
MOVWF (OPTION_REG&0x7F) ; INICIALIZACION DEL REGISTRO DE OPCIONES
MOVLW OSC_INIC
MOVWF (OSCCON&0x7F) ; INICIALIZACIÓN DEL OSCILADOR INTERNO
BSF PIE1,TMR1IE
MOVLB H'07' ; SELECCIONA BANCO SIETE
MOVLW IOCBN_ON
MOVWF (IOCBN&0x7F)
MOVLW IOCBP_ON
MOVWF (IOCBP&0x7F)
MOVLB H'00' ; SELECCIONA BANCO CERO
BCF INTCON,TMR0IF
;MOVLW H'9E'
;MOVWF TMR0
MOVLW H'02'
MOVWF TIM1
MOVLW H'02'
MOVWF TIME
MOVLW H'09'
MOVWF TIM2
MOVLW H'13'
MOVWF TIM3
MOVLW H'27'
MOVWF TIM4
MOVLW H'01'
MOVWF PTRNUM
BSF INTCON,IOCIE
BSF INTCON,INTE
BSF INTCON,PEIE ;HABILITA INTERRUPCIÓN DE PERIFÉRICO
BSF INTCON,GIE ; HABILITA INTERRUPCIONES
MOVLW B'00100001'
MOVWF T1CON
MOVLW B'10000011'
MOVWF TMR1L
MOVLW B'11111111'
MOVWF TMR1H
MOVLW H'01'
MOVWF SIG
GOTO DISPLAY
; Tablas y subrrutinas
NUMEROS: MOVF PTRNUM,w
ANDLW H'0F'
BRW
RETLW B'00111111' ; numero 0
RETLW B'00000001' ; numero 1
RETLW B'00000010' ; numero 2
RETLW B'00000011' ; numero 3
RETLW B'00000100' ; numero 4
RETLW B'00000101' ; numero 5
;================================================================
;RUTINA PARA EL MANEJO DEL DISPLAY
DISPLAY: CALL NUMEROS
;MOVWF PORTB
MOVWF CONTA
MOVF CONTA,W
SUBLW H'01'
BTFSC STATUS,Z
GOTO CUARTOS
MOVF CONTA,W
SUBLW H'02'
BTFSC STATUS,Z
GOTO MEDIOS
MOVF CONTA,W
SUBLW H'03'
BTFSC STATUS,Z
GOTO ENTERO
MOVF CONTA,W
SUBLW H'04'
BTFSC STATUS,Z
GOTO BLANCAS
MOVF CONTA,W
SUBLW H'05'
BTFSC STATUS,Z
GOTO REDONDAS
GOTO MAIN20

;RUTINA PARA LAS SEÑALES

CUARTOS BTFSS INTCON,TMR0IF


GOTO DISPLAY
BCF INTCON,TMR0IF
MOVLW H'9E'
MOVWF TMR0
INCF TIME,F
MOVF TIME,W
SUBLW H'01'
BTFSC STATUS,C
GOTO RUTINA1
CL1 INCF CNT1
MOVF CNT1,W
SUBLW H'06'
BTFSC STATUS,C
GOTO ETIQUETA
MOVLW B'10000000'
XORWF PORTB,F
CLRF CNT1
ETIQUETA: BTFSS INTCON,TMR0IF
GOTO CL1
BCF INTCON,TMR0IF
MOVLW H'6E'
MOVWF TMR0
RUTINA1 BCF PORTB,7
BTFSS INTCON,TMR0IF
GOTO DISPLAY
;CLRF TIME
BCF INTCON,TMR0IF
GOTO MAIN20

MEDIOS BTFSS INTCON,TMR0IF


GOTO DISPLAY
BCF INTCON,TMR0IF
DECFSZ TIME
GOTO MOV
GOTO RUTINA2
MOV MOVLW H'9E';9e
MOVWF TMR0
CL2 INCF CNT1
MOVF CNT1,W
SUBLW H'06'
BTFSC STATUS,C
GOTO ETIQ
MOVLW B'10000000'
XORWF PORTB,F
CLRF CNT1
ETIQ: BTFSS INTCON,TMR0IF
GOTO CL1
GOTO CL2
BCF INTCON,TMR0IF
RUTINA2 MOVLW H'3D'
MOVWF TMR0
MOVLW H'01'
MOVWF TIME
BCF PORTB,7
DECFSZ TIM1
GOTO MEDIOS
MOVLW H'02'
MOVWF TIM1
MOVLW H'02'
MOVWF TIME
BSF PORTB,2
GOTO MAIN20

ENTERO BTFSS INTCON,TMR0IF


GOTO DISPLAY
BCF INTCON,TMR0IF
DECFSZ TIME
GOTO MOV1
GOTO RUTINA3
MOV1 MOVLW H'9E';9e
MOVWF TMR0
CL3 INCF CNT1
MOVF CNT1,W
SUBLW H'06'
BTFSC STATUS,C
GOTO ETIQ2
MOVLW B'10000000'
XORWF PORTB,F
CLRF CNT1
ETIQ2 BTFSS INTCON,TMR0IF
GOTO CL3
BCF INTCON,TMR0IF
RUTINA3 MOVLW H'9E'
MOVWF TMR0
MOVLW H'01'
MOVWF TIME
BCF PORTB,7
DECFSZ TIM2
GOTO MEDIOS
MOVLW H'09'
MOVWF TIM2
MOVLW H'02'
MOVWF TIME
BSF PORTB,2
GOTO MAIN20

BLANCAS BTFSS INTCON,TMR0IF


GOTO DISPLAY
BCF INTCON,TMR0IF
DECFSZ TIME
GOTO MOV2
GOTO RUTINA4
MOV2 MOVLW H'9E';9e
MOVWF TMR0
CL4 INCF CNT1
MOVF CNT1,W
SUBLW H'06'
BTFSC STATUS,C
GOTO ETIQ3
MOVLW B'10000000'
XORWF PORTB,F
CLRF CNT1
ETIQ3 BTFSS INTCON,TMR0IF
GOTO CL4
BCF INTCON,TMR0IF
RUTINA4 MOVLW H'9E'
MOVWF TMR0
MOVLW H'01'
MOVWF TIME
BCF PORTB,7
DECFSZ TIM3
GOTO MEDIOS
MOVLW H'13'
MOVWF TIM3
MOVLW H'02'
MOVWF TIME
BSF PORTB,2
GOTO MAIN20

REDONDAS BTFSS INTCON,TMR0IF


GOTO DISPLAY
BCF INTCON,TMR0IF
DECFSZ TIME
GOTO MOV3
GOTO RUTINA5
MOV3 MOVLW H'9E';9e
MOVWF TMR0
CL5 INCF CNT1
MOVF CNT1,W
SUBLW H'06'
BTFSC STATUS,C
GOTO ETIQ4
MOVLW B'10000000'
XORWF PORTB,F
CLRF CNT1
ETIQ4 BTFSS INTCON,TMR0IF
GOTO CL5
BCF INTCON,TMR0IF
RUTINA5 MOVLW H'9E'
MOVWF TMR0
MOVLW H'01'
MOVWF TIME
BCF PORTB,7
DECFSZ TIM4
GOTO MEDIOS
MOVLW H'27'
MOVWF TIM4
MOVLW H'02'
MOVWF TIME
BSF PORTB,2
GOTO MAIN20
; PROGRAMA PRINCIPAL

MAIN: GOTO DISPLAY


MAIN10: GOTO DISPLAY
MAIN20: GOTO MAIN
;====================================================================
END

Código en C
#include <16f1827.h>
#fuses xt,nowdt
//#USE delay (crystal=4Mhz)
#use delay(INTERNAL= 125000)
#use standard_io(B)

unsigned int16 n,j=1;


#int_TIMER1

void TIMER1_isr(void){
if((input(pin_b0)==0)&&j<64)j*=2;
if((input(pin_b2)==0)&&j>2)j/=2;

n=j;
n=150*(n);
output_low(pin_b1);
for(unsigned int16 i=0;i<n;i++)
set_timer1(63583);
}
void main(){
set_tris_b(0b00000101);
output_b(0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
set_timer1(63583);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(TRUE)
{
output_toggle(pin_b1);
}
}

Simulacion

You might also like