Autor Tema: problemas con contador  (Leído 2000 veces)

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

Desconectado enero0022

  • PIC10
  • *
  • Mensajes: 36
problemas con contador
« en: 10 de Julio de 2007, 21:49:31 »
hola a todos quisiera saber si me pueden ayudar con un contador que despliego en un lcd 2x16 solo que al iniciar el conteo
inicia bien en cero pero al presionar el pulsador para que cuente inmediatamente se visualiza el numero 254 o el 255, si continuo presionando baja al 243 y el siguiente pulso 000 y asi se repite quiero saber en donde me equivoque el programa es el siguiente, les comento que el proyecto es el contador de las piezas que produce una maquina este programa es esclusivo del contador.
programa principal
;------------------------------------------------------------------------------------------
   org      h'00'
   goto   inicio
   retfie
   org      h'05'
inicio
   movlw   h'1b'
   bsf      status,5
   bcf      status,6
   movwf   trisa
   movlw   h'04'
   movwf   adcon1
   movlw   h'00'
   movwf   trisb
   movlw   h'30'
   movwf   trisc
   bcf      status,5
   bcf      status,6
   clrf   porta
   clrf   portb
   clrf   cont
   clrf   palabra
   clrf   centena
   clrf   decena
   clrf   unidad
   bcf      portc,0
   bcf      portc,2
inicia_lcd
   call   lcd_ini      ;llama a rutina de iniciar lcd
   movlw   b'00000001'   ;borra lcd y envia a home
   call   lcd_reg    ;llama a rutina para recibir comandos
   call   delay
   movlw   b'00000110'
   call   lcd_reg
   call   delay
   movlw   b'00001100'   ;lcd on, cursor off, parpadeo off
   call   lcd_reg
   call   delay
   movlw   b'10000000'
   call   lcd_reg
   call   delay
repetir
   movf   palabra,w
   call   dato_1
   iorlw   0
   btfsc   status,2
   goto   acabar
   call   lcd_datos
   incf   palabra
   goto   repetir
acabar
   nop
   goto   decodi

dato_1
   addwf   pcl,1
   retlw   'P'
   retlw   'I'
   retlw   'E'
   retlw   'Z'
   retlw   'A'
   retlw   'S'
   retlw   h'00'
;lcd_ini esta rutina inicializa y configura lcd, caracteres de 5x7
;bus de 8 bits y 2 lineas de visualizacion
lcd_ini
   movlw   h'38'
   call   lcd_reg
   movlw   h'38'
   call   lcd_reg
   movlw   h'38'
   call   lcd_reg
   return
;lcd_reg rutina para enviar comandos
lcd_reg
   bcf      portc,0
   movwf   portb
   call   lcd_busy
   call   lcd_e
   return
;lcd_busy rutina para verificar que el lcd no este ocupado
lcd_busy
   bsf      portc,1      ;pone al lcd en modo leer
   movlw   h'ff'
   bsf      status,5   ;en estos tres siguientes renglones
   movwf   trisb      ;cambio el puertob de salidas a
   bcf      status,5   ;entradas
   bsf      portc,2      ;activa lcd
busy
   btfsc   portb,7
   goto   busy
   bcf      portc,2      ;desactiva lcd
   movlw   b'00000000'
   bsf      status,5
   movwf   trisb      ;nuevamente cambio a salidas el puertob
   bcf      status,5
   bcf      portc,1      ;pone el lcd en modo escribir
   return
;lcd_e rutina para habilitar lcd y recibir comandos y datos
lcd_e
   bsf      portc,2      ;activa lcd
   call   delay
   bcf      portc,2      ;desactiva lcd
   return
;delay rutina de tiempo de 10 microsegundos
delay
   movlw   h'01'
   movwf   reg1
dec1
   movlw   h'ff'
   movwf   reg2
dec   decfsz   reg2
   goto   dec
   decfsz   reg1
   goto   dec1
   return
;lcd_datos rutina que envia los datos a lcd
lcd_datos
   bsf      portc,0      ;activa modo datos
   movwf   portb
   call   lcd_e
   call   delay
   return
;-----------------------------------------------------------------------------
;sumar, aqui se realiza el incremento para posteriormente
;desplegarlo en el display
;------------------------------------------------------------------------------
sumar
   btfsc   portc,5
   goto   sumar
   goto   antireb
inc
   bsf      portc,7
   incf   cont
      
decodi
   movlw   .100
   subwf   cont,f
   btfsc   status,0   
   goto   cent
   movlw   .100
   addwf   cont,f
yyy
   movlw   .10
   subwf   cont,f
   btfsc   status,0
   goto   dece
   addwf   cont,w
   movwf   unidad
   goto   visualizar
cent
   incf   centena
   goto   decodi
dece
   incf   decena
   goto   yyy

;visualizar es la rutina para ver el resultado de el
;conteo
visualizar
   movlw   b'10001100'
   call   lcd_reg
   movf   centena,w
   call   tabla
   call   lcd_datos
   movlw   b'10001101'
   call   lcd_reg
   movf   decena,w
   call   tabla
   call   lcd_datos
   movlw   b'10001110'
   call   lcd_reg
   movf   unidad,w
   call   tabla
   call   lcd_datos
   clrf   centena
   clrf   decena
   clrf   unidad
   goto   sumar
tabla
   addwf   pcl,1
   retlw   h'30'      ;0
   retlw   h'31'      ;1
   retlw   h'32'      ;2
   retlw   h'33'      ;3
   retlw   h'34'      ;4
   retlw   h'35'      ;5
   retlw   h'36'      ;6
   retlw   h'37'      ;7
   retlw   h'38'      ;8               
   retlw   h'39'      ;9
antireb
   btfss   portc,5
   goto   antireb
   goto   inc
   end
         

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: problemas con contador
« Respuesta #1 en: 11 de Julio de 2007, 00:56:23 »
dime podrias decirme en que parte de todo el programa se generan esos numeros asciis?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: problemas con contador
« Respuesta #2 en: 11 de Julio de 2007, 04:49:54 »
Tienes puesto algun sistema de eliminacion de rebotes al actuar sobre el pulsador?

Fermin
Todos los días se aprende algo nuevo.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: problemas con contador
« Respuesta #3 en: 11 de Julio de 2007, 15:07:07 »
uff veremos a ver amigo..

saludos


 

anything