Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

SECUENCIADOR DE 5 SEÑALES

3 participantes

Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty SECUENCIADOR DE 5 SEÑALES

Mensaje por urquia22 Jue 5 Mayo 2011 - 2:52

Hola a todos.....

necesito que me ayuden con un programa que consta de cuatro swiches en el puerto a de un pic 16f84a y por un único pin de puerto b (RB0), genera una señal cuadrada o una serie de destellos, según la combinación de los swiches.

..[size=12].................................... Sad aquí les dejo Smile .................................

; Secuenciador de 5 señales

;*******************************************************************************

;;Configuración para el programador


;*******************************************************************************


__CONFIG _CONFIG1, _CP_OFF &_LVP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


;*******************************************************************************


LIST P=16F84A ;MODELO MICROCONTROLADOR


RADIX HEX ;POR DEFECTO SE USARÁ LA NUMERACIÓN HEXADECIMAL


INCLUDE P16F84A.INC ;LIBRERIA DEL MICROCONTROLADOR


;*******************************************************************************


; Variables en RAM



;*******************************************************************************


CBLOCK 0X22


llaves

ENDC

;*******************************************************************************


;Salto a INICIO - Vector Reset


;*******************************************************************************


ORG 0X00 ;NOS SITUAMOS EN LA PRIMERA POSICIÓN DE MEMORIA


GOTO INICIO ;SALTA A "INICIO" PARA EVITAR EL VECTOR DE INTERRUPCION


ORG 0X04 ;VECTOR DE INTERRUPCIONES


NOP


;*******************************************************************************


;Programa


;*******************************************************************************


INICIO


;****************Configuración de puertos*****************


CLRF PORTA


CLRF PORTB


BSF STATUS,RP0 ;CAMBIA AL BANCO 1


BSF STATUS,RP0 ;CAMBIA AL BANCO 1


MOVLW B'00011111' ;CONFIGURA LOS PUERTOS


MOVWF TRISA


MOVLW B'00000000'

MOVWF TRISB


BCF STATUS,RP0 ;CAMBIA AL BANCO 0

;******************PRINCIPAL***************


switch MOVF PORTA,0 ;

ANDLW 0x0F ;

MOVWF llaves ;

XORLW 0x00 ;

BTFSC STATUS,2

CALL efect1 ;

MOVF llaves,0;

XORLW 0x01 ;

BTFSC STATUS,2;

CALL efect2 ;

MOVF llaves,0
XORLW 0x02 ;

BTFSC STATUS,2;

CALL efect3

MOVF llaves,0

XORLW 0x03

BTFSC STATUS,2

CALL efect4

MOVF llaves,0

XORLW 0x04
BTFSC STATUS,2

CALL efect5

GOTO switch ;


;======================== Efectos =========================


efect1 CLRF PORTB ; limpia el puerto B

BSF PORTB,0 ;

CALL DELAY_500MS

bcf PORTB,0

call DELAY_500MS

RETURN ; a revisar nuevamente las llaves


efect2 CLRF PORTB
BSF PORTB,1

call DELAY_1S

BCF PORTB,0

call DELAY_1S
RETURN



efect3 CLRF PORTB ; limpia el puerto B

BSF PORTB,2 ;

CALL DELAY_2S

BCF PORTB,0 ;

CALL DELAY_1S

RETURN



efect4 CLRF PORTB

BSF PORTB,3
call DELAY_1S

BCF STATUS,0
call DELAY_2S

RETURN

efect5 CLRF PORTB ; limpia el puerto B

bsf PORTB,0

call DELAY_5S

bcf PORTB,0

call DELAY_1S
RETURN



;Librerías


;*******************************************************************************


INCLUDE ;LIBRERIA DE RETARDOS


;*******************************************************************************


;Fin del programa


;*******************************************************************************


END

urquia22
Nuevo Usuario
Nuevo Usuario

Mensajes : 3
Fecha de inscripción : 31/03/2011

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty Re: SECUENCIADOR DE 5 SEÑALES

Mensaje por maigke Miér 25 Mayo 2011 - 13:34

saludos compañero

¿cuál es la duda?
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty SECUENCIADOR DE 5 SEÑALES

Mensaje por urquia22 Jue 26 Mayo 2011 - 3:18

Saludos igualmente,,,,,,,,,el problema es que compilo el programa sin problemas, pero cuando lo simulo en Proteus, no realiza ningún efecto,,,,,,,y no entiendo porque,,,,,,,,osea no estoy muy claro en el porque no corre la simulación...........y no estoy muy claro con el manejo de los swiches...... Sad

urquia22
Nuevo Usuario
Nuevo Usuario

Mensajes : 3
Fecha de inscripción : 31/03/2011

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty Y por que ensamblador??

Mensaje por JosePablo Jue 26 Mayo 2011 - 7:17

