Google Búsqueda personalizada

Regístrate gratis para participar de los foros, o si ya estás registrado haz login.

Usar el TIMER del PIC 16F84A-04

comentario del autor Sab Jul 25, 2009 11:39 am
   
Buenas:

Con un PIC 16F84A-04 quiero usar el TIMER pero no los retardos porque el PIC queda como esclavo.

La tarea que debo hacer es la sigiente:

1- En el pin RB0 debe tener una salida de 100ms en 1 y 100ms en 0. Así oscilando una señal cuadrada a esa velocidad.
2- En el pin RA4, al pulsarlo en 1 (5V), se para el timer y se detiene el pin RB0 a 0V. El pin RA4 es para activar y desactivar el timer y su salida RB0.

¿Cuál es el código necesario pra hace esto?

Saludo.

Meta

Reputación

solución Dom Jul 26, 2009 9:53 pm
   
Ok.
Cita:"...pero no los retardos porque el PIC queda como esclavo"

Este es un concepto erroneo.-
Por lo tanto si comprendes el funcionamiento de una interrupcion no dirias eso.-
El Pic en cuestion posee 4 fuentes de interrupcion:
1)-Interrupción externa por patilla RB0/INT.
2)-Desbordamiento del Timer 0 (TMR0).
3)-Cambio en el estado de los bits 4 a 7 del puerto B.
4)-Escritura de EEPROM finalizada.
El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o externo, puede interrumpir la normal ejecución de éste produciendo automáticamente un salto a una subrutina, de manera que pueda atender inmediatamente el evento, y retomar luego la ejecución del programa exactamente en donde estaba en el momento de ser interrumpido.
Comprendido esto no necesariamente necesitas hacer uso del timer para lo que vos solicitas.-
Simplemente con una subrutina de retardo, una interrupcion por cambio de estado solucionas todo.-
Ahora si encambio lo queres hacer con el timer0 tenes que contar los desbordes del mismo, el cual te va a generar una interrupcion, eso si asignando al prescaler a un valor correcto para tus 100ms.-
Espero que entiendas.-
Saludos.-

mammuky

Reputación

comentario del autor Dom Jul 26, 2009 10:01 pm
   
Lo puedo sacar con retardos. Tenía entendido por otros foros que los retardos no hay interrupción.

Retardos.
Código:
; Delay = 0.1 seconds
; Clock frequency = 4 MHz

; Actual delay = 0.1 seconds = 100000 cycles
; Error = 0 %

   cblock
   d1
   d2
   endc

Delay
         ;99993 cycles
   movlw   0x1E
   movwf   d1
   movlw   0x4F
   movwf   d2
Delay_0
   decfsz   d1, f
   goto   $+2
   decfsz   d2, f
   goto   Delay_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return



¿En TIMER es más difícil?

Gracias por la ayuda.

Meta

Reputación



Hacer una pregunta

Boletín de Noticias

Reciba noticias de tecnología, tips de reparación y ofertas exclusivas.



Reglamento / P+F

Foros

Miembros / Expertos