En/Je/On 2015-11-03 17:00, [email protected] [forth-es] escribió / skribis / wrote :
Esta versión es más legible que la primera. > ( programa el 8255 como puertos de salida ) > : ppi_inic 128 99 pc! ; La palabra `ppi_inic` no es usada por otra. ¿Es correcto? ¿Es un comando de la interfaz de usuario? > ( ponemos el puerto B a 0 ) > : reposo 0 97 pc! ; > ( temporizacion entre cada pulso del motor , 50 > milisegundos ) > : temp 50 ms ; Se me ocurre que, ya que prefieres usar nombres en español, `pausa` o `retraso` o `espera` serían más claros en este caso, porque `temp` recuerda a «temporal», «provisional». > ( damos un nombre a la salida/puerto para mover el motor > ,con temporización entre cada pulso) > : pulso ( b – ) 97 pc! temp ; > ( para que el motor de un paso enviamos por el puerto la > secuencia de bits 1 2 4 8 respectivamente ) > : paso 1 pulso 2 pulso 4 pulso 8 pulso ; > ( ahora creamos un nombre para que el motor de una vuelta > completa , es un motor de 48 pulsos/vuelta , finalmente > ponemos el motor en reposo ) > 48 constant pasos/vuelta > : vuelta pasos/vuelta 0 do paso loop reposo ; > ( n rotaciones da n vueltas al motor ) > : rotaciones ( n – ) 0 do vuelta loop ; En DX-Forth tienes `?do`. Es recomendable usarlo siempre en lugar de `do`; es más seguro, porque el bucle no se ejecuta cuando los dos parámetros son iguales. En la librería Afera para Abersoft Forth sin embargo no lo implementé, pero cuando llegue el momento puedes simularlo con una condición que rodee el bucle: : (rotaciones) ( n -- ) 0 do vuelta loop ; : rotaciones ( n -- ) -dup if (rotaciones) then ; `-dup` hace en fig-Forth lo que `?dup` en los sistemas posteriores. En Spectrum Forth-83 sí existe `?do`. Por lo demás, no veo ningún fallo en el código. -- Marcos Cruz http://programandala.net
