HOLA: Este programa trata de temporizar, 5 segundos un led cuando el interruptor I1 está en 1 y cuando esta en 0 salta a BUCLE. I1 LED 0 BUCLE 1 5 SEGUNDOS POR FAVOR ME PUEDEN AYUDAR EN LA PARTE DE LAS RUTINAS DE : DELAY 5S, ¿COMO CALCULA EL PROGRAMA EL TIEMPO PARA ENCENDER EL LED POR 5S Y APAGARLO POR 2S LED? POR EJEMPLO: EN EL TRAT _1 , se llama a la rutina DELAY5S, 5 SEGUNDOS (SE QUE LAS INSTRUCCIONES DE SALTO TARDAN 2 MICROSEGUNDOS Y LAS NORMALES 1 MICROSEGUNDO CON UN XL=4MHZ) COMO SEVE EN EL PROGRAMA HAY UNA RUTINA AUXILIAR LA CUAL HACE QUE SE DESBORDE EL TMR0 = 0XD9= 217 O SEA CUENTA 39 Y ESTE A SU VEZ DECREMENTA UN REGISTRO AUXILIAR LLAMADO TEMPO1 Y ES CARGADO CON 100. GRACIAS.. EL PROGRAMA FUNCIONA PERFECTO CUANDO LO MONTE EN LA PLACA DE ENTRENAMIENTO PERO QUIERO SABER LOS PASOS QUE REALIZA EL PROGRAMA PARA TRATAR POR EJEMPLO EL DELAY DE SEGUNDOS (COMO HACE PARA CALCULAR DICHO TIEMPO DE 5SEGUNDOS) GRACIAS. LIST P=16F84A RADIX HEX
INCLUDE "P16F84A.INC" W EQU 0X00 ;Registro de destino W:d=0 F EQU 0X01 ;Registro de destino F:d=1 Z EQU 0X02 ;Bit2 del registro ESTADO TMR0_OPT EQU 0X01 ;El registro tmr0 ocupa la dirccion 1 ;de banco 1 ESTADO EQU 0X03 ;El registro ESTADO ocupa la direccion ;3 de los dos bancos INTCON EQU 0X0B ;El registro INTCON ocupa la direccion ;0x0B de los dos bancos PUERTAA EQU 0X05 ;La PUERTAA ocupa la dirrecion 5 del ;banco 0 y su reguistro de configuracion ;la direcicion 5 del banco 1 PUERTAB EQU 0x06 ;La PUERTAB ocupa la dirección 6 del ;banco 0 y su registro de configuración ;la dirección 6 del banco 1 AUX EQU 0x0c ;Registro auxiliar en el que se carga el ;estado del interruptor TEMPO1 EQU 0x0E ;Registro auxiliar para las rutinas de ;DELAY ORG 0 ;El programa comienza en la dirección 0 y goto INICIO ;salta a la dirección 5 para sobrepasar el ORG 5 ;vector de interrupción
INICIO bsf ESTADO,5 ;Selección del banco 1 movlw b'00000001' ;Se configuran RAO como movwf PUERTAA ;entradas clrf PUERTAB ;Se configura la PUERTAB como salida movlw b'00000111' movwf TMR0_OPT ;Se asigna el preescaler al TMR0 bcf ESTADO,5 ;Selección del banco 0 clrf PUERTAA ;Se inicializan las puertas a clrf PUERTAB ;ceros BUCLE call DELAY2S ;Se deja tiempo para que el usuario cambie el ;el estado 1/0 movf PUERTAA,W ;Se pasa el contenido de la PUERTAA a un registro movwf AUX ;auxiliar. Dicho registro habrá que pasarlo a W antes ;de cada operación XORLW, ya que la anterior habrá ;cambiado su valor xorlw b'000000001' ;Se hacen sucesivas máscaras para saber qué ;combinación se ha introducido ;Explora el bit2 de ETADO btfsc ESTADO,Z ;Z1:Hasido 0? Z0:No ha sido 0? goto TRAT_1 ;salta a trat_1 si reultado es w=0 goto BUCLE ;RUTINA PARA LA COMBINACIÓN I1=1 TRAT_1 bsf PUERTAB,1 ;Se enciende el LED de RB1 (verde) call DELAY5S ;Se espera los segundos adecuados según I1 bcf PUERTAB,1 ;Se apaga el LED verde FIN goto BUCLE ;Bucle para repetir el tratamiento completo ;RUTINA AUXILIAR DE DELAY DELAY10 bcf INTCON,2 ;Borra el flag de estado del TMRO movlw 0xD9 movwf TMR0_OPT ;Carga del TMRO para que cuente 39 DELAY10_1 btfss INTCON,2 ;Espera el desbordamiento del TMR0 goto DELAY10_1 decfsz TEMPO1,F goto DELAY10 return ;RUTINA DE DELAY DE UN SEGUNDO DELAY1S movlw 0x64 movwf TEMPO1 ;Carga la variable TEMPO1,que será ;decrementada call DELAY10 ;en la rutina a la que se llama return ;RUTINA DE DELAY DE DOS SEGUNDOS DELAY2S call DELAY1S call DELAY1S return ;RUTINA DE DELAY DE CINCO SEGUNDOS DELAY5S call DELAY2S call DELAY2S call DELAY1S return END
En los microcontroladores hay diferentes direcciones. Algunas de ellas vienen con funciones de de fábrica (por ejemplo el TRISB, PORTB, el registro ADCON1...) Son funciones que vienen programas para una tarea en concreto (como sería cambiar entre analógico o digital en el caso de ADCON1 o cambiar entre entradas y salidas mediante TRISB). En el microcontrolador del vídeo, que se trata del PIC16F877A a partir de la dirección 20 del primer banco de la memoria RAM de datos, hay unos registro que se llaman registros de propósito general. Es decir registros para uso a gusto del usuario. Son registros a los cuales tú les vas a indicar la función que quieres que cumplan (como un contador por ejemplo). Si buscas en internet memoria ram de datos pic16f877a, en imágenes tendrás todas las direcciones y la función que cumple cada una. Espero haberme explicado bien. Ya han pasado dos meses desde que preguntaste así que imagino que ya resolviste tu duda antes. Aún así ahí tienes la explicación.
----------------------------------------------------------------------------------------------------------------------------- HOLA: Esta parte de programa se trata de un semáforo programado, que según los interruptores I2 e I1 provocan una secuencia de encendido de los LEDS: Rojo, Ambar y Verde. con un retardo según la tabla 10, 8, 5, 2 segundos. I2 I1 VERDE AMBAR ROJO = LEDS TRAT 0 0 5 s 2 10 = TIEMPOS TRAT 0 1 5 s 2 10 = TIEMPOS TRAT 1 0 8 s 2 8 = TIEMPOS TRAT 1 1 10 s 2 5 = TIEMPOS
Tiene 4 rutinas de TraTamiento de acuerdo a la combinación; TRAT_0_0, TRAT_1_0, TRAT_0_1, TRAT_1_1. POR FAVOR ME PUEDEN AYUDAR EN LA PARTE DE LAS RUTINAS DE ; DELAY 10S, DELAY 8S, DELAY 5S, DELAY 2S, QUE CONTROLAN EL TIEMPO PARA CADA LED ROJO, AMBAR, VERDE ¿COMO CALCULA EL PROGRAMA EL TIEMPO PARA CADA LED? POR EJEMPO: EN EL TRAT 01 , EL LED VERDE TARDA 5 SEGUNDOS (SE QUE LAS INSTRUCCIONES DE SALTO TARDAN 2 MICROSEGUNDOS Y LAS NORMALES 1 MICROSEGUNDO CON UN XL=4MHZ) COMO SEVE EN EL PROGAMA HAY UNA RUTINA AUXILIAR LA CUAL HACE QUE SE DESBORDE EL TMR0 = 0XD9= 217 O SEA CUENTA39 Y ESTE A SUVEZ DECREMENTA UN REGISTRO AUXILIAR LLAMADO TEMPO1 Y ES CARGADO CON 100. GRACIAS.. EL PROGRAMA FUNCIONA PERFECTO CUANDO LO MONTE EN LA PLACA DE ENTRENAMIENTO PERO QUIERO SABER LOS PASOS QUE REALIZA EL PROGRAMA PARA TRATAR POR EJEMPLO EL DELAY DE 5 SEGUNDOS (call DELAY5S) ;RUTINA PARA LA COMBINACIÓN I2=0 I1=0 TRAT_0_0 bsf PUERTAB,1 ;Se enciende el LED de RB1 (verde) call DELAY5S ;Se espera los segundos adecuados según I1 e I2 bcf PUERTAB,1 ;Se apaga el LED verde bsf PUERTAB,3 ;Se enciende el LED de RB3 (ámbar) call DELAY2S ;Se apaga el LED ámbar; bcf PUERTAB,3 ;Se espera los segundos adecuados bsf PUERTAB,5 ;Se enciende el LED de RB5 (rojo) call DELAY5S ;Se espera los segundos adecuados bcf PUERTAB,5 ;Se apaga el LED rojo goto FIN ;RUTINA AUXILIAR DE DELAY --------------------------------------------------------- DELAY10 bcf INTCON,2 ;Borra el flag de estado del TMR0 movlw 0xD9 movwf TMR0_OPT ;Carga del TMRO para que cuente 39 DELAY10_1 btfss INTCON,2 ;Espera el desbordamiento del TMR0 goto DELAY10_1 decfsz TEMPO1,F goto DELAY10 return ------------------------------------------------------------ ;RUTINA DE DELAY DE UN SEGUNDO DELAY1S movlw 0x64 movwf TEMPO1 ;Carga la variable TEMPO1, que será ;decrementada call DELAY10 ;en la rutina a la que se llama return ;RUTINA DE DELAY DE DOS SEGUNDOS DELAY2S call DELAY1S call DELAY1S return ;RUTINA DE DELAY DE CINCO SEGUNDOS DELAY5S call DELAY2S call DELAY2S call DELAY1S return ;RUTINA DE DELAY DE OCHO SEGUNDOS DELAY8S call DELAY5S call DELAY2S call DELAY1S return ;RUTINA DE DELAY DE DIEZ SEGUNDOS DELAY10S call DELAY5S call DELAY5S return END No pude subir el programa completo youtube me lanza este error Returned error
Muy bien explicado, toma tu merecido like
Dios bendiga a este hombre
Al fin comprendo
Muchismas gracias!
Nuevo sub.
Excelente video
Buen video, me ayudo mucho y muy bien explicado, gracias.
Que buen vídeo, muchas gracias por ser preciso y didacta
Wow, ¡excelente video!
Saludos y muchas gracias por tu comentario
este procedimiento (el de rutina de decremento) es el único para hacer retardos en assembler?
te amo
HOLA: Este programa trata de temporizar, 5 segundos un led cuando el interruptor I1 está en 1 y cuando esta en 0 salta a BUCLE.
I1 LED
0 BUCLE
1 5 SEGUNDOS
POR FAVOR ME PUEDEN AYUDAR EN LA PARTE DE LAS RUTINAS DE : DELAY 5S, ¿COMO CALCULA EL PROGRAMA EL TIEMPO PARA ENCENDER EL LED POR 5S Y APAGARLO POR 2S LED?
POR EJEMPLO: EN EL TRAT _1 , se llama a la rutina DELAY5S, 5 SEGUNDOS (SE QUE LAS INSTRUCCIONES DE SALTO TARDAN 2 MICROSEGUNDOS Y LAS NORMALES 1 MICROSEGUNDO CON UN XL=4MHZ)
COMO SEVE EN EL PROGRAMA HAY UNA RUTINA AUXILIAR LA CUAL HACE QUE SE DESBORDE EL TMR0 = 0XD9= 217 O SEA CUENTA 39
Y ESTE A SU VEZ DECREMENTA UN REGISTRO AUXILIAR LLAMADO TEMPO1 Y ES CARGADO CON 100.
GRACIAS..
EL PROGRAMA FUNCIONA PERFECTO CUANDO LO MONTE EN LA PLACA DE ENTRENAMIENTO
PERO QUIERO SABER LOS PASOS QUE REALIZA EL PROGRAMA PARA TRATAR POR EJEMPLO EL DELAY DE SEGUNDOS (COMO HACE PARA CALCULAR DICHO TIEMPO DE 5SEGUNDOS)
GRACIAS.
LIST P=16F84A
RADIX HEX
INCLUDE "P16F84A.INC"
W EQU 0X00 ;Registro de destino W:d=0
F EQU 0X01 ;Registro de destino F:d=1
Z EQU 0X02 ;Bit2 del registro ESTADO
TMR0_OPT EQU 0X01 ;El registro tmr0 ocupa la dirccion 1
;de banco 1
ESTADO EQU 0X03 ;El registro ESTADO ocupa la direccion
;3 de los dos bancos
INTCON EQU 0X0B ;El registro INTCON ocupa la direccion
;0x0B de los dos bancos
PUERTAA EQU 0X05 ;La PUERTAA ocupa la dirrecion 5 del
;banco 0 y su reguistro de configuracion
;la direcicion 5 del banco 1
PUERTAB EQU 0x06 ;La PUERTAB ocupa la dirección 6 del
;banco 0 y su registro de configuración
;la dirección 6 del banco 1
AUX EQU 0x0c ;Registro auxiliar en el que se carga el
;estado del interruptor
TEMPO1 EQU 0x0E ;Registro auxiliar para las rutinas de
;DELAY
ORG 0 ;El programa comienza en la dirección 0 y
goto INICIO ;salta a la dirección 5 para sobrepasar el
ORG 5 ;vector de interrupción
INICIO bsf ESTADO,5 ;Selección del banco 1
movlw b'00000001' ;Se configuran RAO como
movwf PUERTAA ;entradas
clrf PUERTAB ;Se configura la PUERTAB como salida
movlw b'00000111'
movwf TMR0_OPT ;Se asigna el preescaler al TMR0
bcf ESTADO,5 ;Selección del banco 0
clrf PUERTAA ;Se inicializan las puertas a
clrf PUERTAB ;ceros
BUCLE call DELAY2S ;Se deja tiempo para que el usuario cambie el
;el estado 1/0
movf PUERTAA,W ;Se pasa el contenido de la PUERTAA a un registro
movwf AUX ;auxiliar. Dicho registro habrá que pasarlo a W antes
;de cada operación XORLW, ya que la anterior habrá
;cambiado su valor
xorlw b'000000001' ;Se hacen sucesivas máscaras para saber qué
;combinación se ha introducido
;Explora el bit2 de ETADO
btfsc ESTADO,Z ;Z1:Hasido 0? Z0:No ha sido 0?
goto TRAT_1 ;salta a trat_1 si reultado es w=0
goto BUCLE
;RUTINA PARA LA COMBINACIÓN I1=1
TRAT_1 bsf PUERTAB,1 ;Se enciende el LED de RB1 (verde)
call DELAY5S ;Se espera los segundos adecuados según I1
bcf PUERTAB,1 ;Se apaga el LED verde
FIN goto BUCLE ;Bucle para repetir el tratamiento completo
;RUTINA AUXILIAR DE DELAY
DELAY10 bcf INTCON,2 ;Borra el flag de estado del TMRO
movlw 0xD9
movwf TMR0_OPT ;Carga del TMRO para que cuente 39
DELAY10_1 btfss INTCON,2 ;Espera el desbordamiento del TMR0
goto DELAY10_1
decfsz TEMPO1,F
goto DELAY10
return
;RUTINA DE DELAY DE UN SEGUNDO
DELAY1S movlw 0x64
movwf TEMPO1 ;Carga la variable TEMPO1,que será
;decrementada
call DELAY10 ;en la rutina a la que se llama
return
;RUTINA DE DELAY DE DOS SEGUNDOS
DELAY2S call DELAY1S
call DELAY1S
return
;RUTINA DE DELAY DE CINCO SEGUNDOS
DELAY5S call DELAY2S
call DELAY2S
call DELAY1S
return
END
DISCULPE SABE CUAL ES TIEMPO QUE TARDA UN MICROCONTROLADOR EN REDUCIR LA VARIABLE A 255 A 0
Disculpa, a que te refieres que a partir de la dirección 20 tienes direcciones libres?
En los microcontroladores hay diferentes direcciones. Algunas de ellas vienen con funciones de de fábrica (por ejemplo el TRISB, PORTB, el registro ADCON1...) Son funciones que vienen programas para una tarea en concreto (como sería cambiar entre analógico o digital en el caso de ADCON1 o cambiar entre entradas y salidas mediante TRISB). En el microcontrolador del vídeo, que se trata del PIC16F877A a partir de la dirección 20 del primer banco de la memoria RAM de datos, hay unos registro que se llaman registros de propósito general. Es decir registros para uso a gusto del usuario. Son registros a los cuales tú les vas a indicar la función que quieres que cumplan (como un contador por ejemplo). Si buscas en internet memoria ram de datos pic16f877a, en imágenes tendrás todas las direcciones y la función que cumple cada una. Espero haberme explicado bien. Ya han pasado dos meses desde que preguntaste así que imagino que ya resolviste tu duda antes. Aún así ahí tienes la explicación.
Y que tal si deseo un retardo de 1us?
-----------------------------------------------------------------------------------------------------------------------------
HOLA: Esta parte de programa se trata de un semáforo programado, que según los interruptores I2 e I1 provocan una secuencia de encendido de los LEDS: Rojo, Ambar y Verde. con un retardo según la tabla 10, 8, 5, 2 segundos.
I2 I1 VERDE AMBAR ROJO = LEDS
TRAT 0 0 5 s 2 10 = TIEMPOS
TRAT 0 1 5 s 2 10 = TIEMPOS
TRAT 1 0 8 s 2 8 = TIEMPOS
TRAT 1 1 10 s 2 5 = TIEMPOS
Tiene 4 rutinas de TraTamiento de acuerdo a la combinación; TRAT_0_0, TRAT_1_0, TRAT_0_1, TRAT_1_1.
POR FAVOR ME PUEDEN AYUDAR EN LA PARTE DE LAS RUTINAS DE ; DELAY 10S, DELAY 8S, DELAY 5S, DELAY 2S, QUE CONTROLAN EL TIEMPO PARA CADA LED ROJO, AMBAR, VERDE ¿COMO CALCULA EL PROGRAMA EL TIEMPO PARA CADA LED?
POR EJEMPO: EN EL TRAT 01 , EL LED VERDE TARDA 5 SEGUNDOS (SE QUE LAS INSTRUCCIONES DE SALTO TARDAN 2 MICROSEGUNDOS Y LAS NORMALES 1 MICROSEGUNDO CON UN XL=4MHZ)
COMO SEVE EN EL PROGAMA HAY UNA RUTINA AUXILIAR LA CUAL HACE QUE SE DESBORDE EL TMR0 = 0XD9= 217 O SEA CUENTA39
Y ESTE A SUVEZ DECREMENTA UN REGISTRO AUXILIAR LLAMADO TEMPO1 Y ES CARGADO CON 100.
GRACIAS..
EL PROGRAMA FUNCIONA PERFECTO CUANDO LO MONTE EN LA PLACA DE ENTRENAMIENTO
PERO QUIERO SABER LOS PASOS QUE REALIZA EL PROGRAMA PARA TRATAR POR EJEMPLO EL DELAY DE 5 SEGUNDOS (call DELAY5S)
;RUTINA PARA LA COMBINACIÓN I2=0 I1=0
TRAT_0_0 bsf PUERTAB,1 ;Se enciende el LED de RB1 (verde)
call DELAY5S ;Se espera los segundos adecuados según I1 e I2
bcf PUERTAB,1 ;Se apaga el LED verde
bsf PUERTAB,3 ;Se enciende el LED de RB3 (ámbar)
call DELAY2S ;Se apaga el LED ámbar;
bcf PUERTAB,3 ;Se espera los segundos adecuados
bsf PUERTAB,5 ;Se enciende el LED de RB5 (rojo)
call DELAY5S ;Se espera los segundos adecuados
bcf PUERTAB,5 ;Se apaga el LED rojo
goto FIN
;RUTINA AUXILIAR DE DELAY
---------------------------------------------------------
DELAY10 bcf INTCON,2 ;Borra el flag de estado del TMR0
movlw 0xD9
movwf TMR0_OPT ;Carga del TMRO para que cuente 39
DELAY10_1 btfss INTCON,2 ;Espera el desbordamiento del TMR0
goto DELAY10_1
decfsz TEMPO1,F
goto DELAY10
return
------------------------------------------------------------
;RUTINA DE DELAY DE UN SEGUNDO
DELAY1S movlw 0x64
movwf TEMPO1 ;Carga la variable TEMPO1, que será
;decrementada
call DELAY10 ;en la rutina a la que se llama
return
;RUTINA DE DELAY DE DOS SEGUNDOS
DELAY2S call DELAY1S
call DELAY1S
return
;RUTINA DE DELAY DE CINCO SEGUNDOS
DELAY5S call DELAY2S
call DELAY2S
call DELAY1S
return
;RUTINA DE DELAY DE OCHO SEGUNDOS
DELAY8S call DELAY5S
call DELAY2S
call DELAY1S
return
;RUTINA DE DELAY DE DIEZ SEGUNDOS
DELAY10S call DELAY5S
call DELAY5S
return
END
No pude subir el programa completo youtube me lanza este error
Returned error