Pruebas Displays

6
/*  * Display7Seg.asm  *  * Created: 13/09/2015 17:08:36  * Author: Mauri  */ ; Conexiones: C0 -> Anodo Display 1 ; C1 -> Anodo Display 2 ; B0 - Pulsador Subida ; B1 - Pulsador Bajada ; D0 -> Segmento a del Display ; D1 -> Segmento b del Display ; D3 -> Segmento c del Display ; D4 -> Segmento d del Display ; D5 -> Segmento e del Display ; D6 -> Segmento f del Display ; D7 -> Segmento g del Display .equ unidades=$60 .equ decenas=$61  ;reset-vector address $0000 .org $0000 rjmp main ;ve al main seg7:.db 0x80,0xf1,0x48,0x60,0x31,0x22,0x02,0xb0,0x00,0x20  ;PROGRAMA PRINCIPAL  main: ldi r16,$04 ;Configuracion de... out sph,r16 ldi r16,$5F out spl,r16 ;...la pila: Stack: $045F=RAMEND ser r16 ;r16 <- $FF out ddrc,r16 ;portC salida ldi r16,$fb ;r16 <- $fb out ddrd,r16 ;portD salidas, excepto D2 ldi r16,$fc out ddrb,r16 clr r16 ;r16 <- 0 sts unidades,r16 ;unidades <- 0 sts decenas,r16 ;decenas <- 0 ldi r30,low(seg7) ;se carga en Z ldi r31,high(seg7) ;la dirección en flash de los datos del di splay ldi r16,2 ;r16 <- 2 add r30,r16 ;adecuamos el puntero Z para qeu apunte a bytes loop: rcall multiplexar ;mostramos datos, hasta que se suelte el  pulsador sbis pinb,0 ;pin B0 esta todavía siendo pulsado? rjmp incremento ;si, está pulsado, volvemos a generar reta rdo, sino se salta instrucción rcall multiplexar ;mostramos datos, hasta que se suelte el  pulsador sbis pinb,1 ;pin B1 esta todavía siendo pulsado? rjmp decremento ;si, está pulsado, volvemos a generar reta rdo, sino se salta instrucción multi:

Transcript of Pruebas Displays

Page 1: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 1/6

/* * Display7Seg.asm * * Created: 13/09/2015 17:08:36 * Author: Mauri */; Conexiones: C0 -> Anodo Display 1; C1 -> Anodo Display 2; B0 - Pulsador Subida; B1 - Pulsador Bajada; D0 -> Segmento a del Display; D1 -> Segmento b del Display; D3 -> Segmento c del Display; D4 -> Segmento d del Display; D5 -> Segmento e del Display; D6 -> Segmento f del Display; D7 -> Segmento g del Display.equ unidades=$60.equ decenas=$61 ;reset-vector address $0000.org $0000

rjmp main ;ve al main

seg7:.db 0x80,0xf1,0x48,0x60,0x31,0x22,0x02,0xb0,0x00,0x20 ;PROGRAMA PRINCIPAL main:

ldi r16,$04 ;Configuracion de...out sph,r16ldi r16,$5Fout spl,r16 ;...la pila: Stack: $045F=RAMENDser r16 ;r16 <- $FFout ddrc,r16 ;portC salidaldi r16,$fb ;r16 <- $fbout ddrd,r16 ;portD salidas, excepto D2

ldi r16,$fcout ddrb,r16clr r16 ;r16 <- 0sts unidades,r16 ;unidades <- 0sts decenas,r16 ;decenas <- 0ldi r30,low(seg7) ;se carga en Zldi r31,high(seg7) ;la dirección en flash de los datos del di

splayldi r16,2 ;r16 <- 2add r30,r16 ;adecuamos el puntero Z para qeu apunte

a bytesloop:

rcall multiplexar ;mostramos datos, hasta que se suelte el

 pulsadorsbis pinb,0 ;pin B0 esta todavía siendo pulsado?rjmp incremento ;si, está pulsado, volvemos a generar reta

rdo, sino se salta instrucciónrcall multiplexar ;mostramos datos, hasta que se suelte el

 pulsadorsbis pinb,1 ;pin B1 esta todavía siendo pulsado?rjmp decremento ;si, está pulsado, volvemos a generar reta

rdo, sino se salta instrucciónmulti:

Page 2: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 2/6

rcall multiplexar ;vamos a visualizar los datos en los displays

rjmp loop ;bucle infinitoincremento:

