saludos a todos
he estado probando un programa que hice para proton basic el cual trata de iluminar leds secuencialmente ordenados en forma circular, cuando la secuencia completa 5 vueltas cambia de sentido de giro, el programa es simple:
el problema es que en proteus no quiere simular, simplemente no ilumina absolutamente naada, no se muestran los estados en los pines del microcontrolador, pero sin embargo si reviso los registros, los registros LATB y LATD (o PORTB y PORTD) si se modifican
Ver el archivo adjunto Ruleta.BMP

no entiendo cual podria ser el error, me dan una mano?
EDIT: ya entendi por que pasa eso, me di cuenta que los puertos se quedan configurados como entradas... lo que no entiendo es por que pasa eso? acaso cuando uno hace esta operacion
PORTB = 01010101
directamente el compilador no lo convertiria a salida mostrando el valor ?
tenia una duda mas , ¿por que no puedo hacer " LEDS << 1 " ?? me sale error al compilar y tengo que ponerlo directamente asi "LEDS = LEDS << 1 "...... y al desplazar el bit hasta el final desaparece, no vuelve al comienzo, ¿hay otro tipo de desplazamiento que vuelva el bit al comienzo?
he estado probando un programa que hice para proton basic el cual trata de iluminar leds secuencialmente ordenados en forma circular, cuando la secuencia completa 5 vueltas cambia de sentido de giro, el programa es simple:
PHP:
Device = 18F4550 'Dispositivo a utilizar
Declare Xtal = 4 'Cristal a utilizar
TRISB = 0
TRISD = 0
Inicio:
Dim LEDS As Word
Dim LEDSbajo As LEDS.LowByte
Dim LEDSalto As LEDS.HighByte
Dim vueltas As Byte 'Variable que cuenta nuemro de vueltas
Dim ciclo As Byte 'Variable que cuenta 16 pasos para una vuelta
Dim sentido As Bit 'Variable que indica la direccion
sentido = %0 'Definiendo el sentido de giro 0=derecha, 1=izquierda
LEDS = 1
PORTB = LEDSbajo
PORTD = LEDSalto
Iteracion:
sentido = sentido + %1
For vueltas = 0 To 4 Step 1 'Contando las vueltas que dio la ruleta
For ciclo = 0 To 15 Step 1 'Contando 16 pasos para completar una vuelta
If sentido = %1 Then '¿En que sentido esta acualmente?
LEDS = LEDS << 1 'Desplazando hacia la izquierda
PORTB = LEDSbajo
PORTD = LEDSalto
DelayMS 200
Else
LEDS = LEDS >> 1 'Desplazando hacia la derecha
PORTB = LEDSbajo
PORTD = LEDSalto
DelayMS 200
EndIf
Next
Next
GoTo Iteracion
End
el problema es que en proteus no quiere simular, simplemente no ilumina absolutamente naada, no se muestran los estados en los pines del microcontrolador, pero sin embargo si reviso los registros, los registros LATB y LATD (o PORTB y PORTD) si se modifican
Ver el archivo adjunto Ruleta.BMP

no entiendo cual podria ser el error, me dan una mano?
EDIT: ya entendi por que pasa eso, me di cuenta que los puertos se quedan configurados como entradas... lo que no entiendo es por que pasa eso? acaso cuando uno hace esta operacion
PORTB = 01010101
directamente el compilador no lo convertiria a salida mostrando el valor ?
tenia una duda mas , ¿por que no puedo hacer " LEDS << 1 " ?? me sale error al compilar y tengo que ponerlo directamente asi "LEDS = LEDS << 1 "...... y al desplazar el bit hasta el final desaparece, no vuelve al comienzo, ¿hay otro tipo de desplazamiento que vuelva el bit al comienzo?
Última edición: