Red de conocimientos turísticos - Información de alquiler - Programa de retraso del lenguaje SCM c

Programa de retraso del lenguaje SCM c

Si no utiliza el método de interrupción pero utiliza el método de bucle de software, puede realizar una simulación de software en el cuerpo del bucle (puede ver el código ensamblador) y calcular los ciclos de máquina ocupados por el cuerpo del bucle. Y aún así calcular el tiempo con precisión. Por ejemplo: #include retraso vacío(uint ms)

{ uchar i;

for( ; ms > 0 ; ms--)

for(i=0;i<200;i++)_nop_();

} Después de compilar en el software Keil, abra el archivo **(nombre de archivo).m51 y busque el retardo() C O D E M E M O R Y la dirección base, luego ingrese la simulación del software ("Opción para destino..." - el elemento de la página "depuración" está configurado en "Usar simulador"), ingrese la dirección base del retraso() en la barra de direcciones del puntero de la PC y presione Entrar, la PC actual apunta a la entrada de la función y la ventana de desmontaje se abrirá de forma predeterminada, como se muestra a continuación (tanto el prototipo del lenguaje C como el resultado del ensamblaje. A continuación, simplemente cuente el total de ciclos de máquina de las instrucciones de ensamblaje). el cuerpo del programa de bucle, puede obtener el tiempo de retardo exacto. 279: retraso nulo (uint ms)

280: { uchar i;

281: for( ; ms > 0 ; ms--)

C: 0x6807 D3 SETB C

C:0x6808 EF MOV A,R7

C:0x6809 9400 SUBB A,#0x00

C:0x680B EE MOV A,R6

C:0x680C 9400 SUBB A,#0x00

C:0x680E 400E JC C:681E

282: for(i=0;i<200; i++)_nop_();

C:0x6810 E4 CLR A

C:0x6811 FD MOV R5,A

C:0x6812 00 NOP

C:0x6813 0D INC R5

C:0x6814 BDC8FB CJNE R5,#0xC8,C:6812

C:0x6817 EF MOV A,R7

C:0x6818 1F DEC R7

C:0x6819 70EC JNZ retardo(C:6807)

C:0x681B 1E DEC R6

C:0x681C 80E9 SJMP retraso(C:6807)

283: }

C:0x681E 22 RET