找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于利用单片机定时器测量外部脉冲宽度的问题

查看数: 5245 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-3-7 09:58

正文摘要:

为什么定时器关闭之后,只把TL0给A啊,假如脉冲很长,TH0也有数值呢。

回复

ID:478073 发表于 2019-3-10 12:52
在网上找个频率计的案子看看,脉冲宽度与频率分不开,懂得担相互联系就能解决

评分

参与人数 8黑币 +111 收起 理由
还有谁? + 14
正规007 + 15
sheng7533967 + 8
yoxi + 16
站着说话不腰疼 + 16
#include51.h + 16
找人PK + 16
微小苛 + 10

查看全部评分

ID:213173 发表于 2019-3-10 09:42
zhangzhao2423 发表于 2019-3-9 20:44
关键这题他没有加溢出次数累加器啊,怎么知道他溢出多少次呢

教科书的例题只是假定某一特定条件的应用。在这里假定脉冲宽度小于255个机器时钟周期,只计算TL0当然可以。如果脉冲宽度小于65536、大于255个机器时钟周期就要计算(TH0<<8)|TL0,如果脉冲宽度大于65535就要计算x=(count<<16)|(TH0<<8)|TL0;
ID:450037 发表于 2019-3-9 20:44
wulin 发表于 2019-3-8 22:50
只看书,不动手,真是死脑筋。假如脉冲很长,定时器寄存器计满溢出会重复计数,只要把溢出次数保存起来,最 ...

关键这题他没有加溢出次数累加器啊,怎么知道他溢出多少次呢
ID:213173 发表于 2019-3-8 22:50
只看书,不动手,真是死脑筋。假如脉冲很长,定时器寄存器计满溢出会重复计数,只要把溢出次数保存起来,最后加上TH0、TL0的数不就成了,你这个脉冲再怎么宽,呵呵,只要不断电,几年都行。
ID:18297 发表于 2019-3-8 14:36
1、假设你的定时时间<256,TL0的读书就是你的定时时间。(TL0初值=0)这里的TH0=0;不需要计算。
2、256<假设你的定时时间<65535,TH0*256+TL0就是你的定时时间(TH0,TL0的初值都为0)
3、假设你的定时时间>65535;
   你可以设置初值TH0=(65535-50000)/256;
                        TL0=(65535-50000)%256;
            设置累加计算器count=0;
  设置定时器0溢出中断,每一次溢出中断一次count加1,并重新装载TH0,TL0初值。
你所的测量时间是50000*count+(TH0*256+TL0);
ID:401564 发表于 2019-3-8 11:35
哥们为何如此的执着于看别人的程序呢?这汇编,你自己不动手是不可能学会的了,看得懂和自己能写,这是完全不同的一回事呀!
“作者懒呀!”
我是这么告诉你了吧?他只管把TL1的值送去显示了,为了不管TH1了呢?就算是TH1和TL1一块算也才65535,这万一脉冲超过65535了呢?
8051是一个8位单片机,它只能处理256以下的数据。如果脉冲的时间超过了256,比如是:1234,那么与之对应的16进制就是:04D2H,高8位地址存放04H,低8位地址存放0D2H,如果你想把1234在数码管或者是在12864上显示出来,你得先把1234分解成“1”,“2”,“3”,“4”分别存放在四个地址,这得用到除法运算,超过8位的8051没有除法的汇编指令,只能用减法运算来实现。且得是高低两个地址参与运算,一共就是四个地址。
这前前后后加显示一块,至少得是一百行代码以上,到时候会越扯越多,所以“将数据送显示缓存区并转换成可显示的代码”,很显然比我前面所说的简单多了
ID:123289 发表于 2019-3-8 08:52
很长,你就增加一个计数器,数TH计满的次数不就行了吗?

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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