SECUENCIADOR DE 5 SEÑALES
3 participantes
Página 1 de 1.
SECUENCIADOR DE 5 SEÑALES
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].................................... aquí les dejo .................................
; 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
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].................................... aquí les dejo .................................
; 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
;*******************************************************************************
;Fin del programa
;*******************************************************************************
END
urquia22- Nuevo Usuario
- Mensajes : 3
Fecha de inscripción : 31/03/2011
Re: SECUENCIADOR DE 5 SEÑALES
saludos compañero
¿cuál es la duda?
¿cuál es la duda?
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
SECUENCIADOR DE 5 SEÑALES
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......
urquia22- Nuevo Usuario
- Mensajes : 3
Fecha de inscripción : 31/03/2011
Y por que ensamblador??
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.
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- Participante
- Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica
Re: SECUENCIADOR DE 5 SEÑALES
mmm ok, veamos que onda con tu código
( esto solo es para que se vea mas claro)
Regreso
( 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- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: SECUENCIADOR DE 5 SEÑALES
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.
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
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.