TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: underwol2 en 22 de Enero de 2010, 16:02:12
-
hola para pedirles un favor
me encontré este código en la web maneja un display 7 segmentos con un pulsador en el puerto rb7 que al presionarlo cuenta de 0 a 9
la ayuda que les pido si me pueden hacer el favor de ayudar a modificar el código para que quede el pulsador en el puerto rao
les adjunto el código y el esquema en proteus y el hex
gracias por la colaboración
-
Hola underwol2
Para efectuar los cambios que deseas hacer deves tener presente que el pulsador
estara en porta y en el bit 0 con lo cual lo primero sera seguir el listado del codigo y
efectuar los cambios donde procedan
Primero camviar donde se definen las variables , pulsador que que tiene un valor de 7 por 0
Pulsador equ 0
Segundo sera configurar la puerta A en su bit 0 como entrada dentro de la etiqueta inicio despues de trisb poner
movlw b'00000001'
movwf trisa
tercero sera cambiar portb por porta
donde te dice btfss portb,pulsador deveras cambiarlo por btfss porta,pulsador
endefinitiva donde te encuentras
instruccion portb,pusador
cambiarlo por
instruccion porta,pulsador
el resto de instrucciones debes dejarlos tal cual
Espero haberte ayudado
Recomendarte des un paseo por el foro donde muchos compañeros han efectuado
verdaderas maravillas en este mundo de los microcontroladores y podras encontrar
codigo en asm para efectuar numerosas practicas
Un saludo
-
gracias por responder mi inquietud haré las pruebas correspondiente y te comento
soy nuevo en esto de los pic i comprende ras que no tengo profesor solo autoaprendizaje y me toca luchar para aprender sobre pic y solo cuento con la ayudas de personas que colaboran con los novatos sin burlarse
gracias por las respuestas es muy importante para un novato en el tema
-
me funciono como yo quería ahora ya lo puedo controlar desde el puerto ra0
podría pedirte otro favor como me estoy entrenando con los pic especialmente 16f84a y 16f628
e estado por poner todos los puertos rbo hasta rb7 como salidas o sea que me alumbren todos los led
me intereso también en poner dos led intermitentes
para no confundirme mucho
tendrás algun código que me puedas dar sobre estos temas
gracias por la ayuda
-
Hola
Yo tambien soy autodidacta y como tu tambien he agradecido mucho una mano
Podras encontrar ejemplos de suky en este foro en el apartado
Microcontroladores PIC/Primeros pasos-Iniciacion a los microcontroladores/Mis primeros programas en ASM.PIC16F84A y16F628
Un Saludo
-
gracias por la respuesta ya localice el link e estado asiendo unas practicas con ejemplos de la web y me tiene dando vueltas las rutinas de retardo sobre el ejemplo
;-----------Rutina de Retardo-----------
retardo movlw 1 ; Aquí se cargan los registros
movwf reg1 ; reg1, reg2 y reg3 con los valores 10, 20 y 30
tres movlw 2 ; respectivamente
movwf reg2 ; Decrementos
dos movlw 3 ; Decrementos
movwf reg3 ; Decrementos
uno decfsz reg3,1 ; Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
decfsz reg2,1 ; le quitare 1 a reg2
goto dos ; cuando reg2 llegue a 0
decfsz reg1,1 ; le quitare 1 a reg1
goto tres ; cuando reg1 llegue a 0
retlw 00 ; regresare al lugar de donde se hizo la llamada
END
;-----------Final----------------
en este ejemplo rota automaticamente las secuencia de led el primer fallo que tuve fue que los tiempo de retardo eran muy bajos o algo así y tenia que desactivar el cristal de frecuencia y acercarle la mano y funcionaba y lo solucione solo lo incremente 20,40,60
y con eso ya me funciono con el cristal de frecuencia sin necesidad de acercarle la mano el asunto es son tres registros y los nombraron reg1,reg2,reg3 con valores 10,20,30
el tema lo centro en los reg que hacen los tres registro con los valores y el prescaler estoy estudiando y algo e comprendido necesito practica y saber para que colocaron los valores
-
Saludos
uno decfsz reg3,1 ; Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
Está parte del código hace lo siguiente por ejemplo si reg3 = 20 que pasa la función decfsz reg3,1 decrementa dicho registro y salta si es cero entonce la instrucción se efectua 20 veces, ahora como la función decfsz se ejecuta en un ciclo de reloj y la función goto, return, y retfie se ejecutan en 2 ciclos del reloj por ejemplo si tenemos un cristal de 4Mhz la frecuencia del oscilador sera de 1Mhz por lo tanto, un ciclo de reloj equivale a 1us por lo tanto, el tiempo que demora esté pequeño código es de (3*20)us = 60us muy poquito
Ahora cuando ya se ha decrementado hasta llegar hasta cero decrementa reg2 y si reg2 = 50 ahora el código se demora en ejecutarce (60 + 5)us * 50 = 3250us y lo mismo pasa con el otro registro siguele el seguimiento al código y podrás llegar a una fórmula o un modelo matemático que te puede ayudar a cuadrar el tiempo que tu quieres obtener, si lo que quieres es exactitud los timer son la mejor opción.
Espero que te halla servido la explicación.
-
muchas gracias por responder tenia esa duda y estaba un poco confundido con los ciclos del reloj y los cálculos de los retardos
te refieres a que decrementa el reg hasta llegar acero y salta y toma el segundo registro uno auno asta terminar los tres reg y salta al terminar de decrementar un registro , por que se utilizaban los tres registros y como los localizo en el pic
ahora tengo mejor claridad en el tema de interrupciones y supongo que es para ayudar a controlar la velocidad de procesamiento de una orden
decrementando el registró hasta llegar acero y seguir
podría utilizar un solo reg para hacer encender el led y mantenerlo encendido por 2 y apagarlo por dos segundos
o tendre que utilizar dos o tres registros
-
Hola, aqui tienes un programita muy util para generar o configurar demoras :mrgreen:
generador de demoras en assembler (http://www.todopic.com.ar/foros/index.php?topic=5968.msg39712#msg39712)
Norberto
-
Pues lo primero debes tener en cuenta que el micro tiene una memoria en la cual el usuario la maneja que el desee,
Si te fijas al principio puedes encontrar lo siguiente por ejemplo:
reg equ 0x20
reg2 equ 0x21
reg3 equ 0x22
lo que quiere decir el código es que el micro ha nombrado 3 de sus registro de proposito general con los nombre reg, reg2, reg3 debes tener en cuenta que son registros de 8 bit es decir, el valor máximo que puedes manejar en ellos es de 255.
Con respecto a lo de la interrupciones el código que hace la demora no es una interrupción es una rutina que tiene como característica que cuando se encuentra con la instrucción return retorna al PCL + 1, si deseas aprender de las interrupciones de recomiendo que consultes mi hilo sobre manejo de interrupciones ahy podras encontrar teoría y alguno ejemplo.
con respecto a tu tercera pregunta Si se puede pero resulta algo engorroso debido a que deberias poner muchos no opere (Nop) y se vuelve antioperativo el código.
Saludos.
-
gracias por la colaboración me pondré analizar con los datos que e podido reunir gracias ala colaboración me dedicaste el tiempo requerido estaré consultando mas adelante algotra duda
te podre localizar con algun correo personal donde podamos chatear :-/
-
Saludos
Fue con mucho gusto, te recomiendo que antes de poner un hilo o hacer una consulta (MP) primero busca en foro ya que hay bastante información en e,l si la duda perciste y definitivamente no encuentras la respuesta abre un hilo para compartir con los demás compañeros del foro la posible soluciones, con respecto al MP no hay problema si puedo respondo.