¿Por qué debería usarse NOP en el ensamblaje de microcontroladores?
La instrucción NOP se agrega al lenguaje C del microcontrolador porque no hay ninguna declaración vacía en el lenguaje C estándar.
Sin embargo, en la programación de microcontroladores en lenguaje C, a menudo es necesario utilizar varias instrucciones vacías para producir un efecto de retardo breve.
Esto es fácil de implementar en lenguaje ensamblador, solo escribe algunos nops.
En AVR-GCC, se utiliza el siguiente método para incrustar instrucciones de ensamblaje:
asm ("nop; nop; nop; nop;" ::);
En In keil C51, llame directamente a la función de biblioteca:
#include// declara void _nop_(void);
_nop_();// genera una instrucción NOP p>
Información ampliada
La ejecución de la instrucción NOP solo incrementa el contador de programa PC en 1, por lo que ocupa un ciclo de máquina. Ejemplo: MOVLW 0xOF; enviar OFH a W MOVWF PORT_B; escribir contenido W en el puerto B NOP; sin operación MOVF PORT_B, W.
Descripción de la operación de lectura: estas tres instrucciones son un ejemplo de operación continua en el puerto B del puerto de E/S. El propósito es garantizar que cuando se lea el contenido escrito en el puerto B. , se debe garantizar que la escritura y la lectura tengan un tiempo estable, por lo que se agrega la instrucción NOP de no operación.
Función: Para aquellas con retardo muy corto, que nos requieran nivel, utilice la función "_nop_". Esta función es equivalente a la instrucción NOP del ensamblador, con un retardo de varios microsegundos. La instrucción NOP es una instrucción de ciclo único y el tiempo de retardo se puede calcular a partir de la frecuencia del oscilador de cristal. Para un oscilador de cristal de 12 M, el retardo es 1uS.
Para un retraso relativamente largo, se requiere que sea mayor que 10us y se utiliza la instrucción de bucle en C51 para lograrlo.
Al elegir una instrucción de bucle en C51, debe prestar atención a las siguientes cuestiones:
Primero, al definir variables de bucle en C51, intente utilizar variables de caracteres sin signo.
En segundo lugar, en la instrucción del bucle FOR, intente utilizar la resta de variables para realizar el bucle.
En tercer lugar, en las declaraciones do, while y while, las variables en el cuerpo del bucle también utilizan el método de resta.
Esto se debe a que en el compilador C51 se utilizan diferentes instrucciones para completar diferentes métodos de bucle.