;rcall delay25m ;retardo antirrebotelds r16,unidades ;r16 <- unidadeslds r17,decenas ;r17 <- decenasinc r16 ;incrementamos el valor de r16 q

ue contiene el valor de unidadescpi r16,10 ;r16<10?brmi salir ;si es menor, salimos, sino...clr r16 ;r16 <- 0, unidades a ceroinc r17 ;incrementamos r17 que contiene el valor

 de decenascpi r17,2 ;r17<2?brmi salir ;si es menor, salimos, sino...clr r17 ;r17 <- 0,decenas a cero

decremento:;rcall delay25m ;retardo antirrebotelds r16,unidades ;r16 <- unidadeslds r17,decenas ;r17 <- decenasdec r16 ;decrementamos el valor de r16 q

ue contiene el valor de unidadescpi r16,0 ;r16<0?

brmi salir ;si es menor, salimos, sino...clr r16 ;r16 <- 0, unidades a cerodec r17 ;incrementamos r17 que contiene el valor

 de decenascpi r17,2 ;r17<2?brmi salir ;si es menor, salimos, sino...clr r17 ;r17 <- 0,decenas a cero

salir:sts unidades,r16 ;unidades <- r16sts decenas,r17 ;decenas <- r17rjmp multi ;volvemos a multiplexar, con los nuevos

datos 

multiplexar:sbi portc,0 ;apagamos ambossbi portc,1 ;displayslds r16,unidades ;r16 <- unidadeslds r15,decenas ;r17 <- decenasmov r28,r30 ;copiamos la dirección donde estanmov r29,r31 ;los datos del displayadd r30,r16 ;se suma el valor de unidades, para desp

lazarse en la tablalpm r16,Z ;r16 <- (Z)mov r30,r28 ;r30 <- r28add r30,r15 ;se suma el valor de decenas, para despl

azarse en la tabla

lpm r15,Z ;r17 <- (Z)mov r30,r28 ;r30 <- r28out portd,r16 ;se muestra en el display de unidades, e

l valor correspondientecbi portc,1 ;enciende el display correspondientercall delay1m ;tiempo de retardo para que sea visible

al ojosbi portc,1 ;se apaga el display encendido anteriorm

entenop nop nop nop nop nop nop nop ;apagando transistor, requiere un tiempo

Page 3: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 3/6

 para apagarseout portd,r15 ;se muestra en el display de decenas, el

 valor correspondientecbi portc,0 ;enciende el display correspondientercall delay1m ;tiempo de retardo para que sea visible

al ojosbi portc,0 ;se apaga el display encendido anteriorm

enteret

 ; =============================; delay loop generator; 100000 cycles:; -----------------------------; delaying 99990 cycles:delay25m:  ldi R17, $A5WGLOOP0: ldi R18, $C9WGLOOP1: dec R18  brne WGLOOP1  dec R17  brne WGLOOP0; -----------------------------; delaying 9 cycles:

  ldi R17, $03WGLOOP2: dec R17  brne WGLOOP2; -----------------------------; delaying 1 cycle:  nop  ret; =============================

; =============================; delay loop generator; 4000 cycles:; -----------------------------

; delaying 3999 cycles:delay1m:  ldi R17, $1FWGLOOP00: ldi R18, $2AWGLOOP11: dec R18  brne WGLOOP11  dec R17  brne WGLOOP00; -----------------------------; delaying 1 cycle:  nop

  ret; =============================

Page 4: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 4/6

/* * Display7Seg.asm * * Created: 13/09/2015 17:08:36 * Author: Mauri */; Conexiones: C0 -> Anodo Display 1; C1 -> Anodo Display 2; C2 - Pulsador Subida; C3 - Pulsador Bajada; Puerto B -> Displays de 7 sgmentos de cátodo común.;-----------------------------------------------------------------

; Registros: r5-r14 -> Registros para almacenar datos de displays.; r16 -> registro temporal para pasar datos.; r17 -> registro de carga de datos.; r30 -> registro apuntador.; r22-r24 -> registros para retardo.;-----------------------------------------------------------------.equ unidades=$60.equ decenas=$61

;reset-vector address $0000.org $00jmp inicio ;va al inicio con un RESET

seg7: ;.db 0x80,0xf1,0x48,0x60,0x31,0x22,0x02,0xb0,0x00,0x20.db 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F

