打印
[PIC®/AVR®/dsPIC®产品]

__delay_ms(50); 编译通不过 __delay_ms(49);可以通过

[复制链接]
1647|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zong999|  楼主 | 2015-5-25 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在PIC18f46k22中
调用pic18.h自带的延时
__delay_ms(50); 编译通不过
__delay_ms(49);编译可以通过
求高手解决
沙发
huarana| | 2015-5-26 17:30 | 只看该作者
囧 怎么可能呢

把提示截图看看

使用特权

评论回复
板凳
zong999|  楼主 | 2015-5-29 10:08 | 只看该作者
这是编译结果

360截图20150529095822312.jpg (115.96 KB )

编译结果

编译结果

使用特权

评论回复
地板
ayb_ice| | 2015-5-29 10:45 | 只看该作者

错误提示显示值太大了,确实不行

使用特权

评论回复
5
zong999|  楼主 | 2015-5-29 11:23 | 只看该作者
ayb_ice 发表于 2015-5-29 10:45
错误提示显示值太大了,确实不行

pic18.h
(x)*(_XTAL_FREQ/4000.0))
(50)*(_16000000/4000.0))=200000
应该在unsigned long范围内啊

360截图20150529111517359.jpg (116.89 KB )

pic18.h

pic18.h

使用特权

评论回复
6
zong999|  楼主 | 2015-5-29 11:32 | 只看该作者
#define _XTAL_FREQ  16000000 //16MHz

这是我定义的

使用特权

评论回复
7
ayb_ice| | 2015-5-29 13:55 | 只看该作者

#define _XTAL_FREQ  16000000ul //16MHz
__delay_ms(50ul);
试试

使用特权

评论回复
8
zong999|  楼主 | 2015-5-29 17:14 | 只看该作者
不行还是一样

使用特权

评论回复
9
ayb_ice| | 2015-6-1 07:55 | 只看该作者

记得以前PIC的long是24位长度的,这个PIC18不知道是不是也是24位的

使用特权

评论回复
10
shaoziyang| | 2015-6-1 09:35 | 只看该作者
不行就调用两次延时函数吧。

使用特权

评论回复
11
huarana| | 2015-6-1 10:12 | 只看该作者
ayb_ice 发表于 2015-6-1 07:55
记得以前PIC的long是24位长度的,这个PIC18不知道是不是也是24位的

这个跟长度没关系的,就算是8位的。你代个1000进去,他也不会编译不过。最多就是延时达不到你逾期的目的而已。

所以重点还得找其他问题。

楼主能发工程上来吗

使用特权

评论回复
12
ayb_ice| | 2015-6-1 10:22 | 只看该作者
huarana 发表于 2015-6-1 10:12
这个跟长度没关系的,就算是8位的。你代个1000进去,他也不会编译不过。最多就是延时达不到你逾期的目的 ...

错误提示就是说参数值太大了,你说有没有关系呢

使用特权

评论回复
13
huarana| | 2015-6-1 10:37 | 只看该作者
ayb_ice 发表于 2015-6-1 10:22
错误提示就是说参数值太大了,你说有没有关系呢

我觉得吧,提示不见得说的就是这个50呢。何况提示本身只是提示而已。

就跟keil的错误提示经常摸不到头脑,只需要知道有错误就行了。

至于哪里有问题,真希望楼主发个工程来看看。自带的delay我经常用啊,随便填个任意数字都至少不会编译不过的。

使用特权

评论回复
14
yklstudent| | 2015-6-1 13:15 | 只看该作者
huarana 发表于 2015-6-1 10:37
我觉得吧,提示不见得说的就是这个50呢。何况提示本身只是提示而已。

就跟keil的错误提示经常摸不到头脑 ...

你确定自带的延时函数可以随意设置延时长短?????

使用特权

评论回复
15
huarana| | 2015-6-1 14:12 | 只看该作者
yklstudent 发表于 2015-6-1 13:15
你确定自带的延时函数可以随意设置延时长短?????

KXH12.c:84: error: delay exceeds maximum limit of 50660096 cycles
KXH12.c:84: error: can't generate code for this expression

试了下还真不行,我测试到 __delay_ms(25000)是可以的,再大点就不行了。 我用的8M

使用特权

评论回复
16
huarana| | 2015-6-1 14:32 | 只看该作者

找到一个比较权威的。

见XC8用户指南334页

使用特权

评论回复
17
huarana| | 2015-6-1 14:39 | 只看该作者
根据楼主的应用,PIC18遵循 179200  , 带入后   16000000/4000    =4000   ,   179200/4000  =44.8

所以ms小于等于 44  才能正确编译。  

使用特权

评论回复
18
yklstudent| | 2015-6-1 17:33 | 只看该作者
huarana 发表于 2015-6-1 14:39
根据楼主的应用,PIC18遵循 179200  , 带入后   16000000/4000    =4000   ,   179200/4000  =44.8

所以 ...

手册给的只是大概值,实际不同芯片的上限值还是有差异的,自己试试就知道了

使用特权

评论回复
19
zong999|  楼主 | 2015-6-3 15:40 | 只看该作者
延时100ms
我是调用__delay_ms(49);__delay_ms(49);__delay_ms(2); 三次

但我在PIC16F1937里 __delay_ms(1000);是可以的

附工程

pic18.rar

29.43 KB

工程

使用特权

评论回复
20
zong999|  楼主 | 2015-6-3 15:44 | 只看该作者
huarana 发表于 2015-6-1 14:32
找到一个比较权威的。

见XC8用户指南334页

谢谢,长延时,那只能多次调用了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

13

帖子

0

粉丝