This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

430延时程序测量值与其汇编指令执行时间不一致问题!



在示波器中测量到这段程序的时间大概为50.6us

#define CPU_F                 ((double)5000000)
#define delay_us(x)       __delay_cycles((long)(CPU_F*(double)(x)/1000000.0))

PxOUT.x |= BIT0;     /*  拉高某引脚 */

delay_us(50);

PxOUT.x &= ~BIT0;     /*  拉低某引脚 */

在CCS5编译环境下对应的汇编指令为:

BIC.B       #4, &Port_B_PBOUT

PUSHM.A    #1, R13

MOV.W     #0X0050, R13

1_$4:     DEC.W    R13

                JNE    (1_$4)

POPM.A     #1, R13

BIS.B     #4, &Port_B_PBOUT

在MSP430的数据手册中得到对应的指令周期为

instruction                          cycles

BIC.B                                   5

PUSHM.A                           28

MOV.W                                2

DEC.W                                2

JNE                                      2

POPM.A                              28

BIS.B                                   5

芯片MCLK设置为5MHz,所以总时长为  (5+28+2+(2+2)* 80+28+5)*0.2 = 77.6us > 50.6us

请问我哪里弄错了吗?