TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: enXian en 12 de Julio de 2006, 20:13:26

Título: AT89S8252
Publicado por: enXian en 12 de Julio de 2006, 20:13:26
Hola soy nuevo en los microcontroladores llevo la materia microprocesadores I con el MC ATMEL   AT89S8252 estamos usando el software Pinnacle y para enviar el ponnyprog. perdon pero voy a estar molestandolos un rato..  :mrgreen: tengo que hacer un programa que prende y apaga  1 led durante 1 segundo. en realidad no tengo idea de que instrucciones utilizar es una practica..
Título: Re: AT89S8252
Publicado por: enxian en 20 de Julio de 2006, 15:06:42
Hola haber si alguien me puede ayudar con este programa. se trata de convertir un numero de hexadecimal a decimal 0 a FF y mostrarlo en 3 displays.  :-/
Título: Re: AT89S8252
Publicado por: enxian en 20 de Julio de 2006, 18:49:57
Aqui dejo un ejemplo que puso el maestro.

             ORG 0000H
             JMP INICIO

             ORG 0040H
INICIO: MOV SP,#0E0H
             MOV A,P1
             MOV B,#64H
             DIV AB
             MOV R0,A
             MOV A,B
             MOV B,#0AH
             DIV AB
             MOV R1,A

A=02
B=37

FF                37             37              05
--- = 02       ---- = 0     ---- = 05    -----  = 0
64                64            0A              0A
Título: Re: AT89S8252
Publicado por: djpalas en 20 de Julio de 2006, 20:15:45
A ver, vamos por pasos? Llevo un tiempo sin tocar ASM de la arquitectura 8051, pero eso es como montar en bici ;)

Que es lo que quieres exactamente? Porque has colocado 3post diferente en el mismo hilo.

Sobre lo del Hexadecimal a 3Displays, acabo de programarte este codigo, hechale un vistazo y pruebalo.

Código: ASM
  1. ;==============================
  2. ;       Rutina Hex a 3 BCD
  3. ;==============================
  4. ; Entrada:
  5. ;       - Dato en el Acumulador
  6. ; Salida:
  7. ;       - R0: BCD más alto
  8. ;       - R1: BCD medio
  9. ;       - R2: BCD más bajo
  10. ;==============================
  11. HexTo3BCD:
  12.         mov     B,#100
  13.         div       AB
  14.         mov     R0,A
  15.         mov     A,B
  16.         mov     B,#10
  17.         div       AB
  18.         mov     R1,A
  19.         mov     R2,B
  20.         ret

Te lo comento un poco....puesto que el máximo valor que puede tomar con una variable de 8bit son 2^8=256 (0 a 255  == 0 a FF) Si por ejemplo queremos visualizar en los 3 display el valor decimal de 7Bh (123 en decimal)
Veamoslo en datos decimales mejor:

Código: ASM
  1. .
  2.  .
  3.  .
  4.         mov      A,#7Bh         ; Movemos 123 al acumulador
  5.         acall      HexTo3BCD  ; Llamamos la subrutina
  6.  .
  7.  .
  8.  .
  9.  
  10. HexTo3BCD:
  11.         mov     B,#100          ; Movemos 100 al registro B
  12.         div       AB                 ; Dividimos 123 entre 100, obteniendo 1 como cociente y 23 el resto, osea A=1 y B=23
  13.         mov     R0,A              ; Guardamos nuestro primer Dígito
  14.         mov     A,B                ; Movemos al acumulador el valor del registro B para la siguiente operacion
  15.         mov     B,#10            ; Movemos 10 al registro B
  16.         div       AB                 ; Dividimos 23 entre 10.  A=2 y B=3
  17.         mov     R1,A              ; Guardamos el Segundo Dígito
  18.         mov     R2,B              ; Guardamos el Tercer Dígito
  19.         ret                            ; Salimos de la Subrutina

Espero que te sirva esta subrutina.