Foro de elhacker.net

Informática => Electrónica => Mensaje iniciado por: CATBro en 28 Octubre 2011, 09:11 am



Título: AT89S52 o AT89C52 Timer, Contadores
Publicado por: CATBro en 28 Octubre 2011, 09:11 am
Que tal foro, mi primer post en electronica y tengo tres dudas que no me entran en la cabeza, resulta que tengo unas practicas en la escuela con este microcontrolador AT89C52 o AT89S52 y ni el maestro se explica bien.

Consegui un manual de ese micro, no el datasheet si no el manual con los temas, y sigo sin entender como funcionan y como accedo a esto, todo las practicas las hacemos en ASM del micro. Alguien que sea amable y me ayude explicandome esto.

No saben que agradecido estaria  ;-)


Título: Re: AT89S52 o AT89C52 Timer, Contadores
Publicado por: skapunky en 30 Octubre 2011, 21:50 pm
Realmente es dificil explicarlo bien y menos sobre Atmel que estos microcontroladores están obsoletos, por suerte yo en la facultad hace años me tocó la típica assignatura de micros y trabajé con atmel.

Cada micro tiene unos registros para los timers y los contadores, eso lo deberías mirar en tu datasheet, digo que realmente es dificil explicar eso porque debería ceñirme en tu caso en particular con esos modelos pero te lo explicaré de forma general.

Tanto para manjear los timers como los contadores, exísten un o varios registros que se deben habilitar, estos registros tienen 8 bits. Cada bit de ellos es a su vez un "subregistro de 1 bit" que según si está a 0 o 1 lo activaremos.

Es parecido a la palabra de estado, no se si habrás oído hablar de ella donde tiene 8 bits con 8 funciónes distintas.

Lo mejor para entender esto, es en las practicas de laboratorio donde lo programes, y si tienes dudas deberías preguntar porque es algo que cuando tienes delante el programa se entiende fácilmente. Te recomiendo que leas detalladamente el apartado del datasheet de los contadores y temporizadores, aunque el micro tenga 2 o 3 de cada uno de ellos todos funcionan igual solo que su registro lleva el numero que sea.

Si tienes dudas mas específicas te puedo ayudar.

NOTA: No se si demasiada gente por aquí te podrá ayudar ya que Atmel se da en algunas universidades y en todos lados enseñan Microchip, yo ahóra estoy oxidado en Atmel pero si ves que tienes apuros me pongo contigo con lo que necesites.


Título: Re: AT89S52 o AT89C52 Timer, Contadores
Publicado por: CATBro en 11 Noviembre 2011, 00:17 am
Jeje muchas gracias por contestar y por ofrecerte a echarme una mano, pense que nadie iva a contestar  :laugh: , estuve estos dias con una practica que usaba un temporizador y mas o menos le entendi pero no muy bien , respecto a los registro de 8 bits que me dices, son el registro TMOD y TCON los que tengo que utilizar. Pero sigo sin entender el funcionamiento a la perfeccion dejen pongo un ejemplo:

Código:
                
                 NOP
                 NOP
                 MOV TMOD,#01H
;//////////////////////////////////////////////////////// APAGAR Y PRENDER EL LED

APAGADO:        MOV R0,#00H
                        MOV R1,#00H

                        SETB P1.0 ;--------->Prende

LLAMAR:           LCALL TIMER
                       
                        CJNE R0,#014H,LLAMAR
                        MOV R0,#00H
                        INC R1
                        CJNE R1,#07H,LLAMAR
;/////////////////////////////////////////////////////// APAGA LED                 
                       CLR P1.0--------->Apaga
               
                       MOV R0,#00H
                       MOV R1,#00H
LLAMAR2:         LCALL TIMER
                       CJNE R0,#014H,LLAMAR2
                       MOV R0,#00H
                       INC R1
                       CJNE R1,#03H,LLAMAR2
                       LJMP APAGADO
                 
   ;/////////Timer

TIMER:       INC R0
                 MOV TL0,#0AFH   
                 MOV TH0,#03CH
                 MOV TCON,#010H
AQUI:        MOV A,TCON
                 ANL A,#020H ;<-------------------No entiendo esta parte...
                 JZ AQUI
                 RET
                                 
FIN:           LJMP FIN
                 NOP
                 END                       

Lo que debe de hacer es prender un led por 7 segundos y apagarlo por 3 segundos, pero todo esto esta muy difuso, como en la parte de ANL A,#020H no entiendo para que lo multiplica.....

Saludos


Título: Re: AT89S52 o AT89C52 Timer, Contadores
Publicado por: skapunky en 11 Noviembre 2011, 21:18 pm
Citar
AQUI:        MOV A,TCON
                 ANL A,#020H ;<-------------------No entiendo esta parte...
                 JZ AQUI
                 RET

Primero a entender que es "ANL", según la descripción del manual de instrucciónes de Atmel tenemos:

Citar
Operation:   ANL
Function:   Bitwise AND
Syntax:   ANL operand1, operand2
Description: ANL does a bitwise "AND" operation between operand1 and operand2, leaving the resulting value in operand1. The value of operand2 is not affected. A logical "AND" compares the bits of each operand and sets the corresponding bit in the resulting byte only if the bit was set in both of the original operands, otherwise the resulting bit is cleared.

Es decir, compara dos valores...esto lo hace en forma de "mascara" imagino que sabes lo que es, por si no lo sabes una mascara se utiliza para comparar si un valor de un registro o uno de los bits de un registro es el valor que deseamos, en este caso del registro TCON donde su valor lo almacenamos en el acumulador A.

Vamos línea por línea:
Código
  1. AQUI:        MOV A,TCON  //almacenamos el valor del registro TCON en acumulador A
  2.                 ANL A,#020H  // comparamos el valor del bit 6º si es 0 o 1.
  3.                 JZ AQUI // si es cero volvemos a la etiqueta aqui
  4.                 RET //volvemos de la función.
  5.  
Ahora paso a explicarte lo de la mascara, el valor TCON = XXXXXXXX donde
A = TCON = XXXXXXXX.

Ahóra comparamos con una AND bit por bit el valor de TCON con el valor de la mascara 020h

xxxxxxxx
00100000
------------  Aplicamos AND bit a bit
xx@xxxxx

Donde el valor @ será 0 o 1 dependiendo del 6º bit de TCON, una vez comprovado si es cero salta a la etiqueta y si no es cero va a RET.


Espero que entiendas la explicación, si tienes dudas pregunta a tu profesor lo que es una "mascara" porque en ensamblador para comprovar si el bit N de un registro es 0 o 1 es obligatorio siempre hacerlo.

Enlaces que te pueden ayudar:

8051 instruccion set (http://www.win.tue.nl/~aeb/comp/8051/set8051.html#51anl)
Assembler user guide ATMEL (http://www.atmel.com/dyn/resources/prod_documents/doc1022.pdf)


Por cierto TL0 y THO era para cargar el valor de la temporización no?  :xD deberé repasar los registros de atmel, todo por no mirar en el datasheet de uno de ellos jajaja. Si tienes mas dudas te ayudaré encantado, por suerte el oxido que tengo en atmel lo puedo pulir.