Hola a todos.
Droky estamos en el subforo de Basic :mrgreen:.
On Interrupt 'Define interrupt handler, disable interrupt
If PORTA.4 = 1 Then
cont = cont + 1
Toggle OPTION_REG.INTEDG 'Cambia el flanco de la interrupcion
Endif
If PORTA.1 = 1 Then
cont = cont - 1
Toggle OPTION_REG.INTEDG 'Cambia el flanco de la interrupcion
Endif
INTCON.1 = 0 'Clear interrupt flag
Resume 'Return to main program, enable interrupt ADCON1 = 0x06 'los pin I/O digitales
T1CON.TMR1CS = 0 'Uso la frec interna del micro (en este caso 20MHz)
PIE1.TMR1IE = 1 'activa las interrupciones del timer1
TRISA = %11111111 'declaro porta.0 como entrada
Dim aux As Bit 'Indica del motor que viene para la deceleracion
Dim cont1 As Byte 'Es el contador PRINCIPAL del programa
Dim cont_seg As Byte
INTCON = 0x90 'Enable INTE interrupt
cont1 = 0
cont_seg = 0
TMR1L = 0
TMR1H = 0
End
On Interrupt 'Define interrupt handler, disable interrupt
Toggle OPTION_REG.INTEDG 'Cambia el flanco
'------------------------Motor1
If PORTA.4 = 1 And PORTA.1 = 0 Then
aux = 1
cont1 = cont1 + 1
T1CON.TMR1ON = 1 'Enable timer1
TMR1L = 0
TMR1H = 0
Endif
If PORTA.4 = 0 And PORTA.1 = 0 And aux = 1 And T1CON.TMR1ON = 1 And cont_seg < 0x98 Then 'Cuenta 2 seg con Timer1
cont1 = cont1 + 1
Endif
'------------------------Motor2
If PORTA.1 = 1 And PORTA.4 = 0 Then
aux = 0
cont1 = cont1 - 1
T1CON.TMR1ON = 1 'Enable timer1
TMR1L = 0
TMR1H = 0
Endif
If PORTA.1 = 0 And PORTA.4 = 0 And aux = 0 And T1CON.TMR1ON = 1 And cont_seg < 0x98 Then 'Cuenta 2 seg con Timer
cont1 = cont1 - 1
Endif
'------------------------Paro del Timer1
If PIR1.TMR1IF = 1 Then 'Despues de 2 seg deja de contar el Timer1
cont_seg = cont_seg + 1
PIR1.TMR1IF = 0
If cont_seg >= 0x98 Then 'Despues de 2 seg deja de contar el Timer1(98)
cont_seg = 0x00
T1CON.TMR1ON = 0 'disable Timer1
TMR1L = 0
TMR1H = 0
Endif
Endif
INTCON.1 = 0 'Clear interrupt flag
Resume 'Return to main program, enable interrupt