Hola.

Por que estas programando en ensamblador?? mejor intenta en C! Te recomiendo SDCC o CCS. Talvéz por ahi va el problema, es mas fácil encontrar y corregir los errores en C que en ensamblador.
JosePablo
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty Re: SECUENCIADOR DE 5 SEÑALES

Mensaje por maigke Jue 26 Mayo 2011 - 16:05

mmm ok, veamos que onda con tu código

( esto solo es para que se vea mas claro)
Código:

; Secuenciador de 5 señales
;*******************************************************************************
;;Configuración para el programador
;*******************************************************************************
__CONFIG _CONFIG1, _CP_OFF &_LVP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;*******************************************************************************
LIST P=16F84A ;MODELO MICROCONTROLADOR
RADIX HEX ;POR DEFECTO SE USARÁ LA NUMERACIÓN HEXADECIMAL
INCLUDE P16F84A.INC ;LIBRERIA DEL MICROCONTROLADOR
;*******************************************************************************


; Variables en RAM
;*******************************************************************************
CBLOCK 0X22
llaves
ENDC

;*******************************************************************************


;Salto a INICIO - Vector Reset
;*******************************************************************************
ORG 0X00 ;NOS SITUAMOS EN LA PRIMERA POSICIÓN DE MEMORIA
GOTO INICIO ;SALTA A "INICIO" PARA EVITAR EL VECTOR DE INTERRUPCION
ORG 0X04 ;VECTOR DE INTERRUPCIONES
NOP
;*******************************************************************************
;Programa
;*******************************************************************************
INICIO
;****************Configuración de puertos*****************
CLRF PORTA
CLRF PORTB
BSF STATUS,RP0 ;CAMBIA AL BANCO 1
BSF STATUS,RP0 ;CAMBIA AL BANCO 1
MOVLW B'00011111' ;CONFIGURA LOS PUERTOS
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0 ;CAMBIA AL BANCO 0

;******************PRINCIPAL***************
switch MOVF PORTA,0 ;
ANDLW 0x0F ;
MOVWF llaves ;
XORLW 0x00 ;
BTFSC STATUS,2
CALL efect1 ;
MOVF llaves,0;
XORLW 0x01 ;
BTFSC STATUS,2;
CALL efect2 ;
MOVF llaves,0
XORLW 0x02 ;
BTFSC STATUS,2;
CALL efect3
MOVF llaves,0
XORLW 0x03
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x04
BTFSC STATUS,2
CALL efect5
GOTO switch


;======================== Efectos =========================


efect1 CLRF PORTB ; limpia el puerto B
BSF PORTB,0 ;
CALL DELAY_500MS
bcf PORTB,0
call DELAY_500MS
RETURN ; a revisar nuevamente las llaves
efect2 CLRF PORTB
BSF PORTB,1
call DELAY_1S
BCF PORTB,0
call DELAY_1S
RETURN



efect3 CLRF PORTB ; limpia el puerto B
BSF PORTB,2 ;
CALL DELAY_2S
BCF PORTB,0 ;
CALL DELAY_1S
RETURN



efect4 CLRF PORTB
BSF PORTB,3
call DELAY_1S
BCF STATUS,0
call DELAY_2S
RETURN

efect5 CLRF PORTB ; limpia el puerto B
bsf PORTB,0
call DELAY_5S
bcf PORTB,0
call DELAY_1S
RETURN



;Librerías


;*******************************************************************************


INCLUDE  <retardos.inc>;LIBRERIA DE RETARDOS


;*******************************************************************************


;Fin del programa

;*******************************************************************************
END

Regreso
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty Re: SECUENCIADOR DE 5 SEÑALES

Mensaje por maigke Jue 26 Mayo 2011 - 16:36

Ok bueno revisando tu código encontré muchos errores, por lo cual, no creo que haya podido ser ensamblado. te dejo ya un código corregido con una breve explicación de como funciona la cuestión de las llaves.

Las siguientes direcciones son para que puedas consultar sobre la libreria de retardos que use y sobre una breve explicacion de la operacion xorlw

http://www.todopic.com.ar/asm/rama/retardos.asm%20.txt
http://www.piclist.com/images/www/hobby_elec/e_pic3_a.htm?ref=Guzels.TV

Espero te sea útil la info, y disculpa que no pueda subir una imagen, ya que tengo restringido el acceso a internet.

Saludos desde Mx.

Nota: La librería la pones en la misma carpeta en la que guardes tu código fuente.

Código:

; Secuenciador de 5 señales
;*******************************************************************************
;;Configuración para el programador-- ENSAMBLADO CON PIKLAB y GPUTILS
;*******************************************************************************
   __CONFIG  _CP_OFF  & _WDT_OFF & _PWRTE_ON & _XT_OSC

;*******************************************************************************
   LIST P=16F84A ;MODELO MICROCONTROLADOR
   RADIX HEX ;POR DEFECTO SE USARÁ LA NUMERACIÓN HEXADECIMAL
   INCLUDE <P16F84A.inc> ;LIBRERIA DEL MICROCONTROLADOR
;*******************************************************************************


; Variables en RAM
;*******************************************************************************
CBLOCK 0X22
llaves
ENDC

;*******************************************************************************


;Salto a INICIO - Vector Reset
;*******************************************************************************
   ORG 0X00 ;NOS SITUAMOS EN LA PRIMERA POSICIÓN DE MEMORIA
   GOTO INICIO ;SALTA A "INICIO" PARA EVITAR EL VECTOR DE INTERRUPCION
   ORG 0X04 ;VECTOR DE INTERRUPCIONES
   NOP
;*******************************************************************************
;Programa
;*******************************************************************************
INICIO
;****************Configuración de puertos*****************
   CLRF PORTA
   CLRF PORTB
   BSF STATUS,RP0 ;CAMBIA AL BANCO 1
   BSF STATUS,RP0 ;CAMBIA AL BANCO 1
   MOVLW B'00011111' ;CONFIGURA LOS PUERTOS
   MOVWF TRISA  ;Puerto A es entrada
   MOVLW B'00000000'
   MOVWF TRISB  ;Puerto B es salida
   BCF STATUS,RP0 ;CAMBIA AL BANCO 0

;******************PRINCIPAL***************

;**** Toma en cuenta que si conectas asi
;                Vcc
;   ----| |----+------/\/\/\-----|
;      |     |
;      gnd        RA0
; se debe saber cual es el cero

;Para identificar el boton pulsado tenemos que hacer lo siguiente:
;
; w recibe el valor del portA  0001 1111
; despues haces una operacion and con 0000 1111 y el registro w
; el resultado es 0000 1111, esto ultimo lo guardamos en el
; registro llamado llaves
;
; ahora realizamos una operacion Ex-Or con 0000 1111
;
; Recuerda que si los numeros son iguales el resultado es cero
; y si son diferentes es uno
;
; por ejemplo
;
;   w <--  00001111
;      L      00001111  en ExOr
;            ---------
;              00000000  este resultado se almacena en W
;
;   BTFSC STATUS,2  en esta línea se verifica si el resultado de la
;   operacion anterior nos dio un cero, el bit 2 del regitro de STATUS es
;   la bandera llamada Zero.
;    Si es cero (como en nuestro ejemplo lo fue), no salta la instrucción
;   CALL efect1 ;
;
;   Pero en caso contrario, salta esta instruccion y pasa con la siguiente
;   pregunta, ¿se presionó el botón RA0?


switch
   MOVF PORTA,0 ;  lee el puerto A y lo guarda en W             
   ANDLW 0x0F ;  aplica una mascara 00001111 al registro W
   MOVWF llaves ;
   XORLW 0x0F ;
   BTFSC STATUS,2
   CALL efect1 ;

   MOVF llaves,0;
   XORLW 0x0E ;
   BTFSC STATUS,2;
   CALL efect2 ;

   MOVF llaves,0
   XORLW 0x0D ;
   BTFSC STATUS,2;
   CALL efect3

   MOVF llaves,0
   XORLW 0x0B
   BTFSC STATUS,2
   CALL efect4

   MOVF llaves,0
   XORLW 0x07
   BTFSC STATUS,2
   CALL efect5

   GOTO switch


;======================== Efectos =========================


efect1:
   CLRF PORTB ; limpia el puerto B
   BSF PORTB,0 ;
   CALL Retardo_500ms
   bcf PORTB,0
   call Retardo_500ms
   RETURN ; a revisar nuevamente las llaves

efect2:
   CLRF PORTB
   BSF PORTB,1
   call Retardo_1s
   BCF PORTB,0
   call Retardo_1s
   RETURN



efect3:
   CLRF PORTB ; limpia el puerto B
   BSF PORTB,2 ;
   CALL Retardo_2s
   BCF PORTB,0 ;
   CALL Retardo_1s
   RETURN



efect4:
   CLRF PORTB
   BSF PORTB,3
   call Retardo_1s
   BCF STATUS,0
   call Retardo_2s
   RETURN

efect5:
   CLRF PORTB ; limpia el puerto B
   bsf PORTB,0
   call Retardo_5s
   bcf PORTB,0
   call Retardo_1s
   RETURN



;Librerías


;*******************************************************************************


INCLUDE  <retardos.asm>;LIBRERIA DE RETARDOS


;*******************************************************************************


;Fin del programa

;*******************************************************************************
END

cheers
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

SECUENCIADOR DE 5 SEÑALES Empty Re: SECUENCIADOR DE 5 SEÑALES

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.