完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
写程序缺不了延时函数,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();函数。而这个其实就是编译器的事了。 终于解决了,虽然没有太大用,但是还是心情大好。分享出来,因为没人写过这么简单的问题,看来以后还得多看看手册。 |
|
相关推荐
10个回答
|
|
谢谢分享。。。
|
|
|
|
钻研精神,佩服 ,我时常也是这样郁闷
|
|
|
|
就是指令周期!不可能很准确,除非你把中断关闭!
|
|
|
|
这个和中断有什么关系?
|
|
|
|
软件延时时候禁止中断,再把调用延时函数的出栈和压栈指令算进去,这样的软件延时误差不会很大,会做到准确!你说和关闭中断有没有关系????不关闭中断,怎么保证软件延时准确性???
|
|
|
|
奥奥,才理解您说的意思,谢谢提醒
|
|
|
|
谢谢分享
|
|
|
|
牛逼,服
|
|
|
|
谢谢分享,已解惑
|
|
|
|
谢谢分享
|
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1123浏览 3评论
577浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2305浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1862浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 22:05 , Processed in 1.225007 second(s), Total 69, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号