Autor Tema: guardar codigo  (Leído 2171 veces)

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

Desconectado joseydoris

  • PIC12
  • **
  • Mensajes: 58
guardar codigo
« en: 21 de Julio de 2015, 22:58:50 »
quisiera poder comparar los codigos  introducidos por ej. 8 personas ¿como podria comparar cual corresponde a cada uno?Es para hacer un control de acceso para varias personas cada uno con su clave y saber cuantas veces entran y salen

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: guardar codigo
« Respuesta #1 en: 21 de Julio de 2015, 23:37:20 »
Y si es un codigo, obviamente tenes que compararlo uno por uno. Vas a tener una funcion que lee el codigo completo. Supongamos 4 digitos 1234. Esos 4 digitos los vas a guardar como quieras:
como BCD 0x01 0x02 0x03 0x04
como BCD packed 0x12 0x34
O como binario 0x04 0xD2    (1234 en decimal)

Eso lo hace la funcion que obtiene los datos.

Y luego lo vas a comparar 1 por 1 con los codigos que tengas guardado.
Como comparas ? haciendo una resta. Y observando el flag Z, para que sea mas simple doy un ejemplo pero como si fuera solo 2 digitos en BCD packed

Supone que tenes estos 2 registros con los codigos
 Codigo_ingresado

Mas registros con los codigos de los demas usuarios ( todos seguidos )
 Codigo_usuario_1
 Codigo_usuario_2
 Codigo_usuario_3
 Codigo_usuario_4


Código: ASM
  1. Comprobacion
  2.  CLRF   usuario                   ;Registro que mantiene a el numero de usuario
  3.  incf    usuario,f
  4.  movlw Codigo_usuario_1
  5.  movwf fsr                       ;Para 8 usuarios si las contraseñas las tenes en registros ( para que se puedan cambiar) cargo el puntero al primer registro
  6. loop
  7.  movf   indf,w                   ; Aqui tomo lo que apunta esa direccion
  8.  subwf Codigo_ingresado   ;  Comparo Codigo_usuario_1 con Codigo_ingresado
  9.  btfsc  status,z                ; Son iguales? , si son iguales Z = 1,
  10.  return                           ; Si son iguales vuelvo, el numero de usuario va a estar en "usuario"
  11.  incf   fsr,f
  12.  incf   usuario,f                ;incremento el usuario y el lugar donde estaba guardado
  13.  movlw 0x05
  14.  subwf usuario,w              ; Resto para ver si llego a todos los usuarios, es decir los 4
  15.  btfss   status,z
  16.  goto    loop                   ; No llego a hacer todos los usuarios, entonces sigo por el proximo
  17.  clrf   usuario                 ; De pasar por todos los codigos guardados y no cincidir con ningun, usuario va a ser igual a 0, de esa forma saber que no coincidio
  18.  return

Entonces como llamar esa funcion?

Código: ASM
  1. ProgramaPrincipal
  2.     CALL ObtenerClave
  3.     CALL Comprobacion
  4.     MOVF usuario
  5.     BTFSS STATUS,Z               ; En caso que usuario sea distitno de 0 quiere decir que el codigo es valido
  6.     CALL  AccesoPermitido        
  7.     GOTO ProgramaPrincipal

Esto es un ejemplo de pero de 8 bits, tendras que extenderlo a 16 y acomodarlo a tu programa, pero el concepto va a ser similar.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: guardar codigo
« Respuesta #2 en: 23 de Agosto de 2015, 12:37:35 »
¿No es posible hacerlo con el modulo comparador que incorpora el pic y así te ahorras instrucciones?
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: guardar codigo
« Respuesta #3 en: 23 de Agosto de 2015, 18:56:24 »
¿No es posible hacerlo con el modulo comparador que incorpora el pic y así te ahorras instrucciones?

Si es para solo detectar la cantidad de personas que entran/salen si. Ni siquiera hace falta un microcontrolador creo.
Pero si necesita comparar una "contraseña" o codigo de cada persona no le queda otra que meter codigo (Aunque esto va a servir para cuando entren nomas e identificarlos) pero cuando salen no va a poder identificar cual es cual, Igual puede usar el comparador para hacer un soporte de la gente que entra y sale. Tambien hay que retringir el espacio para que 1 sola persona pueda pasar por ahi, y evitar que 2 personas pasen y se cuente como 1.


 

anything