TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: Leral en 13 de Marzo de 2009, 07:51:19
-
Hola a todos. Soy nuevo con los Atmega y aun mas con AVRstudio. TEngo que programar una aplicacion con el ATmega8 usando el AVRstudio. Y tengo una duda. Despues de leer varios tutoriales y post mas o menos tengo una idea de lo que tengo que hacer. Pero tengo ciertas dudas.La que quiero preguntaros es la siguiente.
Tengo que leer la señal de un potenciometro, con lo cual uso la opcion ADC del ATmega8. Esta opcion escribe en los registros ADCH y ADCL los diferentes valores que va tomando. Aqui entra mi duda...como puedo hacer para ir jugando con estos valoes, es decir, quiero comprarlos con otros y segun sea la comparacion hacer una cosa u otra. Este es el cacho de codigo que he escrito, se que esta mal, pero si es posible ayudenme a encontrar los errores:
n r16, ADCL
in r17, ADCH ; Ya tengo los valores
;Esto es un ejemplo de los posibles valores que podria tomar el potenciometro.
;0v -----> 0x000 (0d)
;5v -----> 0x0FF (255d)
;10v ----> 0x1FF (511d)
;15v ----> 0x2FF (767d)
;20v ----> 0x3FF (1023d)
Start:
cpi r16, 0x00 ; primera comparacion, si no coinciden comparo con el siguiente y en caso contrario, es decir que coincidan me voy a la funcion first_case
brne next_1
cpi r17, 0x00
brne first_case
next_1:
cpi r16, 0x03 ; segunda comparacion, mas de lo mismo.
brne next_2
cpi r17, 0x3f
brne second_case
next_2:
cpi r16, 0x07
brne next_3
cpi r17, 0x3f
brne third_case
next_3:
cpi r16, 0x0B
brne next_4
cpi r17, 0x3f
brne quarter_case
next_4:
cpi r16, 0x0F
brne Start
cpi r17, 0x3f
brne fifth_case
-
en C te puedo dar una mano si queres.
tengo hecho algo parecido.
Saludos.
-
HOla FuYiVape
Puff....no se nada de C. Ya tengo suficiente con aprender el ensamblador como para ponerme con C ahora.....pero muchisimas gracias por tu ayuda.
Hay mucha diferencia entre el C y el esambrador?? sera dificil entender el codigo partiendo desde cero!!
-
Hay mucha diferencia entre el C y el esambrador?? sera dificil entender el codigo partiendo desde cero!!
Hay mucha diferencia desde la programacion, pero en el fondo son muy parecidos.
Si estas empezando a ver el assembler, te recomiendo que te tomes el tiempo para aprender C.
PARECE COMPLICADO... pero no lo es.
La diferencia fundamental esta en el orden, la estructura, la legibilidad y la comprension del codigo C.
Es mucho mas legible un codigo C que uno assembler.
cpi r17, 0x00
brne first_case
if(a==0x00)
{
codigo first_case;
}
Y cuando tenes que implementar estructuras, arrays o hacer calculos de punto flotante etc. el C es mucho mas amigable.
La ventaja?
Al tratarse de un lenguaje tan basico y tan cercano al bajo nivel, los compiladores resuelven el codigo con un muy buen codigo assembler.
Como el C en su esencia son punteros y direcciones, al compilador no le resulta complicado traducir las sentencias a codigo assembler.
Y al ser tan cercano al bajo nivel, hasta podes incluir codigo assembler dentro del codigo C.
Tenes que tomarte el tiempo en comprender la esencia del C. y despues vas disfrutarlo.
Para empezar si queres, te recomiendo que leas la "BIBLIA" del C. El libro de sus creadores "El Lenguaje de Programacion C por Kernighan & Ritchie"
LINK ELIMINADO NO SE PERMITE SUBIR AL FORO MATERIAL CON COPYRIGHT. Atte. Migsantiago Reglas del Foro. (http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1)
Insisto, PARECE COMPlICADO, pero no lo es.
Saludos
-
Ok. Mcuhas gracias intentare hacerlme con una copia!!
-
quiero comprarlos con otros y segun sea la comparacion hacer una cosa u otra.
Se Me Occurio Hacer Esta Routina En AvrStudio :g)
Para Comparar Los diferentes Valores Del Potenciometro
No Sé Si Te Valdra
Esta Routina La Podras Simular Con El AvrStudio
Y Luego AcoplarLa A Tu Codigo
; ;0v -----> 0x000
; Desde 0 Voltios Hasta 5 Voltios = Desde 1....Hasta 64 Decimales = 40 Hex
; Desde 5 Voltios Hasta 10 Voltios = Desde 65...Hasta 128 Decimales = 80 Hex
; Desde 10 Voltios Hasta 15 Voltios = Desde 129..Hasta 192 Decimales = C0 Hex
; Desde 15 Voltios Hasta 20 Voltios = Desde 193..Hasta 255 Decimales = FF Hex
Luego Ya La Puedes Adaptar A Tu Gusto
; Preuba ASM
;-------------------------------------------------------
; Declaraciones estandar para este micro Atmega8:
.include "m8def.inc"
;-------------------------------------------------------
; Definicion de constantes y variables
; ------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores de interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000
Rjmp RESET ; RESET
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET:
Cli
Ldi r16,HIGH ( PILA )
Out SPH,r16
Ldi r16,LOW (PILA )
Out SPL,r16
;*******DESDE AQUÍ VUESTRO CODIGO*****
; ;0v -----> 0x000
; Desde 0 Voltios Hasta 5 Voltios = Desde 1....Hasta 64 Decimales = 40 Hex
; Desde 5 Voltios Hasta 10 Voltios = Desde 65...Hasta 128 Decimales = 80 Hex
; Desde 10 Voltios Hasta 15 Voltios = Desde 129..Hasta 192 Decimales = C0 Hex
; Desde 15 Voltios Hasta 20 Voltios = Desde 193..Hasta 255 Decimales = FF Hex
ComparaZero:
Ldi ZH,HIGH(2*ZeroVoltios)
Ldi ZL,LOW(2*ZeroVoltios)
Rjmp Intro
ComparoCincoVoltios:
Ldi ZH,HIGH(2*CincoVoltios)
Ldi ZL,LOW(2*CincoVoltios)
Rjmp Sigo
ComparoDiezVoltios:
Ldi ZH,HIGH(2*DiezVoltios)
Ldi ZL,LOW(2*DiezVoltios)
Rjmp Sigo1
ComparoQuinzeVoltios:
Ldi ZH,HIGH(2*QuinzeVoltios)
Ldi ZL,LOW(2*QuinzeVoltios)
Rjmp Sigo2
ComparoVeinteVoltios:
Ldi ZH,HIGH(2*VeinteVoltios)
Ldi ZL,LOW(2*VeinteVoltios)
Rjmp Sigo3
;********************
; Comparo Valores
;********************
Intro:
Lpm
Tst R0
Breq Retorna
Sigo:
Lpm
Tst R0
Breq Retorna1
Adiw ZL,1
brne Sigo
nop
Sigo1:
Lpm
Tst R0
Breq Retorna2
Adiw ZL,1
brne Sigo1
Sigo2:
Lpm
Tst R0
Breq Retorna3
Adiw ZL,1
brne Sigo2
Sigo3:
Lpm
Tst R0
Breq Stop
Adiw ZL,1
brne Sigo3
Retorna: Rjmp ComparoCincoVoltios
Retorna1: Rjmp ComparoDiezVoltios
Retorna2: Rjmp ComparoQuinzeVoltios
Retorna3: Rjmp ComparoVeinteVoltios
Rjmp stop
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA
;*******************
;Tabla De Voltage
;*******************
ZeroVoltios:
.DB 0x00
CincoVoltios:; Hasta Llegar Hasta 40Hex = ( 64 Decimal)
.DB 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08
.DB 0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
.DB 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
.DB 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20
.DB 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28
.DB 0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30
.DB 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38
.DB 0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40
.DB 0x00
DiezVoltios:; Hasta Llegar Hasta 80Hex = ( 128 Decimal)
.DB 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48
.DB 0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50
.DB 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58
.DB 0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60
.DB 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68
.DB 0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70
.DB 0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78
.DB 0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,0x80
.DB 0x00
QuinzeVoltios:; Hasta Llegar Hasta C0Hex = ( 192 Decimal)
.DB 0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88
.DB 0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90
.DB 0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98
.DB 0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0
.DB 0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8
.DB 0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0
.DB 0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8
.DB 0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0
.DB 0x00
VeinteVoltios:; Hasta Llegar Hasta FFHex = ( 255 Decimal)
.DB 0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8
.DB 0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0
.DB 0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8
.DB 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0
.DB 0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8
.DB 0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0
.DB 0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8
.DB 0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00
-
Un pregunta porque haces esto;
ComparaZero:
Ldi ZH,HIGH(2*ZeroVoltios)
Ldi ZL,LOW(2*ZeroVoltios)
Rjmp Intro
No veo lo de ese 2 multiplicando a ZeroVoltios
De todas formas decir que es mas de lo que esperaba. Muchas gracias.
Hasta ahora solo habia encontrado manuales y tutoriales que a pesar de ser bueno carecian de ejemplos suficientes, y lo que necesito mas es cosas como este codigo para hacerme una idea de lo que tengo que hacer y como hacerlo.
Estoy muy agradecido.
Saludos.
-
No veo lo de ese 2 multiplicando a ZeroVoltios
Lo De Multiplicar Por 2 (Tabla*2) O El Nombre Que Sea (Pepe*2)
Debido A La Estructura De La Memoria Interna La Multiplicacion Es Obligatorio Para Alinear La Direccion
Es Decir Veras Abajo La Misma Tabla Reflejada Con El Mismo Nombre En Este Caso Como Se Llama ZeroVoltios
ZeroVoltios:
.DB 0x00
Lo Primero Que Hace El Code Es
ComparaZero:
Ldi ZH,HIGH(2*ZeroVoltios)
Ldi ZL,LOW(2*ZeroVoltios)
Rjmp Intro
Es Decir Señala La Direcion De La Tabla Y La Tabla Marca .DB 0x00 Este Valor
Luego veras Que Hace Un Salto A Intro (Rjmp Intro)
Intro:
Lpm ; Aqui Grabara El Valor De La Tabla En Este Caso 0x00 En R0
Tst R0 ; Testea Si Es 0 Que Es Lo Mismo Que Compara Si Es 0
Breq Retorna ; Aqui Salta a Retorna si R0=0
Como R0 Es Igual A 0x00 Sigue El Code Es Decir A Saltado A Retorna
Retorna: Rjmp ComparoCincoVoltios
Ahora Volvemos A Empezar Ya Que Desde Retorna Se Ve Que Hace Otro Salto A Rjmp ComparoCincoVoltios
Y Vuelta A Empezar Pero Esta Vez Desde La Tabla CincoVoltios:; Hasta Llegar Hasta 40Hex
Intenta Simularlo Con El AvrStudio Tal Como Te Lo Puse Lo Podias Simular
Te Paso El Code Ya Compilado Solo Tendras Que Ticar Encima Del Archivo APS.File
Y Se Ejecutara Con El AvrStudio Y Simulalo Lo Entenderas Mejor
Te Pongo Tambien Una Pelicula Avi De Como Se Ve Simulando
http://rapidshare.com/files/209939555/Simulacion_ASM.zip.html
-
Gracias, creo que en una mañana he aprendido mas que en toda la semana pasada.
En tu codigo donde esta el registro de salida que te dice que la tension es 2,11 0 17 voltios.
En mi caso a parte de saber que tension esta leyendo el micro tengo que sacar una señal de reloj con un periodo de 20ms. El pulso de salida debe variar entre 1ms y 5ms en funcion del potenciometro.
Habia pensado usar un ADC para leer el potenciometro, aunque tambien puedo usar tu codigo y luego ir comparando ese valor y en funcion de el sacar una señal de reloj u otra. De manera sencilla, solo tengo presente 5 casos: 1ms(0v) 2ms(4v)......5ms(20v) y despreciando a los demas porque seria un poco infierno hacer todos los caso posibles. Se que si quiero contar con todos los valores deberia usar un PWM pero no se muy bien como configurar esto.
Que me recomiendas hacer la primera opcion o la segunda.
-
no se muy bien como configurar esto
A Ver Esta Dificilio Este Codigo
Y Teniendo En Cuenta Que Soy Principiante
Pero Bueno Yo E Puesto Mi Grano de Arena
Seguro Que Aprendes Algo Mas Hoy
Mira Ver Este Ejemplo Que Te Pongo
te Subo La Simulacion En Avi Y El Code Completo Aqui
can now be downloaded 10 times
http://rapidshare.com/files/211577283/Leral.zip.html
; Preuba ASM
;-------------------------------------------------------
; Declaraciones estandar para este micro Atmega8:
.include "m8def.inc"
;-------------------------------------------------------
; Definicion de constantes y variables
; ------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores De Interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000 RJMP RESET ; RESET
.ORG 0x0006 RJMP OC1A ; Output Compare1A Interrupt Vector Address
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET:cli
Ldi R16,low(RAMEND)
Out SPL,R16
Ldi R16,high(RAMEND)
Out SPH,R16
Ser R16 ;R16=FF
Out DDRB,R16 ;Configuro Salida En Puerto B
Ldi R16,$14 ;OCIE1A=1 Interrupcion Timer1 Comparacion Autorizada
;TOEI1=1 interruption Timer1 Overflow autorisée
Out TIMSK,R16
Sei ;Autorizacion Interrupcion General
Test:
Sbis PinB,0 ;Si PinB 0 Esta Pulsado =(Sbis) Salto A PinB 1
;Sino Esta Pulsado Salto A Test
rjmp Test ;
Sbic PinB,1 ;Si PinB 1 NO Esta Pulsado =(Sbic) Salto A PinB 2
rjmp Aporte10 ;Si SI Esta Pulsado Salto A Aporte10
Sbic PinB,2 ;Si PinB 2 NO Esta Pulsado =(Sbic) Salto A PinB 3
rjmp Aporte25 ;Si SI Esta Pulsado Salto A Aporte25
Sbic PinB,3 ;Si PinB 2 NO Esta Pulsado =(Sbic) Salto A PinB 3
rjmp Aporte75 ;Si SI Esta Pulsado Salto A Aporte75
Sbic PinB,4 ;Si PinB 2 NO Esta Pulsado =(Sbic) Salto A PinB 3
rjmp Aporte100 ;Si SI Esta Pulsado Salto A Aporte100
;..................................................................
; Aporte Ciclico =10%
;...................................................................
Aporte10:
Rcall InicioTimer ; Limpio Mi Timer Y Lo Pongo A Zero
Clr r17
Out OCR1AH,R17
Ldi R17,$19 ;Registro De Comparacion A $0019=25 Decimal
;$0019 = 25,5 Decimal= 10% de 255 (FF)
Out OCR1AL,r17 ;Aporte Cyclico =10%
Ldi R16,$81 ;PWM Non Invertido Sobre PB1 (1<<COM1A1)|(1<<WGM10)
Out TCCR1A,R16 ;PWM Sobre 8 Bits
Ldi R16,$42 ;Ftck1=CK/8 (1<<ICES1)|(1<<CS11)
Out TCCR1B,R16 ;Lanzo El Contador
Rcall Salto
;..................................................................
; Aporte Ciclico =25%
;..................................................................
Aporte25:
Rcall InicioTimer ; Limpio Mi Timer Y Lo Pongo A Zero
Clr r17
Out OCR1AH,R17
Ldi R17,$40 ;Registro De Comparacion A $0019=25
;$0040 = 63,75 Decimal = 25% de 255 (FF)
Out OCR1AL,r17 ;Aporte Cyclico =25%
Ldi R16,$81 ;PWM Non Invertido Sobre PB1 (1<<COM1A1)|(1<<WGM10)
Out TCCR1A,R16 ;PWM Sobre 8 Bits
Ldi R16,$42 ;Ftck1=CK/8 (1<<ICES1)|(1<<CS11)
Out TCCR1B,R16 ;Lanzo El Contador
Rcall Salto
;..................................................................
; Aporte Ciclico =75%
;..................................................................
Aporte75:
Rcall InicioTimer ; Limpio Mi Timer Y Lo Pongo A Zero
Clr r17
Out OCR1AH,R17
Ldi R17,$BF ;Registro De Comparacion A $0019=25
;$00BF = 191,25 Decimal = 75% de 255 (FF)
Out OCR1AL,r17 ;Aporte Cyclico =75%
Ldi R16,$81 ;PWM Non Invertido Sobre PB1 (1<<COM1A1)|(1<<WGM10)
Out TCCR1A,R16 ;PWM Sobre 8 Bits
Ldi R16,$42 ;Ftck1=CK/8 (1<<ICES1)|(1<<CS11)
Out TCCR1B,R16 ;Lanzo El Contador
Rcall Salto
;..................................................................
; Aporte Ciclico =100%
;..................................................................
Aporte100:
Rcall InicioTimer ; Limpio Mi Timer Y Lo Pongo A Zero
Clr r17
Out OCR1AH,R17
Ldi R17,$FF ;Registro De Comparacion A $0019=25
;$00FF = 255 Decimal = 100% de 255 (FF)
Out OCR1AL,r17 ;Aporte Cyclico =100%
Ldi R16,$81 ;PWM Non Invertido Sobre PB1 (1<<COM1A1)|(1<<WGM10)
Out TCCR1A,R16 ;PWM Sobre 8 Bits
Ldi R16,$42 ;Ftck1=CK/8 (1<<ICES1)|(1<<CS11)
Out TCCR1B,R16 ;Lanzo El Contador
Rcall Salto
;.............................................................
Sigo:
clr r17
out TimsK,r17 ;Deshabilito Interrupcion
rjmp STOP
;..........................................................
;Routina De Tratamiento De La Interupcion
;............................................................
OC1A:
out PORTB,R17
rjmp Sigo
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA
;********************************************************************
InicioTimer: ;. Limpio Mi Timer Y Lo Pongo A Zero................
Clr r16
Out TCCR1B,R16 ;Stop Del Timer
Out TCNT1H,R16 ;Cargo El Contador A Zero
Out TCNT1L,R16 ;
Ret
;...................................................
Salto:
Rjmp Salto
Ret
;...................................................
-
Muchisimas gracias por tu ayuda.
Estos codigos me vienen muy bien para asentar conociemientos. Avanzo muy lento pero poco a poco voy haciendome con las cosas.
-
necesito configurar en asembler el adc para convertir unas distancias que tienen un valor de voltaje en una señal digital como hago para 20cm 2.3 y para 150cm 0.25v, e inicializar una lcd como hago tienes idea?
quiero comprarlos con otros y segun sea la comparacion hacer una cosa u otra.
Se Me Occurio Hacer Esta Routina En AvrStudio :g)
Para Comparar Los diferentes Valores Del Potenciometro
No Sé Si Te Valdra
Esta Routina La Podras Simular Con El AvrStudio
Y Luego AcoplarLa A Tu Codigo
; ;0v -----> 0x000
; Desde 0 Voltios Hasta 5 Voltios = Desde 1....Hasta 64 Decimales = 40 Hex
; Desde 5 Voltios Hasta 10 Voltios = Desde 65...Hasta 128 Decimales = 80 Hex
; Desde 10 Voltios Hasta 15 Voltios = Desde 129..Hasta 192 Decimales = C0 Hex
; Desde 15 Voltios Hasta 20 Voltios = Desde 193..Hasta 255 Decimales = FF Hex
Luego Ya La Puedes Adaptar A Tu Gusto
; Preuba ASM
;-------------------------------------------------------
; Declaraciones estandar para este micro Atmega8:
.include "m8def.inc"
;-------------------------------------------------------
; Definicion de constantes y variables
; ------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores de interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000
Rjmp RESET ; RESET
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET:
Cli
Ldi r16,HIGH ( PILA )
Out SPH,r16
Ldi r16,LOW (PILA )
Out SPL,r16
;*******DESDE AQUÍ VUESTRO CODIGO*****
; ;0v -----> 0x000
; Desde 0 Voltios Hasta 5 Voltios = Desde 1....Hasta 64 Decimales = 40 Hex
; Desde 5 Voltios Hasta 10 Voltios = Desde 65...Hasta 128 Decimales = 80 Hex
; Desde 10 Voltios Hasta 15 Voltios = Desde 129..Hasta 192 Decimales = C0 Hex
; Desde 15 Voltios Hasta 20 Voltios = Desde 193..Hasta 255 Decimales = FF Hex
ComparaZero:
Ldi ZH,HIGH(2*ZeroVoltios)
Ldi ZL,LOW(2*ZeroVoltios)
Rjmp Intro
ComparoCincoVoltios:
Ldi ZH,HIGH(2*CincoVoltios)
Ldi ZL,LOW(2*CincoVoltios)
Rjmp Sigo
ComparoDiezVoltios:
Ldi ZH,HIGH(2*DiezVoltios)
Ldi ZL,LOW(2*DiezVoltios)
Rjmp Sigo1
ComparoQuinzeVoltios:
Ldi ZH,HIGH(2*QuinzeVoltios)
Ldi ZL,LOW(2*QuinzeVoltios)
Rjmp Sigo2
ComparoVeinteVoltios:
Ldi ZH,HIGH(2*VeinteVoltios)
Ldi ZL,LOW(2*VeinteVoltios)
Rjmp Sigo3
;********************
; Comparo Valores
;********************
Intro:
Lpm
Tst R0
Breq Retorna
Sigo:
Lpm
Tst R0
Breq Retorna1
Adiw ZL,1
brne Sigo
nop
Sigo1:
Lpm
Tst R0
Breq Retorna2
Adiw ZL,1
brne Sigo1
Sigo2:
Lpm
Tst R0
Breq Retorna3
Adiw ZL,1
brne Sigo2
Sigo3:
Lpm
Tst R0
Breq Stop
Adiw ZL,1
brne Sigo3
Retorna: Rjmp ComparoCincoVoltios
Retorna1: Rjmp ComparoDiezVoltios
Retorna2: Rjmp ComparoQuinzeVoltios
Retorna3: Rjmp ComparoVeinteVoltios
Rjmp stop
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA
;*******************
;Tabla De Voltage
;*******************
ZeroVoltios:
.DB 0x00
CincoVoltios:; Hasta Llegar Hasta 40Hex = ( 64 Decimal)
.DB 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08
.DB 0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
.DB 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
.DB 0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20
.DB 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28
.DB 0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30
.DB 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38
.DB 0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40
.DB 0x00
DiezVoltios:; Hasta Llegar Hasta 80Hex = ( 128 Decimal)
.DB 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48
.DB 0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50
.DB 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58
.DB 0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60
.DB 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68
.DB 0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70
.DB 0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78
.DB 0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,0x80
.DB 0x00
QuinzeVoltios:; Hasta Llegar Hasta C0Hex = ( 192 Decimal)
.DB 0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88
.DB 0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90
.DB 0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98
.DB 0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0
.DB 0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8
.DB 0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0
.DB 0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8
.DB 0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0
.DB 0x00
VeinteVoltios:; Hasta Llegar Hasta FFHex = ( 255 Decimal)
.DB 0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8
.DB 0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0
.DB 0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8
.DB 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0
.DB 0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8
.DB 0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0
.DB 0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8
.DB 0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00