;PROGRAMA PRINCIPALinicio:;Cargar el puntero de pila;------------------------- ldi r16,high(ramend) ;Configuracion de... out sph,r16 ldi r16,low(ramend) out spl,r16 ;...la pila: Stack: $045F=RAMEND;Configuracion de los puertos a utilizar;---------------------------------------

 ser r16 out ddrd, r16 ;solo puerto d de salida para displays ldi r16,$F3 ;puerto c 0b1110011 out ddrc,r16 clr r16 sts unidades,r16 ;unidades=0 sts decenas,r16 ;decenas=0 ldi r30,low(seg7) ;se carga en Z ldi r31,high(seg7) ;dirección en flash de los datos del display ldi r16,2 ;r16=2

Page 5: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 5/6

 add r30,r16 ;adecua el puntero Z para que apunte a bytes

 loop:rcall multiplexar ;mostramos datos, hasta que se suelte el

 pulsadorsbis pinc,2 ;pin C2 esta todavía siendo pulsado?rjmp incremento ;si, está pulsado, volvemos a generar reta

rdo, sino se salta instrucciónrcall multiplexar ;mostramos datos, hasta que se suelte el

 pulsadorsbis pinc,3 ;pin C3 esta todavía siendo pulsado?rjmp decremento ;si, está pulsado, volvemos a generar reta

rdo, sino se salta instrucción

multi:rcall multiplexar ;vamos a visualizar los datos en los dis

playsrjmp loop ;bucle infinito

;Inicio del conteo ascendenteincremento: lds r16,unidades ;r16=unidaes lds r17,decenas ;r17=decenas inc r16 ;incremento valor r16

 cpi r16,$A ;r16 menor a 10? brmi sale ;si es menor sale sino continua siguiente instrucción clr r16 ;unidades a 0 inc r17 ;incrementamos valor r17 cpi r17,$2 ;r17 menor a 2? brmi sale ;si es menor sale sino continua siguiente instrucción clr r17 ;decenas a 0

 ;Inicio conteo descendentedecremento: lds r16,unidades ;r16=unidaes

 lds r17,decenas ;r17=decenas dec r16 ;decremento valor r16 cpi r16,0 ;r16 menor a 0? brmi sale ;si es menor sale sino continua siguiente instrucción clr r16 ;unidades a 0 dec r17 ;decremento valor r17 cpi r17,0 ;r17 menor a 0? brmi sale ;si es menor sale sino continua siguiente instrucción clr r17 ;decenas a 0

 multiplexar:

sbi portc,0 ;apagamos ambossbi portc,1 ;displayscbi portc,2cbi portc,3lds r16,unidades ;r16 <- unidadeslds r15,decenas ;r17 <- decenasmov r28,r30 ;copiamos la dirección donde estanmov r29,r31 ;los datos del displayadd r30,r16 ;se suma el valor de unidades, para desp

lazarse en la tabla

Page 6: Pruebas Displays

7/24/2019 Pruebas Displays

http://slidepdf.com/reader/full/pruebas-displays 6/6

lpm r16,Z ;r16 <- (Z)mov r30,r28 ;r30 <- r28add r30,r15 ;se suma el valor de decenas, para despl

azarse en la tablalpm r15,Z ;r17 <- (Z)mov r30,r28 ;r30 <- r28out portd,r16 ;se muestra en el display de unidades, e

l valor correspondientecbi portc,1 ;enciende el display correspondientercall delay1m ;tiempo de retardo para que sea visible

al ojosbi portc,1 ;se apaga el display encendido anteriorm

entenop nop nop nop nop nop nop nop ;apagando transistor, requiere un tiempo

 para apagarseout portd,r15 ;se muestra en el display de decenas, el

 valor correspondientecbi portc,0 ;enciende el display correspondientercall delay1m ;tiempo de retardo para que sea visible

al ojosbi portc,0 ;se apaga el display encendido anteriorm

enteret

sale: sts unidades,r16 ;unidades <- r16sts decenas,r17 ;decenas <- r17rjmp multi ;volvemos a multiplexar, con los

 nuevos datos delay25m:  ldi R17, $A5WGLOOP0: ldi R18, $C9WGLOOP1: dec R18  brne WGLOOP1  dec R17  brne WGLOOP0

; -----------------------------; delaying 9 cycles:  ldi R17, $03WGLOOP2: dec R17  brne WGLOOP2; -----------------------------; delaying 1 cycle:  nop  ret; =============================

delay1m:  ldi R17, $1F

WGLOOP00: ldi R18, $2AWGLOOP11: dec R18  brne WGLOOP11  dec R17  brne WGLOOP00; -----------------------------; delaying 1 cycle:  nop

  ret; =============================