sábado, 8 de octubre de 2011

Selección de Código Binario y Visualización

Programa para ATmega8

Monitorea la entrada de un código binario (4 bits) y muestra la selección en decimal mediante un display.

-Aplicación de Tabla de datos para conversión Hexadecimal a 7 segmentos

Diagrama de conexión:


Programa en Assembler:

;---------------------------------------------------------
;Autor: LONELY113
; http://lonely113.blogspot.com
;
;Programa que muestra codigo seleccionado en binario
;en un display catodo comun de 7 segmentos
;Entradas: Puerto B (Pines PB0-PB3)
;Salidas: Puerto D (Pines PD1-PD7)
;Oscilador interno de 8 MHz
;---------------------------------------------------------
.nolist
.include "m8def.inc"
.list
.device  atmega8

.org 0x0000

;Definicion de stack
 ldi  r25,HIGH(RAMEND)
 out  SPH,r25
 ldi  r25,LOW(RAMEND)
 out  SPL,r25
;fin definicion de stack

BEGIN: ldi r18,0x00 ;RB7-RB0 como entradas
 out DDRB,r18 
 ldi r18,0xFF ;RD7-RD0 como salidas
 out DDRD,r18
LOOP: in r17,PINB
 andi r17,0x0F
 rcall SAVE
 out PORTD,r16
 rjmp LOOP

;Subrutinas

SAVE: ldi ZH,HIGH(2*TABLA)
 ldi ZL,LOW(2*TABLA)
 add ZL,r17
 lpm
 mov r16,r0
 ret

;Tabla de conversion hex a 7 segmentos
TABLA:
.DB 0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E 
.DB 0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2
;Fin de tabla

Archivos de Programa:
Descargar

2 comentarios:

  1. Hola cual es la funcion de esta parte del código

    andi r17,0x0F
    He revisado y al parecer limpia la parte alta del nible. Pero no logro entender bien ese concepto.

    in r17,PINB
    andi r17,0x0F

    ResponderEliminar
    Respuestas
    1. Hola, efectivamente esa línea limpia el nible superior para evitar lecturas erróneas.
      Saludos.

      Eliminar