标题: 朋友们,STC单片机计数器能不输入脉冲直接计数吗? [打印本页]

作者: ZHAOBAO511    时间: 2022-6-13 18:41
标题: 朋友们,STC单片机计数器能不输入脉冲直接计数吗?
如题,就是做个计数器用,以前一直要输入脉冲。

作者: wwh2382    时间: 2022-6-13 21:07
如果你是想自动计数,用定时器就可以实现
作者: devcang    时间: 2022-6-13 23:39
总得有一个计数的要求的吧,
作者: chenchuanke    时间: 2022-6-14 06:56
设为定时器模式不就是直接内部计数了吗?
作者: smmj    时间: 2022-6-14 07:25
可以,定时器模式,输入系统时钟。
作者: 君工创    时间: 2022-6-14 09:06
内部定时器就是不需要外部输入脉冲的计数器。
作者: ZHAOBAO511    时间: 2022-6-14 11:08
wwh2382 发表于 2022-6-13 21:07
如果你是想自动计数,用定时器就可以实现

谢谢,定时时间短,0.1微秒计数一次。
作者: ZHAOBAO511    时间: 2022-6-14 11:09
chenchuanke 发表于 2022-6-14 06:56
设为定时器模式不就是直接内部计数了吗?

定时器怎么设置0.1微秒计数一次?
作者: ZHAOBAO511    时间: 2022-6-14 11:09
smmj 发表于 2022-6-14 07:25
可以,定时器模式,输入系统时钟。

如果0.12微妙计数一次的话,数据咋取出?12MHZ
作者: datouyuan    时间: 2022-6-14 11:22
计数器能不输入脉冲直接计数吗?


这是计数器的主要任务.假如不对输入脉冲计数,那么就是对内部时钟计数,这个计数器也叫定时器。
作者: pcbboy    时间: 2022-6-14 15:48
举个栗子:
TMOD = 0;
    T0_CT = 1;              
    T1_CT = 1;            
    TL0 = 0xff;
    TH0 = 0xff;
    TL1 = 0xff;
    TH1 = 0xff;
    TR0 = 1;               
    TR1 = 1;               
    ET0 = 1;               
    ET1 = 1;               

    T0CLKO = 0;            
    T1CLKO = 0;      


void TM1_Isr (void) interrupt 3
{
    P46 = !P46;   
    T1_cnt++;   
}
      
作者: ZHAOBAO511    时间: 2022-6-15 10:20
pcbboy 发表于 2022-6-14 15:48
举个栗子:
TMOD = 0;
    T0_CT = 1;              

谢谢,找到方法了,可以计数的,只是中断时间太短的话可能影响动作。
作者: wwh2382    时间: 2022-6-15 11:15
ZHAOBAO511 发表于 2022-6-14 11:08
谢谢,定时时间短,0.1微秒计数一次。

16位的定时器定时1微秒已经接近极限,估计你还得用原来的办法
作者: pcbboy    时间: 2022-6-15 15:28
刻意拔定时器调整到1MS
作者: ZHAOBAO511    时间: 2022-6-15 18:40
wwh2382 发表于 2022-6-15 11:15
16位的定时器定时1微秒已经接近极限,估计你还得用原来的办法

谢谢,可以用计数器。
作者: ZHAOBAO511    时间: 2022-6-15 18:41
pcbboy 发表于 2022-6-15 15:28
刻意拔定时器调整到1MS

谢谢,16MHZ就可以计数到1微秒,不行用计数器实现。
作者: gggggllll    时间: 2022-6-15 20:05
弄个延时,给个条件,一样的。单片机本来就有内部和外部振荡方式
作者: gggggllll    时间: 2022-6-15 20:05
弄个延时,给个条件,一样的。单片机本来就有内部和外部振荡方式
作者: pcbboy    时间: 2022-6-16 08:24
ZHAOBAO511 发表于 2022-6-15 18:41
谢谢,16MHZ就可以计数到1微秒,不行用计数器实现。

用来计数的定时器如果定时器高低位都装载FF就是0S,如果算个时间把定时器高低位按需要的时间值装载进去不用额外添加啥,可能你已经弄好了,补充一下。
作者: ZHAOBAO511    时间: 2022-6-16 14:49
gggggllll 发表于 2022-6-15 20:05
弄个延时,给个条件,一样的。单片机本来就有内部和外部振荡方式

谢谢,要精确计时的。
作者: ZHAOBAO511    时间: 2022-6-16 14:50
pcbboy 发表于 2022-6-16 08:24
用来计数的定时器如果定时器高低位都装载FF就是0S,如果算个时间把定时器高低位按需要的时间值装载进去不 ...

嗯,是的,已搞好, 谢谢
作者: nunum    时间: 2022-6-16 16:00
STC12C5A60S2中有2个定时/计数器T0和T1,对应外部引脚是P3.4和P3.5,你可以用其中一个定时/计数器接收脉冲信号。以T1定时器为例,把需要计数的脉冲接在P3.5口,编程时把TOMD定时器中的TOMD.6设置为1(即设为计数工作模式),通过读取寄存器TH1,TL1值得到脉冲的计数值。需要注意的是最大计数值为65535,超过计数范围则翻转,启动计数前先把TH1,TL1清零。脉冲信号的电压范围是0~5V,脉冲宽度不小于1个机器周期。如果脉冲信号和单片机不共地,最好用光耦隔离。
作者: nunum    时间: 2022-6-16 16:01
通过读取寄存器TH1,TL1值得到脉冲的计数值
作者: ZHAOBAO511    时间: 2022-6-16 17:27
nunum 发表于 2022-6-16 16:01
通过读取寄存器TH1,TL1值得到脉冲的计数值

谢谢,很详细。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1