单片机
返回首页

单片机学习之十七:计数器的应用

2016-09-09 来源:eefocus

一、实验现象

 

每次按下k0按键2次后,在P0.0输出一个周期是100ms的方波信号。

二、实验目的

 

掌握内部定时/计数器作计数功能的应用

 三、实验任务分析

 

在前面的3个试验里面,我们都是让T0工作于定时方式,从而产生一段固定的时间。但是T0和T1除了可以用于定时外,还可以用于对外部输入的脉冲进行计数。在这个试验里面,我们学习T0工作于计数方式时的编程方法。

在本试验中,我们用T0对外部按键的动作进行计数。看一下定时/计数器的逻辑图如下图所示:

单片机学习之十七:计数器的应用 - 北极星 - 要做一粒好的种子

我们发现当C/T=1的时候,定时/计数器T0可对T0(P3.4)端计数,每当T0端产生一个负跳变的时候,计数器执行一次加1的运算。为了让k0按键按下的时候,在p3.4端产生一个负跳变,我们首先要做的是把p1.1和p3.4用导线短路,如下图13-2所示,这样才能满足试验要求。

单片机学习之十七:计数器的应用 - 北极星 - 要做一粒好的种子

这个试验的思路如下:让T0在计数2次时,产生溢出中断,在T0的中断服务程序我们启动T1开始计数,然后在T1的溢出中断里面把P0.0取反,这样就可以产生符合我们实验要求的信号

为了让k0按下2次后T0产生溢出中断,我们可以让T0工作于计数方式,并选择可重新置入计数初值的8位计数器模式2;为了产生100ms的方波信号,我们让T1工作于定时方式,选择16位计数器模式。所以tmod的初值应该是:0001 0110,即16h。

四、实验程序

 

org 0000h

ajmp main

 

org 000bh       ;T0溢出中断入口地址

ajmp time0

 

org 001bh

ajmp time1      ;T1溢出中断入口地址

 

org 0020h

main:  clr p1.5

setb p0.0

mov sp,#70h     ;设置堆栈

mov tmod,#16h   ;T0、T1初始化,T0工作在计数方式,T1工作在定时方式

mov tl0,#0feh    ;T0置计数初值,计数2次后产生溢出中断

mov th0,#0feh    ;计数初值置入常数缓冲区          

mov th1,#3ch    ;T1置入计数初值,产生50ms定时

mov tl1,#0b0h

setb et0         ;允许T0溢出中断

setb et1         ;允许T1溢出中断

setb tr0         ;启动T0计数

setb ea          cpu开中断

ajmp $

          

time0:  setb tr1         ;启动T1计数

reti

 

time1:  mov th1,#3ch      ;T1重装计数初值

mov tl1,#0b0h

cpl p0.0          ;P0.0取反

reti

end

 

五、几点说明

在运行该程序时,有时可能会发现并不是按键按下两次后产生信号,这是因为手动按键的时候可能会发生抖动情况,导致计数器计数的缘故。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章