Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

16/08/2011 #1


Duda con código PIC16F84A
Hola buenas! Tenia una duda acerca de un código que encontre por internet es el siguiente:

(esta en assembler)

Código:
;*****Establecimiento constantes ****

STATUS      equ       03h              ; Dirección del registro STATUS
TRISA       equ       85h                ; Dirección del registro triestado para el Puerto A.
PORTA       equ       05h               ; Dirección del Puerto A.
CONTADOR1   equ       08h            ; Primer contador para nuestros bucles de retardo.
CONTADOR2   equ       09h            ; Segundo contador para nuestros bucles de retardo.

;;****Configuración del Puerto****             

bsf       STATUS,5         ; Cambiamos al banco 1Switch to Bank 1            
movlw     00h                ; Ponemos los pines del puerto A ...            
movwf     TRISA            ; ...como salidas.            
bcf       STATUS,5         ; Volvemos al Banco 0.;;

****Encendido del LED **** 

Inicio      movlw     02h              ; Encendemos el LED poniendo primero el valor...            
movwf     PORTA                       ; ... en el registro w y después al puerto;                    

;****Inicio del buble de retardo 1**** 

Bucle1      decfsz    CONTADOR1,1      ; Restamos 1 a 255.            
goto      Bucle1                 ; Si CONTADOR es cero, continuamos.            
decfsz    CONTADOR2,1      ; Restamos 1 a 255            
goto      Bucle1            ; Volvemos al inicio de nuestro bucle                                       
                                ; Este retardo cuenta hacia atrás ...                                       
                                ; ...desde 255 a 0, 255 veces.

;;****Retardo terminado, ahora apagamos el LED ****             

movlw     00h                ; Apaga el LED poniendo primero el valor ...            
movwf     PORTA            ; ... en el registro w y después al puerto

;;****Añadimos otro retardo**** 

Bucle2      decfsz    CONTADOR1,1      ; Este segundo bucle mantiene el LED...            
goto      Bucle2                 ; ...apagado el tiempo suficiente...            
decfsz    CONTADOR2,1      ; ...para que lo veamos            
goto      Bucle2            

;;****Ahora volvemos al inicio del programa            

goto      Inicio           ; Vuelve al principio y enciende el LED...
                              ; ...de nuevo.

;****Termina el Programa****             

end                        ; Algunos compiladores necesitan esta instrucción.
                             ; y también por si acaso olvidamos poner...
                             ; ... la instrucción 'goto'.
Bien pues mis dudas son:
¿Porque se asigna la variable CONTADOR1 y CONTADOR2 a las direcciones 08h y 09h?, ¿Estos no son datos de la EEPROM?, ¿No seria mejor asignar CONTADOR1 y CONTADOR2 a registros de proposito general como 0Ch y 0Dh?

Y por ultimo...

Código:
 ;****Inicio del buble de retardo 1**** 

Bucle1      decfsz    CONTADOR1,1      ; Restamos 1 a 255.            
goto      Bucle1                 ; Si CONTADOR es cero, continuamos.            
decfsz    CONTADOR2,1      ; Restamos 1 a 255            
goto      Bucle1            ; Volvemos al inicio de nuestro bucle                                       
                                ; Este retardo cuenta hacia atrás ...                                       
                                ; ...desde 255 a 0, 255 veces.
La instrucción decfsz CONTADOR1,1 resta los datos de la EEPROM hasta llegar a 0 y la instrucción decfsz CONTADOR2,1 resta la dirección de la EEPROM hasta llegar a 0 ¿me equivoco?

Jajaja, después de haber escrito la biblia os doy las grácias de antemano .
16/08/2011 #2
Moderador

Avatar de Chico3001

Tienes razon... Contador1 y Contador2 estan mal asignados.. tienen que ser apartir de la direccion 0Ch, con eso el programa ya tiene sentido...
16/08/2011 #3

Avatar de fdesergio

Lo primero estas en lo cierto si bien se hace por orden son REGs comunes que al no usar la eeprom een el programa pues no se afectan para nada y podrian servir como REGs de uso comun, se debe hacer por orden con los destinados o llamados proposito general, lo otro las INST de que hablas son condicionadas y lo que hacen es restar o decrementar en 1 un reg cualquiera no la EEPROM, y si el reg queda en cero salta una linea de las instrucciones, en ningun momento resta valores diferentes de 1, y menos de la eeprom pues para accesar solo se puede leer o escribir y es mediante un proceso mas complicado que con un reg comun, chauuuuuuuu
16/08/2011 #4
Moderador

Avatar de Chico3001

fdesergio dijo: Ver Mensaje
Lo primero estas en lo cierto si bien se hace por orden son REGs comunes que al no usar la eeprom een el programa pues no se afectan para nada y podrian servir como REGs de uso comun, se debe hacer por orden con los destinados o llamados proposito general, lo otro las INST de que hablas son condicionadas y lo que hacen es restar o decrementar en 1 un reg cualquiera no la EEPROM, y si el reg queda en cero salta una linea de las instrucciones, en ningun momento resta valores diferentes de 1, y menos de la eeprom pues para accesar solo se puede leer o escribir y es mediante un proceso mas complicado que con un reg comun, chauuuuuuuu
CUIDADO!!! aunque lo que dice fdsergio es completamente cierto, NO ES NADA RECOMENDABLE usar un registro de proposito especifico como un registro de proposito general... eso llevaria muy facilmente a errores en el programa...
16/08/2011 #5


Gracias a todos por responder!! . Pero se me escapa una cosa :S, a que te refieres cuando dices:
fdesergio dijo: Ver Mensaje
si bien se hace por orden son REGs comunes que al no usar la eeprom en el programa pues no se afectan para nada y podrian servir como REGs de uso comun, se debe hacer por orden con los destinados o llamados proposito general.
No entetiendo lo del orden, te refieres a la asignacion del principio que ha de estar en orden? es decir:

Código:
Contador1     equ      08h
Contador2     equ      09h
puede ser?
16/08/2011 #6

Avatar de fdesergio

A que de esta manera ordenada no tendras problemas, digamos que haces un programa y te va bien , luego deseas usar la eeprom y como esta ordenado tu soft pues tiene libres los regs de la eeprom, si no lo hubieras hecho te pasarian 2 cosas, tu programa se volveria loco (pues estas usando para 2 cosas los regs de la eeprom) o te tocaria declarar nuevamente los regs de los contadores, cuando digo por orden entendelo "para mantener ordenado el programa", chauuuuuuu
19/08/2011 #7


ok, Ahora lo entiendo!! . Claro seria muy engorroso. En este caso el orden de los factores altera el producto XD. Gracias por explicarlo .
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.