Paso 6: Se interrumpe para ahorrar energía
Como se mencionó anteriormente, el microprocesador pasará la mayor parte de su tiempo en modo de reposo. (Especialmente mientras está sentado majestuosamente en la chimenea!). En modo sleep, se detiene el oscilador interno, y el dispositivo no consume básicamente ninguna corriente.
Para despertar del modo de espera, necesitamos tener una 'interrupción' ocurrir. Interrupciones pueden deberse de una variedad de fuentes, pero siempre señalan un cambio externo.
El proyecto LED dado que estamos construyendo tiene el pulsador conectado al bit 1 del puerto B (PB0). Este pin es también funciona como entrada 'interrumpir'. Cuando cambia el nivel de voltaje en este pin, se genera una interrupción, haciendo que el PIC para detener lo que estaba haciendo y a hacer otra cosa. Es esta interrupción que hace el PIC despertar de ella del modo de espera.
Interrupciones en el PIC pueden ser 'global' en la naturaleza (habilitación de interrupción Global [GIE] bit set) o localizada. En nuestro ejemplo, nos gustaría continuar ejecutando instrucciones inmediatamente después el comando 'sleep', así que tenemos que asegurar que el bit GIE está claro. Interrupciones globales causan ejecución del programa a rama a posición 4, que es útil para un enfoque más tradicional de interrupción virales que trataremos en posteriores artículos.
Código para implementar la funcionalidad de interrupción sería similar;
MAINLOOP MOVFW PortB; hacer una lectura falsa en Puerto B MOVLW B '0010000'; Deja el bit GIE apagado y permiten la ; Bit de interrupción PB0 MOVWF INTCON; y carga el registro de control de interrupción DORMIR; esperar tranquilamente una interrupción... MOVLW B '00000000'; deshabilitar interrupciones. MOVWF INTCON ; Continuar la ejecución de código (donde esperamos al botón para ser puesto en libertad... ; ; ; ; eventualmente, nosotros goto MAINLOOP, donde hacemos todo otra vez... |
Una cosa que note es que una vez que hemos recibido una interrupción, wake y desactivar inmediatamente cualquier interrupciones más. Solo con nosotros los seres humanos, no hay nada más irritante se interrumpa mientras que ha sido interrumpido. Múltiples niveles de interrupciones pueden causar errores inesperados del programa, por lo que dejamos de cualquier otras interrupciones que se produzcan.
Ahora que hemos examinado cómo implementar la entrada, salida, generación de números aleatorios y las interrupciones, podemos atar todo esto juntos y producir el código que se ejecutará realmente los dados.
Hay una pequeña cantidad de 'pegamento' alrededor de estas funciones para producir código corriente. Te recomiendo que obtener los listados de programas y estudiar para obtener más información.
Si estudias la lista, usted puede encontrar que hay formas más rápidos, más elegantes de hacer lo que se ha hecho. Recuerda que hay realidades comerciales en cuanto al tiempo invertido en la producción de una solución particular, y que algunas veces, no hacer algo el 'cerebro', mucho es realmente más rápido desarrollar. Se trata de un sistema integrado, y en un sistema sencillo como este, el énfasis está en la producción de un resultado, no en la producción del código más elegante disponible. (Ha usted realmente vieron el código en el controlador del horno de microondas...)