Autor Tema: numeros negativos en el 16f84  (Leído 3650 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado nviciao

  • PIC10
  • *
  • Mensajes: 3
numeros negativos en el 16f84
« en: 13 de Abril de 2006, 14:38:13 »
Hola, bueno primero decir que soy nuevo en los pic y estoy haciendo mi primer programa y me hace falta saber como  me avisa el pic de que el resulado de una operacion es negativo.

Gracias!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: numeros negativos en el 16f84
« Respuesta #1 en: 13 de Abril de 2006, 16:09:04 »
Hola, bueno primero decir que soy nuevo en los pic y estoy haciendo mi primer programa y me hace falta saber como  me avisa el pic de que el resulado de una operacion es negativo.

Gracias!!

En el pic 16F84 no existe un flag de Negativo, como existe en otros microprocesadores pero de acuerdo a la operacion que realizas lo puedes inferir con el carry.

Que tipo de operacion estas haciendo?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado nviciao

  • PIC10
  • *
  • Mensajes: 3
Re: numeros negativos en el 16f84
« Respuesta #2 en: 14 de Abril de 2006, 11:01:48 »
es una resta.

La cosa esta en que si me sale negativo  llama a una subrutina y si sale positivo llama a otra.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: numeros negativos en el 16f84
« Respuesta #3 en: 14 de Abril de 2006, 12:04:54 »
Aqui te subo un código de ejemplo de restas entre REG1 y WREG.

Fijate como te quedan los resultados en el C y en el Z (no hagas caso al DC).

Aqui te pongo la tabla resultante si los datos en REG1 y WREG fueran los siguientes.

REG1 = registro definido en el software
w      = Wreg
C, Z, DC: bits del STATUS


RESTA

;    REG1       w       C       Z      DC
; ----------------------------------------
;      4        2       1       0       1
;      4        4       1       1       1
;      4        6       0       0       0
;


Como observas si el C=0, luego el W era mayor que el REG1.
Si el C=1 REG1 es >= wreg y lo debes verificar leyendo el bit Z.

El código es válido para toda la familia 16F y 16C, al igual que para los 12F y 12C, solo hay que tener cuidado con la ubicacion de REG1.

Código: ASM
  1. ;Rutinas matemáticas
  2.  
  3.         list    P=PIC16F84
  4.         #include p16f84.inc
  5.  
  6.  
  7. ;------------------------------------------------------------
  8. ;       RESTA
  9. ;------------------------------------------------------------
  10. ;
  11. ;       REG1    w       C       Z       DC
  12. ;     ----------------------------------------
  13. ;        4      2       1       0       1
  14. ;        4      4       1       1       1
  15. ;        4      6       0       0       0
  16. ;
  17.  
  18.  
  19.         org     0x00
  20.  
  21. REG1    equ     0x20
  22.  
  23.  
  24. INICIO:
  25.  
  26. ;--------------------------------
  27. ;       Resta
  28. ;       REG1 = 4
  29. ;       W    = 2
  30. ;--------------------------------
  31.  
  32. _REG_may:
  33.         bcf     STATUS,C
  34.         bcf     STATUS,Z
  35.  
  36.         movlw   .4
  37.         movwf   REG1
  38.  
  39.         movlw   .2
  40.  
  41.         subwf   REG1,w          ;REG1 > w
  42.                                 ; C = 1
  43.                                 ; Z = 0
  44.  
  45.         nop
  46.         nop
  47.  
  48. ;--------------------------------
  49. ;       Resta
  50. ;       REG1 = 4
  51. ;       W    = 4
  52. ;--------------------------------
  53.  
  54. _REG_igu:
  55.         bcf     STATUS,C
  56.         bcf     STATUS,Z
  57.  
  58.         movlw   .4
  59.         movwf   REG1
  60.  
  61.         movlw   .4
  62.  
  63.         subwf   REG1,w          ;REG1 = w
  64.                                 ; C = 1
  65.                                 ; Z = 1
  66.         nop
  67.         nop
  68.  
  69.  
  70. ;--------------------------------
  71. ;       Resta
  72. ;       REG1 = 4
  73. ;       W    = 6
  74. ;--------------------------------
  75.  
  76. _REG_men:
  77.         bcf     STATUS,C
  78.         bcf     STATUS,Z
  79.  
  80.         movlw   .4
  81.         movwf   REG1
  82.  
  83.         movlw   .6
  84.  
  85.         subwf   REG1,w          ;REG1 < w
  86.                                 ; C = 0
  87.                                 ; Z = 0
  88.  
  89.         nop
  90.         nop
  91.  
  92.  
  93.         goto    $-1
  94.  
  95.  
  96.  
  97.         end

Si quieres restar el valor entre 2 registros, puedes cambiar el movlw .4 por un movf   REG2,w

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado nviciao

  • PIC10
  • *
  • Mensajes: 3
Re: numeros negativos en el 16f84
« Respuesta #4 en: 14 de Abril de 2006, 12:15:41 »
Muchas gracias.

ya creo que podre seguir el programa.

Saludos!!

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: numeros negativos en el 16f84
« Respuesta #5 en: 18 de Abril de 2006, 14:51:09 »
los estados de las operaciones aritmeticas u comparaciones digitales son los prosesos mas concirrentes en micro pic16f y verifican sin la operacion fue negativa positiva o cero.
si quieres visualizar ese resultado negativo tienes que complementar comf result,1 Y TE RESULTARÁ EL VALOR EFECTIVOY TIENES QUE SUMARLE UNO EJEMPLO¨: . 3-5 = -2   EL SIGNO MENOS LO VISUALIZAS POR EL SEGMENTO g DEL DISPLAY U LCD.
FEME    MOVF    VALOR2,0
       SUBWF   VALOR1,0
       MOVWF   RESULT
       BTFSS   STATUS,0
       GOTO    BLADY
       MOVLW   RESULT
       CALL    VISUALIZACION
       GOTO    CAPTURA...................................................................
BLADY   COMF    RESULT,1
       INCF    RESULT,1
       MOVLW   .10
       MOVWF   DECENAS
       CALL    VISUALIZACION
       GOTO    CAPTURA....................................................................



 

anything