在网上看到一种430的延时程序:
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
应用中只要使用就行,为什么我在应用中发现,如果我延时delay_ms(1000)理论上应该是1s,但是实际应用效果来看是10s。
测试程序如下,请各大大不吝赐教:
#include <msp430x14x.h>
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
void main(void)
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
WDTCTL = WDTPW + WDTHOLD; // 关狗
P6DIR |= BIT2;
P6OUT |= BIT2; //关闭电平转换
P2DIR = 0xff; // P2端口设置为输出
P2OUT = 0xff; // 关闭其他LED
P2OUT = 0x55;
while(1)
{
delay_ms(100);
P2OUT ^=0xff;
}
} |