Reescribir la programación
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?