简介

“定时器/计数器”说的是一个东西,因为它既能计时也能计数。是存在于单片机内部的一个独立的硬件部分,依赖晶振产生固定的时间间隔,产生了一定量的固定时间间隔后会引发定时器中断从而将其产生的时间信息传送给由CPU执行的主程序中。

相关寄存器

TMOD寄存器:决定定时器/计数器的工作方式,C51单片机中一共有两个16位定时器/计数器,分别为T1,T0。

7 6 5 4 3 2 1 0
符号 T1 T1 T1 T1 T0 T0 T0 T0
GATE C/T M1 M0 GATE C/T M1 M0
GATE C/T
门控制位 定时器/计数器

0:仅受TCON的TR位控制。

1:由TR和外部中断一起控制。

0:定时器。1:计数器
M1 M0 控制方式
0 0 方式0,为13位定时器/计数器
0 1 方式1,为16位定时器/计数器
1 0 方式2,8位初值自动重装的8位定时器/计数器
1 1 方式3,仅适用于T0,分成两个8位计数器,T1停止计数

TCON寄存器:控制启动、关闭、标志其溢出和中断情况

7 6 5 4 3 2 1 0
符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF TR
溢出标志位 运行控制位

溢出时该位自动置1。中断执行时硬件清0或软件清0

置1开始计时,清0停止计
TF0和TR0对应定时器0 TF1和TR1对应定时器1。
IE IT
外部中断请求标志 外部中断触发方式选择位
IE0与IT0对应外部中断0 IE1与IT1对应外部中断1

中断具体见——C51单片机学习笔记之中断系统

原理图

代码部分

实现一个秒表

/*数码管部分*/
#include <REGX52.H>
#include "delay.h"
sbit U3=P2^0;
sbit U4=P2^1;
unsigned char DX[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6F,0X40};//¶ÎÑ¡
char dx(unsigned int x)
{unsigned char y;y=DX[x];return y;
}
void wx(unsigned char locaton)
{switch(locaton){case 1:P0=0xfe;break;case 2:P0=0xfd;break;case 3:P0=0xfb;break;case 4:P0=0xf7;break;case 5:P0=0xef;break;case 6:P0=0xdf;break;case 7:P0=0xbf;break;case 8:P0=0x7f;break;}}
void print(unsigned char x,y)
{U3=1;P0=dx(x);U3=0;U4=1;wx(y);U4=0;delay();P0=0x00;}#ifndef __DigitalTube_h__
#define __DigitalTube_h__
void print(unsigned char x,y);
char dx(unsigned int x);
void wx(unsigned char locaton);
#endif
/*按键部分*/
#include <REGX52.H>void delay1()
{unsigned int i;for(i=0;i<30000;i++);
}
unsigned char MatrixKey()
{unsigned char KeyNumber;P1=0xFF;P1_0=0;if(P1_4==0)
{delay1();while(P1_4==0);delay1();KeyNumber=1;}if(P1_5==0){delay1();while(P1_4==0);delay1();KeyNumber=2;}if(P1_6==0){delay1();while(P1_4==0);delay1();KeyNumber=3;}return KeyNumber;
}#ifndef __MatrixKey_H__
#define __MatrixKey_H__unsigned char MatrixKey();
#endif
/*延时部分*/
#include <REGX52.H>
#include "intrins.h"
void delay()
{
unsigned int i;for(i=0;i<200;i++);
}#ifndef __delay_h__
#define __delay_h__
void delay();
#endif
/*中断部分*/
#include <REGX52.H>
#include "delay.h"
#include "DigitalTube.h"
unsigned int time=0,num=0,num2=0,num3=0;void InitTimer0()//中断初始化
{TMOD=0X01;TH0=(65535-50000)/256;//高八位TL0=(65535-50000)%256; //低八位EA=1;//中断打开ET0=1;//定时器中断打开TR0=1;//定时器打开
}
void delay1()
{unsigned int i;for(i=0;i<30000;i++);
}
void show()
{while(1){print(num3/10,1);print(num3%10,2);print(10,3);P0=0x00;print(num2/10,4);print(num2%10,5);print(10,6);print(num/10,7);print(num%10,8);P1=0xFF;P1_0=0;if(P1_4==0)
{delay1();while(P1_4==0);delay1();num++;}if(P1_5==0){delay1();while(P1_4==0);delay1();num2++;}if(P1_6==0){delay1();while(P1_4==0);delay1();num3++;}}
}
void exter1() interrupt 1
{TH0 = (65535-50000)/256;TL0 = (65535-50000)%256; time++;if(time==20){time=0;    num++;}   if(num==60){num=0;num2++;} if(num2==60){num2=0;num3++;}if(num3==24){num3=0;}
}#ifndef __Time_h__
#define __Time_h__
void show();
void InitTimer0();
void MatrixKey();
#endif

