基于CD4511的两位数显脉冲计数器

描述

使用计数器T0,工作在方式0,对外部脉冲进行计数,当外部脉冲数量累计达到1000后LED显示值加1。其实验电路如图所示

中断

分析: 使用计数器与使用定时器类似,只是计数脉冲由系统时钟脉冲改为外部脉冲。也可以使用中断查询的方式进行编程,就是先给定时器寄存器赋初值,当计满后就清掉溢出标志TF0.再进入下一轮中断,当然也可以不使用中断查询,而直接使用数值比较完成要求,数值比较其实就是每次都将TH0和TL0与预设的Hight和Lower进行比较,当比较的结果都为真时,进行计数到后的服务程序。下面依次给出其程序清单。

(1)使用中断查询方式的程序清单如下:

sfr  data_buf=0xA0;   //显示数据端口
unsigned char conter; //全局变量,用于保存计数值
void main(void)
{  
   conter=0;
   Conter_Init();
   while(1)
   {
     Conter0();
     disply(conter);
   }
}
void Conter_Init(void)
{
   TMOD=0x04;          //工作方式设置
  /*计数器初值设置*/
   TH0=0xe0;          //初始值设置,7192转为13位后的高8位
   TL0=0x18;         //初始值设置,7192转为13位后的低5位
  /*关闭计数器中断*/
   EA=0  ;            //关中断
   ET0=0 ;            //关T0中断
 /*启动计数器*/
   TR0=1 ;            //启动T0
}
void Conter0(void)
{ 
      if(TF0==1)
      {
        TF0=0;
        /*计数器初值设置*/
        TH0=0xe0;        //  初始值设置
        TL0=0x18;  
        conter++;
        if(conter >=99)
          conter=0;
      }
}
void disply(unsigned char BCD)  //显示函数
{
   unsigned char x,y;      //定义x,y两个变量
   x=BCD%10;        //取i的个位字符BCD编码放于x中
   y=BCD/10;        //取i的十位字符BCD编码放于y中
   y< <=4;          //x左移4位
   data_buf=y|x;      //返回个位与十位的组合BCD编码并送P2口显示
}

通过上面案例可以看出使用定时器/计数器的基本步骤如下。

1 写TMOD,设置定时器/计数器的工作方式。

2 计算定时器/计数器的初值,并将初值写入TH0/TH1、TL0/TL1。

3 设置IE、IP,以开放或关闭相应的中断和设定中断优先级。

4 启动定时/计数器。

5 根据条件调用定时器/计数器服务函数。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分