Documentos de Académico
Documentos de Profesional
Documentos de Cultura
/*
* Clasificadora_de_huevos.asm
*
* Created: 13/10/2013 14:47:37
* Author: vivia_000
*/
.DEF TEMPO=R16
.DEF PEQUENOS=R17
.DEF MEDIANOS=R18
.DEF GRANDES=R19
.DEF CUBETA1=R20
.DEF CUBETA2=R21
.DEF CUBETA3=R22
.DSEG
PEQUENOS1: .BYTE 1
PEQUENOS2: .BYTE 1
MEDIANOS1: .BYTE 1
MEDIANOS2: .BYTE 1
GRANDES1: .BYTE 1
GRANDES2: .BYTE 1
.CSEG
.ORG 0X00
RJMP INICIO
.ORG 0X02
RJMP HUEVOS_PEQUENOS
.ORG 0X04
RJMP HUEVOS_MEDIANOS
.ORG 0X06
RJMP HUEVOS_GRANDES
INICIO:
LDI TEMPO,0B11111111
OUT DDRA,TEMPO
OUT DDRC,TEMPO
OUT PORTB,TEMPO
OUT PORTD,TEMPO
LDI TEMPO,0B00000000
OUT DDRB,TEMPO
OUT DDRD,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO, 0B1110111
OUT MCUCR,TEMPO
LDI TEMPO,HIGH(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO
LDI TEMPO,0B00101010
STS EICRA,TEMPO
LDI TEMPO,0B00000111
OUT EIMSK,TEMPO
OUT EIFR,TEMPO
SEI
LAZO:
OUT PORTA,R24
OUT PORTC,R26
RJMP LAZO
HUEVOS_PEQUENOS:
PUSH R16
IN R16,SREG
PUSH R16
INC PEQUENOS
CPI PEQUENOS,12
BREQ CUBETA_PEQUENOS
POP R16
OUT SREG,R16
POP R16
RETI
CUBETA_PEQUENOS:
CLR PEQUENOS
ADIW R25:R24,1
STS PEQUENOS1,R24
STS PEQUENOS2,R25
POP R16
OUT SREG,R16
POP R16
RETI
HUEVOS_MEDIANOS:
PUSH R16
IN R16,SREG
PUSH R16
INC MEDIANOS
CPI MEDIANOS,12
BREQ CUBETA_MEDIANOS
POP R16
OUT SREG,R16
POP R16
RETI
CUBETA_MEDIANOS:
CLR MEDIANOS
ADIW R27:R26,1
STS MEDIANOS1,R26
STS MEDIANOS2,R27
POP R16
OUT SREG,R16
POP R16
RETI
HUEVOS_GRANDES:
PUSH R16
IN R16,SREG
PUSH R16
INC GRANDES
CPI GRANDES,12
BREQ CUBETA_GRANDES
POP R16
OUT SREG,R16
POP R16
RETI
CUBETA_GRANDES:
CLR GRANDES
ADIW R29:R28,1
STS GRANDES1,R28
STS GRANDES2,R29
POP R16
OUT SREG,R16
POP R16
RETI
Una maquina contadora de monedas en un banco tiene una clasificadora mecánica. Las
monedas ya clasificadas caen por uno de los 6 tubos disponibles, y que corresponden a: un dólar
(100 centavos), 50 centavos, 25 centavos, 10 centavos, 5 centavos y un centavo. Cada uno de
los tubos tiene un sensor que baja momentáneamente a 0L cuando pasa por allí una moneda.
Escribir un programa que lleve cuenta en binario 32 bits el monto total en centavos todas las
monedas que han pasado. Este valor se almacenara en 4 localidades consecutivas de la SRAM.
Usar interrupciones
/*
* Contador_de_monedas.asm
*
* Created: 12/10/2013 8:21:02
* Author: vivia_000
*/
.DEF TEMPO=R16
.DEF CONT1=R25
.DEF CONT2=R26
.DEF CONT3=R27
.DEF CONT4=R28
.DEF ANTE=R17
.DEF AUX=R18
.DEF AUX1=R19
.DEF NUMA=R20
.DEF NUMB=R21
.DEF DECENAS=R22
.DEF CENTENAS=R23
.DEF MILES=R24
.CSEG
.ORG 0X00
RJMP INICIO
.ORG 0X08
RJMP MONEDAS
INICIO:
LDI TEMPO,0B00000000
OUT DDRA,TEMPO
LDI TEMPO,0B11111111
OUT DDRC,TEMPO
OUT DDRB,TEMPO
OUT DDRD,TEMPO
LDI TEMPO,0B11111111
OUT PORTA,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO
LDI TEMPO,HIGH(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO
LDI TEMPO,0B00000001
STS PCICR,TEMPO
LDI TEMPO,0B00111111
STS PCMSK0,TEMPO
SEI
IN ANTE,PINA
LAZO:
OUT PORTB,CONT1
OUT PORTC,CONT2
OUT PORTD,CONT3
RJMP LAZO
MONEDAS:
PUSH R16
IN R16,SREG
PUSH R16
IN TEMPO,PINA
EOR TEMPO,ANTE
IN ANTE,PINA
SBRC TEMPO,0
RJMP CENTAVOS_100
SBRC TEMPO,1
RJMP CENTAVOS_50
SBRC TEMPO,2
RJMP CENTAVOS_25
SBRC TEMPO,3
RJMP CENTAVOS_10
SBRC TEMPO,4
RJMP CENTAVOS_5
SBRC TEMPO,5
RJMP CENTAVOS_1
RJMP RETORNO
CENTAVOS_100:
SBIC PINA,0
RJMP RETORNO
LDI AUX,100
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
CENTAVOS_50:
SBIC PINA,1
RJMP RETORNO
LDI AUX,50
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
CENTAVOS_25:
SBIC PINA,2
RJMP RETORNO
LDI AUX,25
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
CENTAVOS_10:
SBIC PINA,3
RJMP RETORNO
LDI AUX,10
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
CENTAVOS_5:
SBIC PINA,4
RJMP RETORNO
LDI AUX,5
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
CENTAVOS_1:
SBIC PINA,5
RJMP RETORNO
LDI AUX,1
ADD CONT1,AUX
CLR AUX
ADC CONT2,AUX
ADC CONT3,AUX
ADC CONT4,AUX
RJMP RETORNO
RETORNO:
POP R16
OUT SREG,R16
POP R16
RETI
/*
* Prueba_2__ejercicio1.asm
*
* Created: 07/10/2013 20:59:50
* Author: vivia_000
*/
.DEF TEMPO=R16
.DEF AUX=R17
.DEF CONT=R18
.DSEG
DIG0: .BYTE 1
DIG1: .BYTE 1
DIG2: .BYTE 1
DIG3: .BYTE 1
DIG4: .BYTE 1
DIG5: .BYTE 1
BCD0: .BYTE 1
BCD1: .BYTE 1
BCD2: .BYTE 1
BCD3: .BYTE 1
BCD4: .BYTE 1
BCD5: .BYTE 1
.CSEG
.ORG 0X0000
LDI TEMPO,0B00000000
OUT DDRA,TEMPO
OUT DDRB,TEMPO
LDI TEMPO,0B11111111
OUT DDRC,TEMPO
OUT PORTA,TEMPO
OUT PORTB,TEMPO
LDI TEMPO,0B11111111
OUT DDRD,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO
INICIO:
LDI TEMPO,4
STS DIG0,TEMPO
LDI TEMPO,3
STS DIG1,TEMPO
LDI TEMPO,9
STS DIG2,TEMPO
LDI TEMPO,0
STS DIG3,TEMPO
LDI TEMPO,1
STS DIG4,TEMPO
LDI TEMPO,6
STS DIG5,TEMPO
CALL BCD_7SEG
CALL BARRIDO
RJMP INICIO
; CONFIGURAR STACK POINTER
LDI TEMPO,HIGH(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO
BCD_7SEG:
PUSH R16
PUSH R17
PUSH ZL
PUSH ZH
PUSH XL
PUSH XH
PUSH YL
PUSH YH
LDI YH,HIGH(DIG0)
LDI YL,LOW(DIG0)
LDI XH,HIGH(BCD0)
LDI XL,LOW(BCD0)
LDI R17,6
BCD_7SEG1:
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
LD R16,Y+
ADD ZL,R16
CLR R16
ADC ZH,R16
LPM R16,Z
ST X+,R16
DEC R17
BRNE BCD_7SEG1
POP YH
POP YL
POP XH
POP XL
POP ZH
POP ZL
POP R17
POP R16
RET
;BARRIDO
BARRIDO:
PUSH R16
PUSH R17
PUSH R18
PUSH XH
PUSH XL
LDI R16,6
LDI XH,HIGH(BCD0)
LDI XL,LOW(BCD0)
SEC
LDI R18,0B11111110
SER R17
OUT PORTC,R17
OTRO_DIG:
OUT PORTD,R18
LD R17,X+
OUT PORTC,R17
CALL RETARDO
SER R17
OUT PORTC,R17
ROL R18
DEC R16
BRNE OTRO_DIG
POP XL
POP XH
POP R18
POP R17
POP R16
RET
RETARDO:
PUSH R16
LDI R16,10
LAZO_RETARDO:
NOP
DEC R16
BRNE LAZO_RETARDO
POP R16
RET
TABLA_7SEG:
.db 0b1000000,0b1111001 ;0,1
.db 0b0100100,0b0110000 ;2,3
.db 0b0011001,0b0010010 ;4,5
.db 0b0000010,0b1111000 ;6,7
.db 0b0000000,0b0010000 ;8,9
.DEF TEMPO=R16
.DEF TECLA=R17
.DEF ANTE=R18
.DEF COLUMNA=R19
.DEF FILA=R20
.DEF AUX=R21
.DEF AUX1=R22
.DSEG
DIG0: .BYTE 1
.CSEG
.ORG 0X00
LDI TEMPO,0B00000000
OUT DDRB,TEMPO
OUT DDRD,TEMPO
LDI TEMPO,0B11111111
OUT PORTA,TEMPO
OUT PORTB,TEMPO
OUT PORTD,TEMPO
OUT DDRC,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO
INICIO:
LDI TECLA,16
LDI ANTE,16
BARRIDO:
BARRIDO_FILAS:
LDI TEMPO,0B00001111
OUT DDRA,TEMPO
LDI TEMPO,0B11110000
OUT PORTA,TEMPO
SBIS PINA,4
LDI COLUMNA,0
SBIS PINA,5
LDI COLUMNA,1
SBIS PINA,6
LDI COLUMNA,2
SBIS PINA,7
LDI COLUMNA,3
BARRIDO_COLUMNAS:
LDI TEMPO,0B11110000
OUT DDRA,TEMPO
LDI TEMPO,0B00001111
OUT PORTA,TEMPO
SBIS PINA,0
LDI FILA,0
SBIS PINA,1
LDI FILA,1
SBIS PINA,2
LDI FILA,2
SBIS PINA,3
LDI FILA,3
CALCULO:
LDI AUX1,4
MUL FILA,AUX1
MOV FILA,R0
ADD COLUMNA,FILA
MOV TECLA,COLUMNA
STS DIG0,TECLA
CP TECLA,ANTE
BREQ BARRIDO
MOV ANTE,TECLA
CPI TECLA,16
BREQ BARRIDO
DESPLIEGUE:
LDI ZH,HIGH(TABLA<<1)
LDI ZL,LOW(TABLA<<1)
ADD ZL,TECLA
CLR TECLA
ADC ZH,TECLA
LPM AUX,Z
OUT PORTC,AUX
CLR TECLA
RJMP INICIO
TABLA:
.DB 0b00111111,0b00000110
.DB 0b01011011,0b01001111
.DB 0b01100110,0b01101101
.DB 0b01011111,0b00000111
.DB 0b01111111,0b01100111
.DB 0b01110111,0b01111100
.DB 0b00111001,0b01011110
.DB 0b01111001,0b01110001
En un salón de juego de bolos se desea construir una maquina que determine
cuantos bolos (pines) han quedado en pie. El juego tiene diez bolos y luego de
lanzada la bola baja un dispositivo con un interruptor que se cierra si el bolo
quedo parado(enviando un 1La una entrada en un ATMega164p), o permanece abierto
enviando un 0L si esta caído. Escribir el programa que cuente cuantos bolos han
quedado de pie y lo muestre en un display de 7 segmentos si el numero es entre 0
y 9, o enciende un LED y presente el cero en el display si han quedado los diez
bolos de pie. Los diez interruptores están conectados de la siguiente manera:
ocho en el puertoA, y dos en los bits menos significativos del puerto B. El
display esta conectado en los 7 bits menos significativos del puertoC, y el LED
en el bit mas significativo del mismo puerto.
/*
* Automatizar__juego.asm
*
* Created: 14/10/2013 8:28:25
* Author: vivia_000
*/
.DEF TEMPO=R16
.DEF AUX=R17
.DEF CONT=R18
.ORG 0X0
RJMP INICIO
.ORG 0X08
RJMP JUEGO
INICIO:
LDI TEMPO,0B00000000
OUT DDRA,TEMPO
LDI TEMPO,0B11111111
OUT DDRB,TEMPO
OUT DDRD,TEMPO
OUT PORTA,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO
LDI TEMPO,HIGh(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO
LDI TEMPO,0B00000001
STS PCICR,TEMPO
LDI TEMPO,0B00000111
STS PCMSK0,TEMPO
LAZO:
CPI CONT,9
BREQ TABLA2
CPI CONT,10
BREQ TABLA3
TABLA1:
LDI ZH,HIGH(TABLA<<1)
LDI ZL,LOW(TABLA<<1)
ADD ZL,CONT
CLR AUX
ADC ZH,AUX
LPM AUX,Z
OUT PORTB,AUX
RJMP LAZO
TABLA2:
LDI AUX,0B11111111
OUT PORTB,AUX
LDI AUX,0B00000001
OUT PORTD,TEMPO
RJMP LAZO
TABLA3:
LDI AUX,0B11111111
OUT PORTB,AUX
LDI AUX,0B00000011
OUT PORTD,AUX
RJMP LAZO
JUEGO:
PUSH R16
IN R16,SREG
PUSH R16
SBIS PINA,0
RJMP FILA1
SBIS PINA,1
RJMP FILA2
SBIS PINA,2
RJMP FILA3
RJMP RETORNO
FILA1:
SBIS PINA,3
SUBI CONT,-0
SBIS PINA,4
SUBI CONT,-1
SBIS PINA,5
SUBI CONT,-0
RJMP RETORNO
FILA2:
SBIS PINA,3
SUBI CONT,-0
SBIS PINA,4
SUBI CONT,-1
SBIS PINA,5
SUBI CONT,-0
RJMP RETORNO
FILA3:
SBIS PINA,3
SUBI CONT,-0
SBIS PINA,4
SUBI CONT,-1
SBIS PINA,5
SUBI CONT,-0
RJMP RETORNO
RETORNO:
POP R16
OUT SREG,R16
POP R16
RETI
TABLA:
.DB 0B00000000,0B00000001
.DB 0B00000011,0B00000111
.DB 0B00001111,0B00011111
.DB 0B00111111,0B01111111
.DB 0B11111111
LETRERO LUMINOSO
.DEF TEMPO=R16
.DEF AUX=R17
.DEF CONT1=R18
.DEF CONT2=R19
.DEF CONT3=R20
.CSEG
.ORG 0X00
LDI TEMPO,0B11111111
OUT DDRC,TEMPO
LDI TEMPO,0B00000000
OUT DDRD,TEMPO
LDI TEMPO,0B11111111
OUT PORTD,TEMPO
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO
LDI TEMPO,HIGH(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO
INICIO:
SBIS PIND,0
RJMP COMPROBAR
RJMP COMPROBAR1
COMPROBAR:
SBIC PIND,1
RJMP FLECHA_DERECHA
RJMP APAGADO
COMPROBAR1:
SBIC PIND,1
RJMP PRENDE_APAGA
RJMP FLECHA_IZQUIERDA
APAGADO:
CLR TEMPO
OUT PORTC,TEMPO
RJMP INICIO
FLECHA_DERECHA:
LDI TEMPO,0B10111110
OUT PORTC,TEMPO
CALL RETARDO
CLR TEMPO
OUT PORTC,TEMPO
CALL RETARDO
RJMP INICIO
FLECHA_IZQUIERDA:
LDI TEMPO,0B01111101
OUT PORTC,TEMPO
CALL RETARDO
CLR TEMPO
OUT PORTC,TEMPO
CALL RETARDO
RJMP INICIO
PRENDE_APAGA:
SER TEMPO
OUT PORTC,TEMPO
CALL RETARDO
CLR TEMPO
OUT PORTC,TEMPO
CALL RETARDO
RJMP INICIO
RETARDO:
PUSH R16
LDI CONT1,2
LAZO1:
LDI CONT2,255
LAZO2:
LDI CONT3,255
LAZO3:
NOP
DEC CONT3
BRNE LAZO3
DEC CONT2
BRNE LAZO2
DEC CONT1
BRNE LAZO1
POP R16
RET
MEDIDOR DE FRECUENCIA
MEDIDOR DE FRECUENCIA
.include "m164pdef.inc"
.def tempo=r16
.def frec=r17
.def aux=r18
.dseg
unidad: .byte 1
decena: .byte 1
.cseg
.org 0x0
rjmp inicio
.org 0x2
rjmp capturar
.org 0x1a
rjmp segundo
inicio:
ldi tempo,low(ramend)
out spl,tempo
ldi tempo,high(ramend)
out sph,tempo
clr tempo
out ddrd,tempo
ser tempo
out ddra,tempo
out ddrc,tempo
out ddrb,tempo
ldi tempo,0b00000010
sts eicra,tempo
ldi tempo,0b00000001
out eimsk,tempo
ldi tempo,0b00000000
sts tccr1a,tempo
ldi tempo,0b00001100
sts tccr1b,tempo
ldi tempo,high(31249)
sts ocr1ah,tempo
ldi tempo,low(31259)
sts ocr1al,tempo
ldi tempo,0b00000010
sts timsk1,tempo
ldi tempo,0b01000010
out tccr0a,tempo
ldi tempo,0b00000100
out tccr0b,tempo
ldi tempo,1
out ocr0a,tempo
sei
lazo:
rjmp lazo
capturar:
push r16
in r16,sreg
push r16
inc frec
pop r16
out sreg,r16
pop r16
reti
segundo:
push r16
in r16,sreg
push r16
subi frec,10
out ocr0a,frec
ldi zl,low(tabla_equivalente<<1)
ldi zh,high(tabla_equivalente<<1)
add zl,frec
clr frec
adc zh,frec
lpm aux,z
clr tempo
decenas:
subi aux,10
brcs seguir1
inc tempo
rjmp decenas
seguir1:
sts decena,tempo
clr tempo
subi aux,-10
unidades:
subi aux,1
brcs seguir2
inc tempo
rjmp unidades
seguir2:
sts unidad,tempo
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
lds tempo,unidad
add zl,tempo
clr tempo
adc zh,tempo
lpm tempo,z
out portc,tempo
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
lds tempo,decena
add zl,tempo
clr tempo
adc zh,tempo
lpm tempo,z
out porta,tempo
clr frec
clr aux
pop r16
out sreg,r16
pop r16
reti
tabla:
tabla_equivalente:
.db 0,5;0,1
.db 10,15;2,3
.db 20,25;4,5
.db 30,35;6,7
.db 40,45;8,9
.db 50,55;10,11
.db 60,65;12,13
.db 70,75;14,15
.db 80,85;16,17
.db 90,95;18,19
.db 100,100
VOLTIMETRO
VOLTIMETRO
.include "m164pdef.inc"
.dseg
entero: .byte 1
decimal1: .byte 1
decimal2: .byte 1
decimal3: .byte 1
.cseg
.def tempo=r16
.def resh=r17
.def resl=r18
.def ls=r19
.def ms=r20
.def cinco=r22
.def diez=r23
.org 0x0
;Constante 5 de referencia de voltaje de 5 voltios
ldi cinco,5
;Constante 10 para poder hacer divisiones con decimales con restas sucesivas
ldi diez,10
;Entrada CAD
ldi tempo,0b00000001
;Salidas BARRIDO
ldi tempo,0b11111111
out ddrb,tempo
out ddrd,tempo
out ddrc,tempo
ldi tempo,0b00000001
sts didr0,tempo
ldi tempo,0b01000000
sts admux,tempo
espera1:
lds tempo,adcsra
sbrc tempo,adsc
rjmp espera1
otro:
ldi tempo,0b11000110
sts adcsra,tempo
espera2:
lds tempo,adcsra
sbrc tempo,adsc
rjmp espera2
lds resl,adcl
lds resh,adch
mul resl,cinco
mov ls,r0
mov ms,r1
mul resh,cinco
add ms,r0
clr tempo
cont_unidades:
subi ls,low(1023)
sbci ms,high(1023)
brcs salir
inc tempo
rjmp cont_unidades
salir:
ldi zl,low(tabla<<1)
add zl,tempo
clr tempo
add zh,tempo
lpm tempo,z
sts entero,tempo
clr tempo
cont_decimal1:
;Con restas sucesivas calcular el valor del primer decimal
subi ls,low(-1023)
sbci ms,high(-1023)
call mult10
clr tempo
cantidad_decimal1:
subi ls,low(1023)
sbci ms,high(1023)
brcs salir1
inc tempo
rjmp cantidad_decimal1
salir1:
ldi zl,low(tabla<<1)
add zl,tempo
clr tempo
add zh,tempo
lpm tempo,z
sts decimal1,tempo
clr tempo
cont_decimal2:
subi ls,low(-1023)
sbci ms,high(-1023)
call mult10
clr tempo
cantidad_decimal2:
subi ls,low(1023)
sbci ms,high(1023)
brcs salir2
inc tempo
rjmp cantidad_decimal2
salir2:
ldi zl,low(tabla<<1)
add zl,tempo
clr tempo
add zh,tempo
lpm tempo,z
sts decimal2,tempo
clr tempo
cont_decimal3:
subi ls,low(-1023)
sbci ms,high(-1023)
call mult10
clr tempo
cantidad_decimal3:
subi ls,low(1023)
sbci ms,high(1023)
brcs salir3
inc tempo
rjmp cantidad_decimal3
salir3:
ldi zl,low(tabla<<1)
clr tempo
add zh,tempo
lpm tempo,z
sts decimal3,tempo
clr tempo
call barrido
rjmp otro
tabla:
barrido:
lds tempo,entero
ori tempo,0b10000000
out portb,tempo
ldi tempo,0b11110111
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
;Muestro Decimal1
lds tempo,decimal1
out portb,tempo
ldi tempo,0b11111011
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
;Muestro Decimal2
lds tempo,decimal2
out portb,tempo
ldi tempo,0b11111101
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
;Muestro Decimal3
lds tempo,decimal3
out portb,tempo
ldi tempo,0b11111110
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
ret
;Esta rutina sirve para multiplicar por 10 un numero de 16 bits, la misma que
será utilizada para encontrar valor de decimales
mult10:
mul ls,diez
mov r2,r0
mov r3,r1
mul ms,diez
add r3,r0
mov ls,r2
mov ms,r3
ret
retardo:
push r16
in r16,sreg
push r16
ldi tempo,255
lazo_retardo:
dec tempo
breq salir_retardo
rjmp lazo_retardo
salir_retardo:
pop r16
out sreg,r16
pop r16
ret
RETARDO 5S
RETARDO5 SEGUNDOS
.include "m164pdef.inc"
.def tempo1=r16
.def tempo2=r17
.def tempo3=r18
.def aux=r19
.def tempo=r20
.def conta=r21
ldi tempo,0b11111111
out ddra,tempo
clr tempo
brne lazo3
dec tempo2
brne lazo2
dec tempo1
brne lazo1
in tempo,pina
com tempo
out porta,tempo
rjmp lazo0
VOLTIMETRO 7 LEDS
voltimetro7 led
.include "m164pdef.inc"
.def tempo=r16
.def resh=r17
.def resl=r18
.def tempo1=r19
.def tempo2=r20
.def cont=r21
.def ls=r23
.def ms=r24
.dseg
mil: .byte 1
cien: .byte 1
decen: .byte 1
unid: .byte 1
digmil: .byte 1
digcien:.byte 1
digdec: .byte 1
diguni: .byte 1
.cseg
ldi tempo,0b11111111
out ddrc,tempo
ldi tempo,0b11111111
out ddrb,tempo
out ddrd,tempo
ldi tempo,low(ramend)
out spl,tempo
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,0b00000001
sts didr0,tempo
ldi tempo,0b01100000
sts admux,tempo
espera1:
lds tempo,adcsra
sbrc tempo,adsc
rjmp espera1
otro:
ldi tempo,0b11000110
sts adcsra,tempo
espera2:
lds tempo,adcsra
sbrc tempo,adsc
rjmp espera2
lds resl,adcl
lds resh,adch
ldi tempo1,20
mul resh,tempo1
call bin_bcd_mul
call bcd_dig_mult
call barrido_mult
lds tempo,digdec
out portc,tempo
rjmp otro
bin_bcd_mul:
mov ls,r0
mov ms,r1
clr tempo
cont_miles:
subi ls,low(1000)
sbci ms,high(1000)
brcs cont_mil1
inc tempo
rjmp cont_miles
cont_mil1:
sts mil,tempo
clr tempo
subi ls,low(-1000)
sbci ms,high(-1000)
cont_cien:
subi ls,low(100)
sbci ms,high(100)
brcs cont_cien1
inc tempo
rjmp cont_cien
cont_cien1:
sts cien,tempo
clr tempo
subi ls,low(-100)
sbci ms,high(-100)
cont_dec:
subi ls,low(10)
sbci ms,high(10)
brcs con_dec1
inc tempo
rjmp cont_dec
con_dec1:
sts decen,tempo
clr tempo
subi ls,low(-10)
mov tempo,ls
sts unid,tempo
clr tempo
ret
bcd_dig_mult:
push zh
push zl
push xh
push xl
push yh
push yl
push tempo
push cont
ldi xl,low(mil)
ldi xh,high(mil)
ldi yl,low(digmil)
ldi yh,high(digmil)
ldi cont,4
bcd_dig_mult0:
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
ld tempo,x+
add zl,tempo
clr tempo
adc zh,tempo
lpm tempo,z
st y+,tempo
dec cont
brne bcd_dig_mult0
pop cont
pop tempo
pop yl
pop yh
pop xl
pop xh
pop zl
pop zh
ret
barrido_mult:
lds tempo,diguni
out portb,tempo
ldi tempo,0b11111110
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
lds tempo,digdec
out portb,tempo
ldi tempo,0b11111101
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
lds tempo,digcien
out portb,tempo
ldi tempo,0b11111011
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
lds tempo,digmil
ori tempo,0b10000000
out portb,tempo
ldi tempo,0b11110111
out portd,tempo
call retardo
ldi tempo,0b11111111
out portd,tempo
ret
retardo:
ldi tempo,255
lazo_retardo:dec tempo
breq salir_retardo
rjmp lazo_retardo
salir_retardo:ret
tabla:
HOLA
.include "m164pdef.inc"
.def conta1=r16
.def conta2=r17
.def conta3=r18
.def conta4=r19
.def tempo=r20
.def ante=r21
.def aux=r22
.dseg
numero1: .byte 1
numero2: .byte 1
numero3: .byte 1
numero4: .byte 1
.cseg
.org 0x0
jmp inicio
jmp jugadores
inicio:
ldi tempo,low(ramend)
out spl,tempo
ldi tempo,high(ramend)
out sph,tempo
;SALIDAS DE DISPLAYS
ldi tempo,0b11111111
out ddra,tempo
out ddrc,tempo
out ddrd,tempo
ldi tempo,0b00000010
sts pcicr,tempo
ldi tempo,0b00001111
sts pcmsk1,tempo
sei
clr conta1
clr conta2
clr conta3
clr conta4
in ante,pinb
programa:
out portd,conta1
call bcd_7seg
call barrido
rjmp programa
jugadores:
push r16
in r16,sreg
push r16
in tempo,pinb
eor tempo,ante
in ante,pinb
sbrc tempo,0
call jugador1
sbrc tempo,1
call jugador2
sbrc tempo,2
call jugador3
sbrc tempo,3
call jugador4
pop r16
out sreg,r16
pop r16
reti
jugador1:
sbrc ante,0
ret
inc conta1
ret
jugador2:
sbrc ante,1
ret
inc conta2
ret
jugador3:
sbrc ante,2
ret
inc conta3
ret
jugador4:
sbrc ante,3
ret
inc conta4
ret
barrido:
lds tempo,numero1;A
out portc,tempo
ldi tempo,0b11111110
out porta,tempo
call retardo
ldi tempo,0b11111111
out porta,tempo
lds tempo,numero2;L
out portc,tempo
ldi tempo,0b11111101
out porta,tempo
call retardo
ldi tempo,0b11111111
out porta,tempo
lds tempo,numero3;O
out portc,tempo
ldi tempo,0b11111011
out porta,tempo
call retardo
ldi tempo,0b11111111
out porta,tempo
lds tempo,numero4;H
out portc,tempo
ldi tempo,0b11110111
out porta,tempo
call retardo
ldi tempo,0b11111111
out porta,tempo
ret
retardo:
push r16
ldi r16,255
retardo_1:
dec r16
brne retardo_1
pop r16
ret
bcd_7seg:
push xl
push xh
push yl
push yh
push zl
push zh
push conta1
push conta2
push conta3
push conta4
push tempo
ldi xl,low(numero1)
ldi xh,high(numero1)
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
mov tempo,conta1
add zl,tempo
lpm tempo,z
st x+,tempo
mov tempo,conta2
add zl,tempo
lpm tempo,z
st x+,tempo
mov tempo,conta3
add zl,tempo
lpm tempo,z
st x+,tempo
mov tempo,conta4
add zl,tempo
lpm tempo,z
st x+,tempo
pop tempo
pop conta4
pop conta3
pop conta2
pop conta1
pop zh
pop zl
pop yh
pop yl
pop xh
pop xl
ret
tabla:
.db 0b00111111,0b00000110
.db 0b01011011,0b01001111