发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
pic程序延时函数宏定义后就能使用__delay_us();和__delay_ms();的方法分享!
418 PIC microchip 函数
分享
写程序缺不了延时函数,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();函数。而这个其实就是编译器的事了。




终于解决了,虽然没有太大用,但是还是心情大好。分享出来,因为没人写过这么简单的问题,看来以后还得多看看手册。
0
2019-9-30 04:08:05   评论 分享淘帖 邀请回答

相关问题

10个回答
2019-9-30 07:19:37 评论

举报

钻研精神,佩服  ,我时常也是这样郁闷
2019-9-30 07:28:37 评论

举报

就是指令周期!不可能很准确,除非你把中断关闭!
2019-9-30 07:35:44 评论

举报

这个和中断有什么关系?
2019-9-30 07:53:50 评论

举报

软件延时时候禁止中断,再把调用延时函数的出栈和压栈指令算进去,这样的软件延时误差不会很大,会做到准确!你说和关闭中断有没有关系????不关闭中断,怎么保证软件延时准确性???
2019-9-30 08:11:27 评论

举报

奥奥,才理解您说的意思,谢谢提醒
2019-9-30 08:22:40 评论

举报

2019-9-30 08:36:59 评论

举报

2019-9-30 08:55:52 评论

举报

2019-9-30 09:04:12 评论

举报

只有小组成员才能发言,加入小组>>

878个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表