#define CPU_F ((double)20000000) //1000000为MCLK=1MHZ 的意思
//#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))
#define delay_us(A) __delay_cycles( (unsigned long) ( (double)(CPU_F) *((A)/1000000.0) + 0.5))
#define delay_ms(A) __delay_cycles( (unsigned long) ( (double)(CPU_F)*((A)/1000.0) + 0.5))
#define delay_s(A) __delay_cycles( (unsigned long) ( (double)(CPU_F)*((A)/1.0) + 0.5))
以前用的是这种,后来发现并不准确,请大家帮帮忙啊~~
Young Hu:
您好。
__delay_cycles是相对来说比较准确的方式了。
问您两个问题:
1、能不能描述一下不准确的现象?
2、MCLK频率是多少?用IO口输出来看看;
3、您用的MSP是哪个型号?如果4、5系列使用FLL,要准确得多的
Guo Yan:
回复 Young Hu:
我用的是5438A 锁频到20MHZ 从端口看主频是没有问题的。用频率计测的。
一个端口低电平切换到高电平在到低电平 中间用了延时
程序下载后 拔掉了编程器 用逻辑分析仪 和示波器都观察了 每次复位后的延时是不确定的
我延时了5ms 正常时是差不多的 而错误时不到5us 只是复位了一下。。
电池是新的。。