返回该小组首页 回复主题
goley

goley

小组等级:     E币:169  (E币换礼)

#1楼主:请教使用51单片机 外部计数器的使用方法?程序如下

文章发表于:2008-05-05 04:57

我搞不明白T0的端口怎么使用?我想用p3.4口接一个霍尔开关接收脉冲进行计数,数值是放在TH0和TL0的!我的理解有没有错

//初始化红外计数器  定义外部中断口P3.4为 脉冲触发模式
void Init_Sum_Ird(){
     TMOD="0x05";   //开启计数器0 为16位计数器
     EA="1";  //开总中断
  ET0=1;     //开外部中断
  IT0=1;
  TR0=0;     //禁用
//  TH0=0;
//  TL0=0;
  sum_ird=0;  //初始化计数值为
}

//红外计数器的 中断0 计数累加
void Et0() interrupt 1{
       
}

      【回复】

promcu

   小组等级:    E币:6029  (E币换礼)

#2

文章发表于:2008-05-06 09:17

如果是用计数器,你要设置计数的次数,不能帮你从0开始计数的。如果你要计数10次,那么TH0=65526,TL0=65526,如果满10,计数器就溢出,这个还要根据计数的工作方式的

goley

   小组等级:    E币:169  (E币换礼)

#3

文章发表于:2008-05-06 11:17

我用的计数不会超过65536 ,另我设置TH0=0; TL0=0;也不可以吗?  哪我的东西要怎么改?请教

promcu

   小组等级:    E币:6029  (E币换礼)

#4

文章发表于:2008-05-08 00:15

只会产生溢出中断,可以设置为0,多看看书本

icoozy

   小组等级:    E币:77  (E币换礼)

#5

文章发表于:2008-05-08 22:31

计数器计数溢出时自动产生中断并进入中断子程序,

而不需要软件不断地查询计数是否到达了预计值,

这就节省了资源,如promcu 所说

初始值=65536-计数值(16位)

caoyu88666

   小组等级:    E币:20  (E币换礼)

#6

文章发表于:2008-05-17 22:48

我感觉你的思路没错,我建议你分步检查各硬件电路

比如脉冲是否是正脉冲?

计数器是否正常工作?

最终读TH0,TL0的值就行了

我用汇编语言完成过类似操作,试验成功!~

 

goley

   小组等级:    E币:169  (E币换礼)

#7

文章发表于:2008-05-24 21:29

谢谢楼上的朋友

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

浏览该小组的用户还看过...

设计资源与分销

";