Veamos un programa diferente al propuesto para rotar el encendido de 4 leds. Este programa sirve para encender 8 leds en sucesi n de la figura 3 y con algunos cambios para excitar las llaves anal gicas del generador de escalera que acabamos de analizar:
En la primera sentencia se observa la declaraci n del microprocesador utili- zado. Como puede observar en lugar de utilizar el 16C84, como lo hicimos has- ta ahora, utilizamos el 16F84. La diferencia entre ambos radica en el tipo de memoria utilizada. El 16F84 contiene una memoria m s r pida del tipo EE- PROM FLASH que se puede reescribir un mill n de veces. El almacenamiento de esta informaci n est garantizado por el fabricante por un lapso mayor a 40 a os con el dispositivo sin alimentaci n. El 16C84 es totalmente similar, pero contiene una memoria EEPROM com n, de acceso m s lento y con menores garant as de mantenimiento de la informaci n grabada. Tambi n se puede uti- lizar el 16F83 similar al 16F84 pero con la mitad de capacidad de memoria y por lo tanto m s barato. Cualquiera de los tres integrados puede alimentarse con tensiones de 4 a 6V.
En el sector entre l neas punteadas, se declara donde se van a ubicar 3 va- riables que utiliza el programa, llamadas ptob, j y k. Aqu se puede observar que la posici n de memoria puede declararse de diferentes modos. En el primer rengl n s lo escribimos 06. Cuando no se coloca el n mero entre acentos, ni se coloca una letra adelante, se interpreta que se trata de un n mero hexade- cimal. Es decir que el programa ensamblador (el MPASM) interpreta un n me- ro "por defecto" como si fuera hexadecimal.
En el segundo y tercer rengl n se utiliza un criterio diferente. La letra H sig- nifica que el n mero entre acentos ser hexadecimal; en este caso particular se utilizar n las posiciones de memoria 1F y 1E para guardar a las variables j y k. En la carpeta reset se ubica la parte del programa que se ejecuta s lo cuan-
do se presiona el pulsador de reset. Se trata de 5 renglones o sentencias de las cuales la primera ubica el control en la posici n de memoria de programa cero. En la segunda se carga el registro de trabajo w con el n mero cero. Observe que en este caso utilizamos otra notaci n diferente; la letra B indica que a con- tinuaci n se colocar un n mero binario de 8 d gitos (el PIC empleado s lo puede manejar hasta 8 bits). En la siguiente sentencia se vuelca el contenido del registro de trabajo en ptob, que en el copete se declar ubicado en la posi- ci n de memoria 06. Esta posici n de memoria controla la disposici n del puer- to "B" como de salida (aclaramos que el uso del comando TRIS generar un mensaje de precauci n pero que por ahora no debemos tener en cuenta).
En la sentencia 4 de la carpeta "reset", se vuelve a cargar el registro de tra- bajo con el binario "00000001"; esto no implica que se realice ninguna modifi- caci n en la disposici n de puertos, ya que una vez cargada la posici n de me- moria, sta no se modificar hasta que se produzca un reset. El registro w se utiliza para cargar informaci n nueva y ubicarla luego donde se desea. Por ejemplo, en la sentencia 5 se descarga w en el puerto de salida B, que con
TRIS se declar como de salida. Esto significa que se va a encender el led ubi-
cado en la pata 6 del mismo (B0). Aqu termina la carpeta reset y no se volve- r a ella hasta que se oprima reset o se desconecte y reconecte al microproce- sador.
La siguiente carpeta se llama "mciclo" y comienza con el comando "rlf" uti- lizado para mover posteriormente el bit puesto en uno del puerto B, una posi- ci n hacia la izquierda. De cualquier modo al ejecutar rlf no se producir toda- v a el cambio de estado en las salidas. En la segunda sentencia de la carpeta
"mciclo" se carga el registro de trabajo, pero ahora utilizamos otra notaci n di-
ferente. La letra D indica que vamos a cargar un n mero decimal y luego entre acentos decimos que ese n mero ser el 50 (esto es adecuado para usar el mi- croprocesador como generador de onda en escalera, pero debe cambiarse por 500 si se va a utilizar como secuenciador; como vemos este n mero determina la duraci n de los escalones o el tiempo de encendido de cada led). En la ter- cera sentencia se descarga el n mero 50 en la variable "j" que antes se de- clar ubicada en la posici n de memoria 1F.
Aqu empieza la carpeta "jciclo" de una sola sentencia, en donde el mismo n mero 50 se vuelca en la variable "k" que antes se declar ubicada en la po- sici n de memoria 1E.
La siguiente carpeta llamada "kciclo" se utilizar para decrementar estos n - meros 50 ubicados en 1F y en 1E de modo de establecer una demora necesa- ria para que los escalones o el encendido de los leds dure el valor que noso- tros impongamos.
comando "decfsz" es del tipo condicional; si el valor de k es superior a cero (1 a 50 en nuestro caso), el control del programa va a la sentencia siguiente que es incondicional y reenv a el control de programa a la carpeta "kciclo". Cuan- do k llega al valor cero, env a el control a la sentencia posterior a "goto", ob- viando el bucle "kciclo". En una palabra que los dos primeros renglones de la carpeta "kciclo" decrementan el n mero 50 hasta cero y como cada sentencia dura 1 seg, ya que estamos usando un cristal de 4MHz, podemos calcular que este bucle del programa dura 100 seg.
En la tercera sentencia se decrementa la variable "j", del mismo modo que se hiciera con "k" pero se retorna a la carpeta "jciclo" para generar un nuevo bu- cle de 100 seg. Esto implica que los dos bucles tienen una duraci n de 100 x 100 seg, es decir: 10.000 seg o 10mseg (con 500, cada bucle dura 1000 seg y el producto es 1.000.000 de seg o 1seg). Transcurrido este tiempo el con- trol pasa a la quinta sentencia de la carpeta "kciclo" que es una sentencia in- condicional goto que env a el control a la carpeta "mciclo". Reci n en este mo- mento se produce la rotaci n de ptob, se apaga el primer led y se enciende el siguiente por otro lapso de tiempo de 1seg.
El programa ir cambiando el binario acumulado en el puerto B, correr el 1 a la izquierda hasta que salga del registro y vuelva a ingresar por la derecha.