Red de conocimiento informático - Problemas con los teléfonos móviles - Reescribir la programación

Reescribir la programación

En primer lugar, ya sabe que esta sección es una macroinstrucción, por lo que la pseudoinstrucción macro consiste en declarar el nombre de la macro de esta macroinstrucción, iniciar una macroinstrucción y finalizar la macro hasta que aparezca endm. Las macros son similares a las funciones en lenguaje C, pero a diferencia de los 'subprogramas' en ensamblador, las macros pueden llamar a otras macros o a sí mismas (operaciones recursivas, si has aprendido lenguaje C, la más clásica es hacer la secuencia de Fibonacci). Sin embargo, cuando se llama a otras macros o se llama a sí mismo de forma recursiva, solo se puede llamar hasta 16 veces (más de eso se desbordará).

En este caso,

Macro USB configurada

. . . .

endm

De hecho, es equivalente al lenguaje C:

void ConfiguredUSB()

{

. . . .

}

Además, las macros pueden tomar parámetros formales. Por ejemplo, la macro USB configurada núm 1, núm 2 es igual a:

anular USB configurado. (uchar num 1, uchar num2)

No necesitas el comando CALL para llamar a una macro, solo escribe el nombre de la macro.

La directiva local es un poco como definir variables locales en lenguaje C. Por ejemplo, escriba local num1, num2.

Igual a uchar num1, uchar num2 en lenguaje C. Además, incluso si num1 aparece en otras macros o programas principales, no entrará en conflicto con este. Las variables definidas localmente en una macro sólo son legales dentro de la macro. El enumloop local en su programa simplemente declara que la etiqueta enumloop es interna a la macro. Puede haber otra etiqueta enumloop con el mismo nombre en el programa principal. Local recuerda al compilador que no confunda dos bucles de enumeración.

A continuación, hablemos del programa. Puede saber mirando el nombre de la macro que su macro se utiliza para configurar el módulo USB. BANKsel también es una pseudoinstrucción, que significa saltar al banco donde se encuentra USWSTAT. MOVLW 0X03 lee el número binario 0000011 en el registro de trabajo W y luego realiza la operación AND en USWSTAT y W. De hecho, se trata de cambiar los seis dígitos superiores de USWSTAT a cero, dejando solo los dos dígitos inferiores. El resultado se almacena en el registro w. Este resultado luego se compara con el CONFIG_STATE definido por el propio programador (que puede ser una constante). Si es lo mismo, se acabó. Si no son iguales, goto recorre la posición especificada por el bucle de enumeración anterior y continúa leyendo los dos bits inferiores de USWSTAT.

Por cierto: fbaiqd arriba, ya que has aprendido mucho sobre microcontroladores, ¿por qué no explicas este programa?