Paso 4: subrutinas
Algo que usted notará inmediatamente sobre la manera de escribir código puede verse examinando la sección después de la etiqueta "principal:"
Observe que todo está contenido entre la etiqueta de "principales:" en la parte superior y el "rjmp principal" en la parte inferior. Esto significa que no hay escape de esta sección que a través de las declaraciones de "rcall" dentro. Ahora echa un vistazo a una de las declaraciones de rcall, "rcall button_push" Esto nos salta a la sección bajo la etiqueta "button_push"
Puedes ver que esta sección también se encuentra entre una etiqueta y un "ret" para que el PC también está atrapado dentro de aquí también. Esta sección del código se llama una "subrutina" puesto que yo lo llamo desde el bloque principal, ejecuta alguna tarea, y luego "vuelve" a principal en el lugar donde fue llamado. Así utilizando subrutinas como este le permite bloquear el código en que realizar ciertas tareas y volver a donde se les llamaba. Las ventajas de esta forma de codificación son las siguientes:
- Si te encuentras realizando la misma tarea varias veces usted puede solo llamar a la subrutina en lugar de tener el mismo conjunto de comandos que se repiten una y otra. El resultado es un programa más corto que hace lo mismo.
- es mucho más fácil leer el programa y averiguar lo que hace a diferencia del "código espagueti" que algunas personas escriben donde todo es una larga sección que salta alrededor y hacia atrás, hacia adelante y atrás, por todo el lugar hasta que una persona necesita una jarra de whisky sentado junto a él durante la lectura para evitar la locura.
- es mucho más fácil de depurar. Si su programa no funciona y no tienes idea por qué (que es generalmente el caso cuando se escribe en lenguaje ensamblador) puede fácilmente hacer algunos trabajo de detective y aislar el error a una de las subrutinas y luego averiguar desde allí. El resultado es horas de tiempo ahorrado.
Así, verá que utilizar subrutinas "rutinariamente" en mis programas ;)
Ejercicio 1: examinar la subrutina que utilizo para mostrar los valores de los dados por la iluminación por LEDs varios. Verás que estoy realmente flipando con ida y vuelta de un dado al otro. Si cambias los retrasos en la subrutina "Mostrar" se verá este parpadeo. El hecho de que el ojo no puede ver parpadeos que están demasiado rápidos me permite para alimentar dos LED del mismo alambre y solo tirón hacia adelante y hacia atrás muy rápido por lo que el ojo las ve tanto como en todo el tiempo. Así en vez de la necesidad de un puerto de salida para cada LED (para un total de 16 incluyendo el 0V y los puertos de 5V) sólo tenemos 9. ¿Puedes pensar en una mejor manera de hacer esto para que no tengamos que usar 7 de nuestros puertos para alimentar estos dados? ¿"Charlieplexing los LEDs" como yo lo hice en mi "instructivo" de Charlieplexing? ( ¿Que sería la pena a largo plazo con sólo 14 LEDs?
Lo siguiente que vamos a utilizar es "Macros".