/*主函数*/
#include <REGX52.H>
#include "DigitalTube.h"
#include "Time.h"
main()
{InitTimer0();while(1){show();}
}

结论

这一章重点就是理解定时器/计数器的寄存器,能够配置寄存器。代码实现秒表的原理是——中断时间是50毫秒,累计20次就是1秒,每累计20次就置0。

C51单片机学习笔记之定时器相关推荐

  1. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

  2. c51单片机学习笔记-LED流水灯实验

    目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...

  3. C51单片机学习笔记(一)——搭建开发环境及烧写工具

    C51单片机学习笔记(一)--搭建开发环境及烧写工具 文章目录 C51单片机学习笔记(一)--搭建开发环境及烧写工具 1.搭建软件开发环境及使用(Keil uVision) 2.将程序下载到单片机(烧 ...

  4. AutoLeaders控制组——51单片机学习笔记(定时器、串口通信)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  5. C51单片机学习笔记之串口通信

    简介 串口通信就是单片机和pc之间的一种通信方式. 通信方式:并行,串行,同步,异步(最常用的) 传输方向:单工,半双工(不同时间),全双工 基本结构 ​ 相关寄存器 SCON串口控制寄存器(主要用方 ...

  6. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

  7. 51单片机学习笔记之定时器程序设计

    一.定时器/计数器概述 1.相关寄存器 (1)TMOD--方式控制寄存器 GATE C/T M1 M0(T1 T0) GATE=0,定时器/计数器的运行由内部TR0/TR1置1选通: GATE=1,定 ...

  8. C51单片机学习笔记之矩阵键盘

    简介 矩阵键盘一般为4×4或4×3的.矩阵键盘的判断方式分按行扫描和按列扫描. 简单说就是给全体一个高电平,然后给一个按键的一端附上低电平,再判断另一端是否为低电平. 原理图 代码部分 #includ ...

  9. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

最新文章

  1. 服务器中加速BIOS启动的方法
  2. python3 获取文件夹中的文件列表
  3. Colossal Fibonacci Numbers! UVA - 11582(斐波那契求模)+快速幂+周期规律
  4. “约见”面试官系列之常见面试题之第五十四篇之语义化标签(建议收藏)
  5. Centos7中Memcached安装使用说明
  6. 【学习笔记】第二章——线程与多线程模型
  7. mat 和asmatrix的区别_R语言的稀疏矩阵太大可能就不能用as.matrix了
  8. 浙大 PAT a1027
  9. 网易编程题-操作序列
  10. F2FS文件系统二 实验分析f2fs文件系统
  11. 山东大学高频电子线路实验三 正弦波振荡器实验详解
  12. 向量与直线,梯度与法向量,切向量
  13. 【解决】Yandex浏览器Bing搜索遭遇trovi.com劫持
  14. docker的创建 指定CPU 内存 网络 硬盘_为什么 CPU 访问硬盘很慢
  15. 微信小程序之二级联动下拉列表
  16. python随机生成验证码,数字+大小写字母
  17. livp图片批量转jpg转换器无损苹果heic手机照片格式软件mac
  18. (转载)你好,C++(6)2.3 C++兵器谱
  19. 关于区块链的三个隐喻
  20. 一篇文章看懂三种存储方式DAS、NAS、SAN

热门文章

  1. 32 位 Win7 用 4G 内存破解加去水印全攻略
  2. 第二课学会组装计算机 教案,《计算机组装与维护第2章教案.doc
  3. AP6256完美代替AP6255
  4. Jama包的矩阵操作
  5. 20230211英语学习
  6. Riak - 背景篇(2)
  7. Error 1044: Access denied for user ‘syz-remote‘@‘%‘ to database ‘webapp‘
  8. SpringMVC系列之基本配置
  9. 魔兽世界 助手 无法连接服务器,魔兽世界军团再临助手无法登录解决办法分享...
  10. 设置电脑眼睛保护色_百度经验