Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microcontroladores
Calificacin
:
+5 R1
+5
51k
R2 R3
10k 10k U1
7
1
3
6
R4 2
10k
4
8
5
AD620
GALGA EXTENSOMETRICA
-5
C3
OSC
RV2 MOTOR 1 A
1u
MOTOR 2 B
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
51%
MOTOR 3 C
7 8 9
E
A A
D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+5v
1k
B B 4 5 6 +5 R2
+5
10k
1 2 3 R1
E
RS
C C +5v
DB4
DB5
DB6
DB7
RW
1k
U1 R2 R3
D D
ON
C 0 = + 10u
9
13
RESET
XTAL1
PC0/SCL
PC1/SDA
PC2/TCK
22
23
24
S1
S2 10k 10k U4
7
1
1
12 25
XTAL2 PC3/TMS
C1 PC4/TDO
26 3
40 27 6
D1 PA0/ADC0 PC5/TDI D1
39 28 2
D2
38
PA1/ADC1 PC6/TOSC1
29
S3 R4
D3 PA2/ADC2 PC7/TOSC2 S4
U1_GND
37
PA3/ADC3 10k
GALGA EXTENSOMETRICA dedo1
4
8
5
36 14
1
7
1
3
6
D2
R8 2
D1
SAVE_ON Send RXD 10k
4
8
5
VT52, VT100, ANSI AD620
LED-GREEN GALGA EXTENSOMETRICA dedo2
TXD
D2 RTS
Xmodem, Ymodem, Zmodem
ADC_ON CTS
+5 R9
LED-BLUE +5
-5 51k
D3
Play_off
R10 R11
LED-RED
10k 10k U6
7
1
3
6
D3
R12 2
10k
4
8
5
GALGA EXTENSOMETRICA dedo3 AD620
-5
/* Proyecto Final
"Life Prosthetics"
Integrantes
Luis Alejandro Morales Linares A01335991
Oscar Antonio Hernandez Blasi A01324474
23/11/16 */
.include "m16def.inc"
.org 0
rjmp main
.org 4
jmp teclado
//----------variables y constantes-------
.equ RS = 0 ;en pin 0
.equ RW = 1 ;en pin 1
.equ E = 2 ;en pin 2
.equ segundalinea = 0xc0
.equ primeralinea = 0x80
//////////////////Escritura en PuertoC/////////////////////////////
WriteDataInstruction4bits://r17
call WaitBusyFlag4bits
cbi portb,E
brts MandaDato
rjmp MandaInst
MandaDato:
ldi r18,0x01
ldi r16, 0b11111111
out ddrb,r16
ldi r16,0xf0
and r16,r17
add r16,r18
out portb,r16
sbi portb,E
cbi portb,E
ldi r16,0xf0
swap r17
and r16,r17
add r16,r18
out portb,r16
sbi portb,E
cbi portb,E
ret
MandaInst:
ldi r16,0xf0
and r16,r17
out portb,r16
sbi portb,E
cbi portb,E
ldi r16,0xf0
swap r17
and r16,r17
out portb,r16
sbi portb,E
cbi portb,E
RET
setpunta:
/////////////////////////////////////////////
call WaitBusyFlag4bits
cbi portb,E
sbi portb,E
cbi portb,E
sbi portb,E
cbi portb,E
RET
///////////////////////////////////////////
setpunta2:
/////////////////////////////////////////////
call WaitBusyFlag4bits
cbi portb,E
sbi portb,E
cbi portb,E
sbi portb,E
cbi portb,E
RET
///////////////////////////////////////////
initLCD4bits:
/////////////////////////////////////////////
call WaitBusyFlag4bits
cbi portb,E
sbi portb,E
cbi portb,E
sbi portb,E
cbi portb,E
///////////////////////////////////////////
/////////////////////////////////////////////
call WaitBusyFlag4bits
cbi portb,E
sbi portb,E
cbi portb,E
sbi portb,E
cbi portb,E
/////////////////////////////////////////
/////////////////////////////////////////////
call WaitBusyFlag4bits
cbi portb,E
sbi portb,E
cbi portb,E
sbi portb,E
cbi portb,E
RET
///////////////////////////////////////////
Config4a2Lineas:
call WaitBusyFlag4bits
cbi portb,E
cbi portb,RS
cbi portb,RW
sbi portb,5
sbi portb,E
cbi portb,E
sbi portb,7
sbi portb,6
cbi portb,5
sbi portb,E
cbi portb,E
RET
LCDinit8bitsTo4bits:
call WaitBusyFlag8bits
cbi portb,E
WaitBusyFlag8bits:
push r17 //Se guarda el dato que posiblemente este siendo usado
LDI R17, 0b00001111
OUT ddrb,r17
BusyFlagCiclo8:
cbi pinb,E //Se pone enable en 0
WaitBusyFlag4bits:
push r17 //Se guarda el dato que posiblemente este siendo usado
LDI R17, 0b00001111
OUT ddrb,r17
BusyFlagCiclo4:
RET
//-------------------------------------Transmite
serial--------------------------------------------//
Transmit:
sbis ucsra, udre
rjmp Transmit
ret
//----------------------------------Escrituras LCD y
serial--------------------------------------//
CerrandoDedo1:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP<<1)
ldi zl,low(LAP<<1)
ldi r21, 16
serial1:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial1
ldi zh,high(Dedo<<1)
ldi zl,low(Dedo<<1)
ldi r21, 16
Dedo1:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Dedo1
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Mensaje3:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Mensaje3
ret
AbriendoDedo1:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP1<<1)
ldi zl,low(LAP1<<1)
ldi r21, 16
serial11:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial11
ldi zh,high(D1<<1)
ldi zl,low(D1<<1)
ldi r21, 16
Dedo2:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Dedo2
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
palabra:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne palabra
ret
CerrandoDedo2:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP2<<1)
ldi zl,low(LAP2<<1)
ldi r21, 16
serial2:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial2
ldi zh,high(D2<<1)
ldi zl,low(D2<<1)
ldi r21, 16
Fer:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Fer
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Panfi:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Panfi
ret
AbriendoDedo2:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP22<<1)
ldi zl,low(LAP22<<1)
ldi r21, 16
serial22:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial22
ldi zh,high(D22<<1)
ldi zl,low(D22<<1)
ldi r21, 16
Equipamiento:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Equipamiento
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
Intel:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Intel
ret
CerrandoDedo3:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP3<<1)
ldi zl,low(LAP3<<1)
ldi r21, 16
serial3:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial3
ldi zh,high(D3<<1)
ldi zl,low(D3<<1)
ldi r21, 16
Avion:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Avion
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
Alex:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Alex
ret
AbriendoDedo3:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAP33<<1)
ldi zl,low(LAP33<<1)
ldi r21, 16
serial33:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serial33
ldi zh,high(D33<<1)
ldi zl,low(D33<<1)
ldi r21, 16
Avion1:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Avion1
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
Alex1:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Alex1
ret
CerrandoMano:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPM<<1)
ldi zl,low(LAPM<<1)
ldi r21, 16
serialM:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialM
ldi zh,high(M<<1)
ldi zl,low(M<<1)
ldi r21, 16
Facil:
set
lpm r17, z+
call WriteDataInstruction4bits
out udr, argument
dec r21
brne Facil
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Oli:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Oli
ret
AbriendoMano:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPM1<<1)
ldi zl,low(LAPM1<<1)
ldi r21, 16
serialM1:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialM1
ldi zh,high(M1<<1)
ldi zl,low(M1<<1)
ldi r21, 16
Coke:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Coke
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Rafa:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Rafa
ret
//---------------------------------------------Rutina de
botones------------------------------------//
Seleccion:
cpi r20, 0
brne Bot1
call CerrandoDedo1
//----------------------PWM-----------------//
ldi r16, high(26)
out ocr1ah, r16
ldi r16, low(26) ;Match DC = 7% = 90
out ocr1al, r16
jmp salgo
Bot1:
//--------------------------Escribimos en LCD----------------------//
cpi r20, 1
brne Bot2
call AbriendoDedo1
//----------------------PWM-----------------//
ldi r16, high(abrir1) ;PWM ab
out ocr1ah, r16
ldi r16, low(abrir1) ;Match DC = 7% = 90
out ocr1al, r16
jmp salgo
Bot2:
cpi r20, 2
brne Bot3
call CerrandoDedo2
//----------------------PWM-----------------//
ldi r16, high(cerrar1) ;PWM ab
out ocr1bh, r16
ldi r16, low(cerrar1) ;Match DC = 7% = 90
out ocr1bl, r16
jmp salgo
Bot3:
cpi r20, 3
brne Bot4
call AbriendoDedo2
//----------------------PWM-----------------//
ldi r16, high(abrir1) ;PWM ab
out ocr1bh, r16
ldi r16, low(abrir1) ;Match DC = 7% = 90
out ocr1bl, r16
jmp salgo
Bot4:
cpi r20, 64
brne Bot5
call CerrandoDedo3
//----------------------PWM-----------------//
ldi r16, cerrar2 ;Valor necesario para DC = 7%
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
jmp salgo
Bot5:
cpi r20, 65
brne Bot6
call AbriendoDedo3
//----------------------PWM-----------------//
ldi r16, abrir2 ;Valor necesario para DC = 7%
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
jmp salgo
Bot6:
cpi r20, 66
brne Bot7
call CerrandoMano
//----------------------PWM-----------------//
ldi r16, high(cerrar1)
out ocr1ah, r16
ldi r16, low(cerrar1) ;Cierra dedo
out ocr1al, r16
ldi r16, high(cerrar1)
out ocr1bh, r16
ldi r16, low(cerrar1)
out ocr1bl, r16
ldi r16, cerrar2 ;Cierra dedo
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
jmp salgo
Bot7:
cpi r20, 67
brne salgo
call AbriendoMano
//----------------------PWM-----------------//
ldi r16, high(abrir1)
out ocr1ah, r16
ldi r16, low(abrir1) ;Abre dedo
out ocr1al, r16
ldi r16, high(abrir1)
out ocr1bh, r16
ldi r16, low(abrir1) ;Abre dedo
out ocr1bl, r16
ldi r16, abrir2 ;Valor para abrir dedo
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
salgo : ret
//Retardo 1s
retardo1s: push r28
ldi r28, 100
ciclo5: call retardo10ms
dec r28
brne ciclo5
pop r28
ret
//retardo 2s
retardo2s: push r27
ldi r27, 200
ciclo10: call retardo10ms
dec r27
brne ciclo10
pop r27
ret
EscrituraLCD:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(Bienvenida<<1)
ldi zl,low(Bienvenida<<1)
ldi r20, 16
Mensaje:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Mensaje
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
Mensaje2:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Mensaje2
ret
LCDSave:
sbi porta, 7
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPG<<1)
ldi zl,low(LAPG<<1)
ldi r21, 22
serialG:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialG
ldi zh,high(G<<1)
ldi zl,low(G<<1)
ldi r21, 16
Rodrigo:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Rodrigo
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Felix:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Felix
ser saveflag
ret
GuardadoLCD:
cbi porta, 7
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPG1<<1)
ldi zl,low(LAPG1<<1)
ldi r21, 22
serialG1:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialG1
ldi zh,high(G1<<1)
ldi zl,low(G1<<1)
ldi r21, 16
Maria:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Maria
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r20, 16
Jose:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r20
brne Jose
ret
Play:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPP<<1)
ldi zl,low(LAPP<<1)
ldi r21, 26
serialP:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialP
ldi zh,high(P<<1)
ldi zl,low(P<<1)
ldi r21, 16
Oscar:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Oscar
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Antonio:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Antonio
ret
sigoguardando1:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPSG<<1)
ldi zl,low(LAPSG<<1)
ldi r21, 26
serialLSG:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialLSG
ldi zh,high(SG<<1)
ldi zl,low(SG<<1)
ldi r21, 16
LALA:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne LALA
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Mensaje10:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Mensaje10
ret
NoMovGuardados:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(LAPSG1<<1)
ldi zl,low(LAPSG1<<1)
ldi r21, 27
serialLSG1:
lpm r16, z+
out udr, r16
call Transmit
dec r21
brne serialLSG1
ldi zh,high(SG1<<1)
ldi zl,low(SG1<<1)
ldi r21, 16
Lupita:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Lupita
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Mensaje101:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Mensaje101
ret
GuanteSelect:
clt
ldi argument, primeralinea ;Colocamos LCD en primera linea
call WriteDataInstruction4bits
ldi zh,high(MG1<<1)
ldi zl,low(MG1<<1)
ldi r21, 27
serialguante:
lpm r15, z+
out udr, r15
call Transmit
dec r21
brne serialguante
ldi zh,high(MG<<1)
ldi zl,low(MG<<1)
ldi r21, 16
Fernanda:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Fernanda
clt
ldi r17, segundalinea
call WriteDataInstruction4bits
ldi r21, 16
Lou:
set
lpm r17, z+
call WriteDataInstruction4bits
dec r21
brne Lou
ret
//---------Programa principal--------------------------------//
main:
//-----------pila--------------------------------------------//
ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16
clr r16
//--------------------------Definicion de puertos---------------//
//Entrada de teclado matricial
sbi portc, 0 ;Pull up interno
sbi portc, 1
sbi portc, 6
sbi portc, 7
sbi ddrc, 2
sbi ddrc, 3
sbi ddrc, 4
sbi ddrc, 5
cbi portc, 2
cbi portc, 3
cbi portc, 4
cbi portc, 5
sbi ddrd, 1
sbi ddrd, 4
sbi ddrd, 5
sbi ddrd, 7
ldi r16, 0b10111111
out portd, r16
//Puerto LCD
ser r16
out ddrb, r16
//LEDs indicadores
sbi ddra, 5
sbi ddra, 6
sbi ddra, 7
//--------------------------Palabras de control-----------------//
ldi r16, 0b10000110 //8bit trama, stop=1bit, paridad=deshab,
asincrono
out ucsrc, r16
ldi r16, 0b00001000 ;Se habilita Tx
out ucsrb, r16
ldi r16, 34 ;9600 baudios para probar con Proteus
/* Cambiar a 14400 que es un valor de 34 */
out ubrrl, r16
//------------------------------ADC------------------------------//
ldi r16,0b00000111
out porta,r16 ;pullup
//------------Interrupciones externas--------------------------//
ldi r16, 0b11000000 ;Se activan interrupciones externas 0 y 1
out gicr, r16
ldi r16, 0b00001110 ;Se activa interrupcion externa 0 por pulso de
bajada y 1 de subida
out mcucr, r16
//--------------------PWM-------------------------------------//
//PWM que mantiene mano abierta en un inicio
ldi r16, high(1025) ;Tope para f=61Hz
out icr1h, r16
ldi r16, low(1025)
out icr1l, r16
//------Establecer LCD---------
call WaitBusyFlag8bits
cbi portb,E
call LCDinit8bitsTo4bits
cbi portb,E
call WaitBusyFlag4bits
cbi portb,E
call Config4a2Lineas
cbi portb,E
cbi portb,E
call initLCD4bits
clt
ldi r17, 0b00001100
call WriteDataInstruction4bits
//----------------------Escritura LCD-----------------------//
call EscrituraLCD
clr movguardados
clr repetirguardados
clr saveflag
sei
fin:rjmp fin
in r20, pinc
andi r20, 0xff ;Protege parte baja por MM74C922
/*cpi r20, 8
brne apagarADC*/
cpi r20, 0
brne Boton1
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo0
inc movguardados
st x+, r20
jmp salir
continuo0:
call Seleccion
jmp salir
Boton1:
cpi r20, 1
brne Boton2
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo1
inc movguardados
st x+, r20
jmp salir
continuo1:
call Seleccion
jmp salir
Boton2:
cpi r20, 2
brne Boton3
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo2
inc movguardados
st x+, r20
jmp salir
continuo2:
call Seleccion
jmp salir
Boton3:
cpi r20, 3
brne Boton4
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo3
inc movguardados
st x+, r20
jmp salir
continuo3:
call Seleccion
jmp salir
Boton4:
cpi r20, 64
brne Boton5
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo4
inc movguardados
st x+, r20
jmp salir
continuo4:
call Seleccion
jmp salir
Boton5:
cpi r20, 65
brne Boton6
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo5
inc movguardados
st x+, r20
jmp salir
continuo5:
call Seleccion
jmp salir
Boton6:
cpi r20, 66
brne Boton7
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo6
inc movguardados
st x+, r20
jmp salir
continuo6:
call Seleccion
jmp salir
Boton7:
cpi r20, 67
brne Bot8
cpi saveflag, 0xff ;Preguntamos por la bandera de guardado, de estar
activa guarda el boton presionado
brne continuo7
inc movguardados
st x+, r20
jmp salir
continuo7:
call Seleccion
jmp salir
Bot8:
/*Boton para activar ADC de guante*/
cpi r20, 128
breq BOTONADC
jmp Bot12
BOTONADC:
push r25
ldi r25, 30
call GuanteSelect
sbi porta, 6
cicloadc:
sbi ADCSRA,ADSC
call wait
sbi adcsra,adif
in r16,ADCL
in r23,ADCH
cpi r23,2
brlo abrirD1
rjmp cerrarD1
seguir:
inc multiplexorADC
out admux,multiplexorADC
sbi ADCSRA,ADSC
call wait
sbi adcsra,adif
in r16,ADCL
in r23,ADCH
cpi r23, 2
brlo abrirD2
rjmp cerrarD2
seguir2:
inc multiplexorADC
out admux,multiplexorADC
sbi ADCSRA,ADSC
call wait
sbi adcsra,adif
in r16,ADCL
in r23,ADCH
cpi r23, 2
brlo abrirD3
rjmp cerrarD3
ex:
call retardo1s
ldi multiplexorADC, 0b11000000
out admux,multiplexorADC
dec r25
brne cicloadc
pop r25
cbi porta, 6
call EscrituraLCD
jmp salir
abrirD1:
ldi r16, high(abrir1) ;PWM ab
out ocr1ah, r16
ldi r16, low(abrir1) ;Match DC = 7% = 90
out ocr1al, r16
rjmp seguir
cerrarD1:
ldi r16, high(26)
out ocr1ah, r16
ldi r16, low(26) ;Match DC = 7% = 90
out ocr1al, r16
rjmp seguir
abrirD2:
ldi r16, high(abrir1) ;PWM ab
out ocr1bh, r16
ldi r16, low(abrir1) ;Match DC = 7% = 90
out ocr1bl, r16
rjmp seguir2
cerrarD2:
ldi r16, high(cerrar1) ;PWM ab
out ocr1bh, r16
ldi r16, low(cerrar1) ;Match DC = 7% = 90
out ocr1bl, r16
rjmp seguir2
abrirD3:
ldi r16, abrir2 ;Valor necesario para DC = 7%
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
rjmp ex
cerrarD3:
ldi r16, cerrar2 ;Valor necesario para DC = 7%
out ocr2, r16
ldi r16, 0b01100110 ;Se carga la palabra de control para PWM con f de
61 Hz
out tccr2, r16
rjmp ex
//--------------------------Boton de guardado----------------------------//
Bot12:
cpi r20, 192
brne Bot13
cpi saveflag, 0xff
breq ApagaEscrituraRAM
call PunteroX
call LCDSave
jmp salir
ApagaEscrituraRAM:
clr saveflag
call GuardadoLCD
jmp salir
Guardaalgo:
cpi repetirguardados, 0
breq sigoaqui
mov movguardados, repetirguardados
call Play
call retardo1s
call PunteroX
iniciaplay1:
ld r20, x+
call retardo2s
call Seleccion
dec movguardados
brne iniciaplay1
sbi porta, 5 ;LED indicador que finaliza la reproduccion de
movimientos
call retardo1s
cbi porta, 5
jmp salir
sigoaqui:
call NoMovGuardados
jmp salir
sigoguardando:
//Despliego error, sigo guardando
call sigoguardando1
salir:
pop r16
out sreg, r16
reti
.org 0x500
Bienvenida:
.db "Sistema Bionico"
.db "Life Prosthetics"
Dedo:
.db " Cerrando "
.db " Dedo 1 "
LAP:
.db "Cerrando Dedo 1 "
D1:
.db " Abriendo "
.db " Dedo 1 "
LAP1:
.db "Abriendo Dedo 1 "
D2:
.db " Cerrando "
.db " Dedo 2 "
LAP2:
.db "Cerrando Dedo 2 "
D22:
.db " Abriendo "
.db " Dedo 2 "
LAP22:
.db "Abriendo Dedo 2 "
D3:
.db " Cerrando "
.db " Dedo 3 "
LAP3:
.db "Cerrando Dedo 3 "
D33:
.db " Abriendo "
.db " Dedo 3 "
LAP33:
.db "Abriendo Dedo 3 "
M:
.db " Cerrando "
.db " Mano "
LAPM:
.db " Cerrando Mano "
M1:
.db " Abriendo "
.db " Mano "
LAPM1:
.db " Abriendo Mano "
G:
.db " Guardando "
.db " Movimientos "
LAPG:
.db "Guardando Movimientos "
G1:
.db " Movimientos "
.db " Guardados "
LAPG1:
.db "Movimientos Guardados "
P:
.db " Reproduciendo "
.db " Movimientos "
LAPP:
.db "Reproduciendo Movimientos "
SG:
.db " Error: Continua"
.db " Guardando Mov "
LAPSG:
.db "Error: Cont Guardando Mov "
SG1:
.db " Error: No Hay "
.db " Mov Guardados "
LAPSG1:
.db "Error: No Hay Mov Guadados "
MG:
.db " Modo Guante "
.db " Seleccionado "
MG1:
.db " Modo Guante Seleccionado "