注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C51计时器方式0  

2016-02-23 19:54:39|  分类: C51(C&ASM) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
方式0下的TMOD设置和其他方式差别不大,M1M0为00就行,最主要的是要记住这个是13位的计时器,因此在涉及到TH和TL分配的时候不像16位那么简单明了,还得注意重新分配一下。
先上代码,这个是使用计时器0完成的延时:
    ;计时器0模式0实现1秒延时
    ORG 0000H
    LJMP START
    ORG 0030H
START:
    CALL DELAY
    CALL DELAY
    SJMP $
DELAY:
    MOV R3,#07DH
    MOV TMOD,#00H;MOD 0
    MOV TH0,#06H
    MOV TL0,#00H
    SETB TR0
CHECK:
    JNB TF0,$;未溢出,一直等待
    ;overflow,reset
    MOV TH0,#06H
    MOV TL0,#00H
    CLR TF0
    DJNZ R3,CHECK
    RET 
    END START
再说明一下如何实现的。
延时函数通过将1s分为125*8000us来完成,在12MHz的频率下,一个周期就是1us,因此,在TH和TL中设置为8000个计数,则初始值Z应该是:
2^13-Z=8000
Z=8192-8000=192=C0H=0000011000000B
这个时候不是简单说把C0放入TL0中完事,而是把这13个bit划分一下,注意13位的分配是这样的:简单来说就是把这个数除以32的商放入TH0中,余数放入TL0中。
1.高8位直接放入TH0中,因此,0000011000000B中标红加粗的应该放入TH0中。
2.剩余的5位放入TL0中的低5位,TL0中的高3位直接用0补齐。因此0000011000000B中标蓝加粗的放入TL0中,高位再补上三个0就是00000000
不过,这种延时由于延时例程中其他指令的影响,肯定是不精确的,但是好处是不会占用CPU的操作时间。
  评论这张
 
阅读(202)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016