lunes, 30 de mayo de 2011

TIMER 1

En éste post mostraré un pequeño ejemplo de como configurar el timer 1 (16 bits) para tener una gran variedad de bases de tiempo, las cuales pueden ser usadas para generar retardos, pulsos a una determinada frecuencia, etc.

Programa : TIMER

Sin mas preámbulo pasaré a mostrar las macros usadas.


A ésta macro solamente hay que indicarle el tiempo con el cual se quiere configurar el timer (en ms).
El pre-escaler del timer se puede cambiar modificando CSN.

macros2

MOVIF pone un inmediato en la RAM, ya sea en el espacio de datos o en el espacio de registro especiales.

El programa principal es el siguiente:

main1

Esta parte configura dos pines como salidas (PB0 y PB1), también configura el TIMER 1 a 100ms, configura el pre-escaler del timer y por ultimo habilita la interrupción por desborde u overflow.

main2

Cada vez que el timer se desborda se conmutará los pines PB0 y PB1, y también hay que volver a configurar el timer.

En el siguiente video se muestra el funcionamiento del programa.


5 comentarios:

  1. hola ingeniero
    he estado sguiendo sus piblicaciones pero en las ultimas no entiendo algunas instruciones que orden dan un ejemplo:
    , EQU F_CPU =1600000 y otros
    y secuencias que parecen estar en C, tampoco las entiendo;por favor si me puede dar una mano y si tiene manuales en español por favor enviemelos al correo estiloduitama@yahoo.com

    ResponderEliminar
  2. hola ing
    se pede mesclar ensamblador y C

    ResponderEliminar
  3. compre un programador de avr pero no se como configurar los fusibles me puede dar una mano sobre esto

    ResponderEliminar
  4. Hola Jasa, sobre tus preguntas...
    set, equ , if , elif, else, etc, no son mas que directivas que soporta el ensamblador. Las direcctivas no se traducen o no generan codigo. Una de sus funciones son la definición de macro (es asi como yo las uso).
    Por ejemplo en la directiva ".SET" :
    .SET F_CPU = 20000000
    F_CPU no es mas que una constante que se usa en el programa.
    .SET BAUD = 19200
    BAUD es otra constante.
    .SET UBRRX = ((F_CPU/(16*BAUD))-1)
    UBRRX es otra constante ( que será el resultado de la formula ((F_CPU/(16*BAUD))-1)), ojo que el calculo de la formula lo realiza el compilador y no el uC ( el uC ya recibe la constante).

    Algo similar ocurre con .if, .elif, .else , el compilador discriminará que parte de codigo o que instrucción colocará, ojo nuevamente que esta discriminación la realiza el compilador y no el uC.

    Si puedes mezclar asembler con c, pero esto siempre que te encuentres programando en c.

    ¿ Qué programador tienes, y que uC estas intentando grabar ?... ten mucho cuidado con los fuses, porqué podrias bloquear tu uC.

    ResponderEliminar
  5. Quiza esto te ayude:
    http://www.4shared.com/document/nIilPwpH/ASSEMBLER.html?

    ResponderEliminar