社区导航

 

搜索
查看: 520|回复: 13

[求助] 求分解

[复制链接]

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-1-18 09:19 | 显示全部楼层 |阅读模式
Wait 1ms                MOVLW      61                              SUBWF      TMR0 ,W
                               BTFSS       STATUS,C
                              GOTO        Wait 1ms
                               CLRF         TMR0
                               RETLW      0


1ms 是如何延时的?
来源:EEWorld 编程基础板块,转载请附上链接

回复

使用道具 举报

713

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-1-18 10:08 | 显示全部楼层
这是PIC的汇编指令,明白指令的意思就明白什么意思了。

回复

使用道具 举报

7492

TA的帖子

4947

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2019-1-18 11:01 | 显示全部楼层
占用CPU运行时间的延时,一般都是用一个变量连续加或者连续减,直到这个变量达到设定值时,就达到了延时目的

回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-18 14:27 | 显示全部楼层
tiankai001 发表于 2019-1-18 11:01
占用CPU运行时间的延时,一般都是用一个变量连续加或者连续减,直到这个变量达到设定值时,就达到了延时目 ...

是这个意思,我想知到这个初值怎么计算?这里是1MS,初值61,要是5ms呢?

点评

这个要看延时这几句话里面有几条指令,每条指令的时钟周期分别是多少,然后计算出总共多少个时钟周期,根据主频算出延时时长,最后就是倍数的关系了,  详情 回复 发表于 2019-1-18 14:37

回复

使用道具 举报

7492

TA的帖子

4947

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2019-1-18 14:37 | 显示全部楼层
小白求科普 发表于 2019-1-18 14:27
是这个意思,我想知到这个初值怎么计算?这里是1MS,初值61,要是5ms呢?

这个要看延时这几句话里面有几条指令,每条指令的时钟周期分别是多少,然后计算出总共多少个时钟周期,根据主频算出延时时长,最后就是倍数的关系了,

回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-18 14:41 | 显示全部楼层
tiankai001 发表于 2019-1-18 14:37
这个要看延时这几句话里面有几条指令,每条指令的时钟周期分别是多少,然后计算出总共多少个时钟周期,根 ...

非常感谢

回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-18 15:06 | 显示全部楼层
tiankai001 发表于 2019-1-18 14:37
这个要看延时这几句话里面有几条指令,每条指令的时钟周期分别是多少,然后计算出总共多少个时钟周期,根 ...

我查了下datasheet,除了GOTO、RETLW为2个周期,BTFSS跳转时为2个周期,不跳为1个,其他都是1个周期,4MHZ,分频比1:16,则有  (5ms*60+7ms)*16=4912,不只1ms了。。。。。。

回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-18 15:10 | 显示全部楼层
小白求科普 发表于 2019-1-18 15:06
我查了下datasheet,除了GOTO、RETLW为2个周期,BTFSS跳转时为2个周期,不跳为1个,其他都是1个周期,4MH ...

应该是5us,7us,写错了

点评

你的时钟是4M,然后16分频,你计算的时候直接乘16不对吧  详情 回复 发表于 2019-1-18 16:24

回复

使用道具 举报

7492

TA的帖子

4947

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2019-1-18 16:24 | 显示全部楼层
小白求科普 发表于 2019-1-18 15:10
应该是5us,7us,写错了

你的时钟是4M,然后16分频,你计算的时候直接乘16不对吧

回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-18 16:41 | 显示全部楼层
tiankai001 发表于 2019-1-18 16:24
你的时钟是4M,然后16分频,你计算的时候直接乘16不对吧

我觉得不理解

点评

PIC应该是单周期指令吧? 就是说一条指令如果是一个执行周期,就是一个机器时钟。 你4M主频,16分频,相当于 4M/16 就是你的一个机器时钟周期。  详情 回复 发表于 2019-1-21 23:38

回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

发表于 2019-1-21 23:36 | 显示全部楼层
既然是汇编,那就直接数执行周期吧。绝对精准,不需要怀疑,只要你没理解错执行的指令。当然,最靠谱的方法是用示波器或者逻辑分析仪实际量一下,方法是用一个IO翻转,个人推荐逻辑分析仪,便宜且好用。

回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

发表于 2019-1-21 23:38 | 显示全部楼层

PIC应该是单周期指令吧?
就是说一条指令如果是一个执行周期,就是一个机器时钟。
你4M主频,16分频,相当于 4M/16 就是你的一个机器时钟周期。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

49

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2019-1-23 16:29 | 显示全部楼层
辛昕 发表于 2019-1-21 23:38
PIC应该是单周期指令吧?
就是说一条指令如果是一个执行周期,就是一个机器时钟。
你4M主频,16分频, ...

刚开始学,分不清楚

回复

使用道具 举报

7870

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

发表于 2019-2-13 23:00 | 显示全部楼层
嗯哼?问题还没解决?怎么又被推了上来?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-10-15 07:31 , Processed in 0.366145 second(s), 17 queries , Gzip On, MemCache On.

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