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

Temas similares

23/07/2011 #1

Avatar de DanNeil

contador binario hasta F con pic 16f84a
Hola, ¿cómo están?

Estoy comenzando a trabajar en assembler con el conocidísimo pic 16f84a quiero que al oprimir un pulsador que manda un 1 a RA0, este cuente por PORTB en binario DE 0 A (F) 16 / (15)10 y vuelva a 0 después de 15. Y bueno, adivinen, no me funciona, jajjaj.

Por favor, alguno podría decirme que está mal?:

este es el código:

list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


;***** VARIABLE DEFINITIONS
BIN EQU 0x0C ;variable used for context saving

;************** ASSEMBLER **********************************

ORG 0x00 ; processor reset vector

[RIGHT] INICIO
BSF STATUS,RP0 ;BANCO 1
CLRF TRISB ;PORTB ES SALIDA
BSF TRISA,0 ;RA0 ES ENTRADA
BCF STATUS,RP0 ;IR A BANCO 0



ESPERA
BTFSS PORTA,0 ;SI RA0=1
GOTO ESPERA ;
INCF BIN,1 ;INCREMENTA EN 1 A BIN EN 0X0C
MOVLW 0X1F ;COMPRUEBA QUE BIN NO SEA 11111
SUBWF BIN,0 ;RESTANDO
BTFSC STATUS,Z ;
CLRF BIN ;SI DA =0 , BIN= 11111, BORRA. BIN = 00000000
GOTO SALIDA



SALIDA
MOVLW BIN ;SACA EL DATO EN BIN
MOVWF PORTB ;A PORTB
GOTO ESPERA ;VUELVE A PROBAR EL ESTADO EN RA0

END ; directive 'end of program'
lo único que he visto raro es en los mensajes del ensamblado que me dice que el el registro del operando no está en banco 0 enlas dos líneas con asterisco, que me parece extraño.Perdón por la alineación de columnas, me lo dejó así y no puede mejorarlo.

Gracias por su ayuda.
23/07/2011 #2
Moderador

Avatar de Dano

MOVLW BIN ;SACA EL DATO EN BIN


Arregla ahí, Bin es un registro no un literal.
24/07/2011 #3

Avatar de DanNeil

Pues, si, ya hace algo con esto:

ORG 0X00
INICIO
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISB
BSF TRISA
BCF STATUS,RP0

ESPERA
BTFSS PORTA,0
GOTO ESPERA
INCF BIN,1
MOVLW 0X1F
SUBWF BIN,0
BTFSC STATUS,Z
CLRF BIN
GOTO SALIDA

SALIDA
MOVF BIN,0
MOVWF PORTB
GOTO ESPERA

END

Bien, ya veo la cuenta pero hay errores que creo que son los rebotes, voy a arreglarle un retardo ya que no me corrió bien el primero que le hice, ah, y que me cambia bits del nibble superior cuando no debería cambiar más que los del inferior.

Je,je qué mal, no? yo pongo en la resta que permite hacer conteo hasta b'1111' 0x1F e lugar de 0x10 (que si es 16):Bueno eso resuelve el problema del nibble. ahora será acabar el antibounce.
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.