一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2876|回复: 14
收起左侧

[其他综合] 碰到个难题

[复制链接]
发表于 2014-4-5 09:48 | 显示全部楼层 |阅读模式
比如:把51中的T0设置为16位计数器,并开始计数。想读出计数值,假如这时TL0中是0XFF,TH0中是1。我把TL0读到一个变量N中,读完刚好又计了一个数。再读TH0到N1。N2=N1*0XFF+N,可见这时的N2是不正确的,比计数器中的值大了256。请问有什么好办法避免类似的问题。
发表于 2014-4-5 09:53 | 显示全部楼层
同时读取,然后再处理
发表于 2014-4-5 09:54 | 显示全部楼层
计数值=TH*256+TL
发表于 2014-4-5 10:19 | 显示全部楼层
LZ说的是非原子数据的临界读取问题

要么停止-读取-再启动;
要么使用定时器的捕捉功能:用一个IO口接到T2EX脚,将IO置0
发表于 2014-4-5 10:50 | 显示全部楼层
xwj 发表于 2014-4-5 10:19
LZ说的是非原子数据的临界读取问题

要么停止-读取-再启动;

这个是超级大神,上次我问的有关RF电路问题也是大神回答我的,没想到单片机也精通
发表于 2014-4-5 10:52 | 显示全部楼层
看用的单片机是什么型号的,像AT的12T的51芯片还有另一种办法:先读TH;再读TL;此时TL必然比正确数值大1。然后判断读出那个数,若是读出的TL是0的话读出的TH+1,否则读出的TL自己+1
发表于 2014-4-5 11:28 | 显示全部楼层
如果计数脉冲是均匀的话,先读TH0,再读TL0,然后判断TL0是否大于某个数(比如2,视计数的速度),要是大于就跳过,小于等于就再读一次TH0
发表于 2014-4-5 15:04 | 显示全部楼层
简单且要求不高可以先停了再读。
发表于 2014-4-5 19:18 | 显示全部楼层
4楼真专业。
对于传统51,似乎除了停-读-启之外没别的办法了。增强型的有PCA能用,通过信号触发直接捕捉16位值。
发表于 2014-4-5 20:06 | 显示全部楼层
51读定时器有先后的顺序,如果不该读的先读了相当于清零重新开始

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-17 13:35 , Processed in 0.062964 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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