Hola, necesito revisar el estado de 6 botones conectados a un regulador de 5v. y activar para cada boton 2 o 3 relevadores. Ademas una entrada analógica para generar una salida analógica por medio de pwm y activar 2 salidas .
El chiste es que se hagan 2 o 3 funciones a la ves sin que se note el brinco entre rutina y rutina.
les adjunto lo que tengo.
gracias de antemano por la ayuda.
El chiste es que se hagan 2 o 3 funciones a la ves sin que se note el brinco entre rutina y rutina.
les adjunto lo que tengo.
gracias de antemano por la ayuda.
Código:
Device = 16F873A
Xtal 4
Adin_Res 10 ' RESOLUCION DE 10 BITS
Adin_Tad FRC ' OSCILADOR RC PARA LA CONVERSION
Adin_Stime 100 ' TUEMPO DE CARGA DE 100u S
Dim incremento As Word
Dim ciclo As Word
Dim Result As Float
Dim Total As Float
Dim X As Byte
Dim Y As Byte
Dim vadc As Word
'salidas
Symbol dira = PORTB.6
Symbol dirb = PORTB.5
Symbol lh = PORTB.4
Symbol hispeed = PORTB.3
Symbol reach = PORTB.0
Symbol side = PORTB.1
Symbol tilt = PORTC.7
Symbol eq = PORTB.2
Symbol af = PORTC.5
Symbol ar = PORTC.4
Symbol contactor = PORTC.6
Symbol acelera = PORTB.7
'entradas
Symbol poten = PORTA.0
Symbol claxon = PORTA.1
Symbol izq = PORTA.2
Symbol der = PORTA.3
Symbol inclina2= PORTA.4
Symbol inclina1 = PORTA.5
Symbol entra = PORTC.0
Symbol sale = PORTC.1
Symbol abajo = PORTC.2
Symbol arriba = PORTC.3
TRISB = %00000000
TRISA = %11111111
TRISC = %00001111
ADCON1 = %10001110
PORTB = 1
PORTA = 0
PORTC = %11110000
GoTo START
START:
GoTo inicio
inicio:
vadc=0
PORTB.0 = 1
PORTB.1 = 1
PORTB.2 = 1
PORTB.3 = 1
PORTB.4 = 1
PORTB.5 = 1
PORTB.6 = 1
PORTB.7 = 0
PORTC = %11110000
PORTA = 0
botones:
PORTB.7 = 0
Chk1: If sale=0 Then
GoTo Chk2 'ChecA BOton 1
Else
reach=0 'activa reach
dira=0 'activa dira
dirb=1
GoTo segundareach1
EndIf 'reviza si se presiona el boton de 2a
Chk2: If entra=0 Then
GoTo Chk3 ' Check Button 2 (Skip to 3 if Not Pressed)
Else
reach=0 'activa reach
dirb=0
dira=1 'activa dirb
GoTo segundareach2 ' Toggle LED if pressed
EndIf
Chk3: If izq=0 Then
GoTo Chk4 ' Check Button 3 (Skip to 1 if Not Pressed)
Else
side=0 'activa reach
dira=0 'activa activa dirA
dirb=1
EndIf
Chk4: If der=0 Then
GoTo Chk5 ' Check Button 1 (Skip to 2 if Not Pressed)
Else
side=0 'activa reach
dirb=0
dira=1 'activa activa dirb
Chk5: If arriba=0 Then Chk6 ' Check Button 2 (Skip to 3 if Not Pressed)
Else contactor =0
EndIf ' Toggle LED if pressed
Chk6: If abajo=0 Then
GoTo Chk7 ' Check Button 3 (Skip to 1 if Not Pressed)
Else
lh=1
EndIf
Chk7: If inclina1=0 Then
GoTo Chk8 ' Check Button 1 (Skip to 2 if Not Pressed)
Else
tilt=0
dira=0
dirb=1
Chk8: If inclina2=0 Then LECTURA ' Check Button 2 (Skip to 3 if Not Pressed)
Else
tilt=0
dirb=0
dira=1
EndIf
GoTo LECTURA
LECTURA:
af=1
ar=1
vadc=0
vadc = ADIn 0
If vadc > 612 Then
GoTo adelante
ElseIf vadc < 412 Then
GoTo atras
Else GoTo inicio
EndIf
adelante:
af = 0
vadc = ADIn 0
ciclo = Abs (vadc+458)
PWM acelera,ciclo,50
GoTo inicio
atras:
ar = 0
vadc=ADIn 0
ciclo = Abs (vadc-458)
PWM acelera,ciclo,50
GoTo inicio
segundareach1: 'rutina para cuando se presiona 2a
If entra=1 Then 'si se presiona el otro boton de reach
reach=0 'activa reach
dira=0 'activa reach
eq=0 'activa 2a velocidad de reach
Else Return 'se regresa a checar si se presiona algun boton
EndIf
segundareach2:
If sale=1 Then 'si se presiona sale
dirb=0
reach=0
eq=0 'activa 2a velocidad de reach
Else Return 'se regresa a checar si se presiona algun boton
EndIf
End
Última edición por un moderador: