写程序缺不了延时函数,microchip提供了一种特别好的方法,就是只要宏定义了#define _XTAL_FREQ 12000000(之所以这样写,是因为我用的是12M晶振,12M=1200000),就可以调用__delay_us();和__delay_ms();等这些延时函数。
使用方法详情见下面网址
http://wenku.baidu.com/link?url= ... dbqXZJB4phD9REbrkqa
但是这是怎么实现的呢?之前一直是不求甚解,学长教给我们这样用就这样用,而且学长说这个十分准确,用了很长时间,也不知道是怎么实现的,百度谷歌都没查到,mplab官网也没特别说明,无奈只能自己找了。
之前一直在芯片手册找,以为这个是写进去以后单片机调用定时器啥的,实现的精准延时。后来仔细想想发现自己错了,这个应该是编译器的事,不应该在芯片手册中找,要在编译器手册中找,于是在官网找到MPLAB XC8 C Compiler User这本书,终于发现原因。
在手册的第59页终于发现下面这段话:
p59 发现了自己之前的两个错误:①这种方法并不是十分精准的,想要特别精准的延时需要定时器。当然也已经十分准确了。
②这种方法其实就是调用NOP();函数,根本没用到定时器啥的,之所以要宏定义就是为了让编译器知道一个__delay_us(1);对应几个指令周期也就是几个NOP();函数。而这个其实就是编译器的事了。
终于解决了,虽然没有太大用,但是还是心情大好。分享出来,因为没人写过这么简单的问题,看来以后还得多看看手册。 |