[PIC®/AVR®/dsPIC®产品] __delay_ms(50); 编译通不过 __delay_ms(49);可以通过

[复制链接]
 楼主| 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 | 显示全部楼层
这是编译结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2015-5-29 10:45 | 显示全部楼层

错误提示显示值太大了,确实不行
 楼主| 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范围内啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zong999 发表于 2015-5-29 11:32 | 显示全部楼层
#define _XTAL_FREQ  16000000 //16MHz

这是我定义的
ayb_ice 发表于 2015-5-29 13:55 | 显示全部楼层

#define _XTAL_FREQ  16000000ul //16MHz
__delay_ms(50ul);
试试
 楼主| zong999 发表于 2015-5-29 17:14 | 显示全部楼层
不行还是一样

ayb_ice 发表于 2015-6-1 07:55 | 显示全部楼层

记得以前PIC的long是24位长度的,这个PIC18不知道是不是也是24位的
shaoziyang 发表于 2015-6-1 09:35 | 显示全部楼层
不行就调用两次延时函数吧。
huarana 发表于 2015-6-1 10:12 | 显示全部楼层
ayb_ice 发表于 2015-6-1 07:55
记得以前PIC的long是24位长度的,这个PIC18不知道是不是也是24位的

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

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

楼主能发工程上来吗
ayb_ice 发表于 2015-6-1 10:22 | 显示全部楼层
huarana 发表于 2015-6-1 10:12
这个跟长度没关系的,就算是8位的。你代个1000进去,他也不会编译不过。最多就是延时达不到你逾期的目的 ...

错误提示就是说参数值太大了,你说有没有关系呢
huarana 发表于 2015-6-1 10:37 | 显示全部楼层
ayb_ice 发表于 2015-6-1 10:22
错误提示就是说参数值太大了,你说有没有关系呢

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

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

至于哪里有问题,真希望楼主发个工程来看看。自带的delay我经常用啊,随便填个任意数字都至少不会编译不过的。
yklstudent 发表于 2015-6-1 13:15 | 显示全部楼层
huarana 发表于 2015-6-1 10:37
我觉得吧,提示不见得说的就是这个50呢。何况提示本身只是提示而已。

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

你确定自带的延时函数可以随意设置延时长短?????
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
huarana 发表于 2015-6-1 14:32 | 显示全部楼层

找到一个比较权威的。

见XC8用户指南334页

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huarana 发表于 2015-6-1 14:39 | 显示全部楼层
根据楼主的应用,PIC18遵循 179200  , 带入后   16000000/4000    =4000   ,   179200/4000  =44.8

所以ms小于等于 44  才能正确编译。  
yklstudent 发表于 2015-6-1 17:33 | 显示全部楼层
huarana 发表于 2015-6-1 14:39
根据楼主的应用,PIC18遵循 179200  , 带入后   16000000/4000    =4000   ,   179200/4000  =44.8

所以 ...

手册给的只是大概值,实际不同芯片的上限值还是有差异的,自己试试就知道了
 楼主| zong999 发表于 2015-6-3 15:40 | 显示全部楼层
延时100ms
我是调用__delay_ms(49);__delay_ms(49);__delay_ms(2); 三次

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

附工程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zong999 发表于 2015-6-3 15:44 | 显示全部楼层
huarana 发表于 2015-6-1 14:32
找到一个比较权威的。

见XC8用户指南334页

谢谢,长延时,那只能多次调用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部