(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

一、定时器的原理

1、CPU时序的有关知识

2、在学习定时器之前需要明白的

3、定时/计数器的工作原理

4、51单片机定时器结构

二、定时/计数器的控制

1、工作方式寄存器TMOD

2、控制寄存器TCON

三、定时/计数器的工作方式

1、方式0

2、方式1

3、方式2

4、方式3

5、初始化程序应完成如下工作:

6、计数器初值的计算

四、编写程序


一、定时器的原理

1、CPU时序的有关知识

振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)

状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。

机器周期:1个机器周期含6个状态周期,12个振荡周期。

指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

例如:外接晶振为12MHz时,51单片机相关周期的具体值为:

振荡周期=1/12us;

状态周期=1/6us;

机器周期=1us;

指令周期=1~4us;

2、在学习定时器之前需要明白的

51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。

定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。

有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。

3、定时/计数器的工作原理

定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

4、51单片机定时器结构

定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

二、定时/计数器的控制

51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

1、工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

GATE是门控位, GATE=0时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。

C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。

M1M0:工作方式设置位。定时/计数器有四种工作方式。

2、控制寄存器TCON

TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控 制定时/计数器的启动和中断申请。其格式如下:

TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。

TR0(TCON.4):T0运行控制位,其功能与TR1类同。

三、定时/计数器的工作方式

1、方式0

方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

定时器模式时有:N=t/ Tcy

计数初值计算的公式为:X=213-N。

定时器的初值还可以采用计数个数直接取补法获得。

计数模式时,计数脉冲是T0引脚上的外部脉冲。

门控位GATE具有特殊的作用。当GATE=0时,经反相 后使或门输出为1,此时仅由TR0控制与门的开启,与门输出 1时,控制开关接通,计数开始;当GATE=1时,由外中断引 脚信号控制或门的输出,此时控制与门的开启由外中断引脚 信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的 高电平启动计数,外中断引脚信号引脚的低电平停止计数。 这种方式常用来测量外中断引脚上正脉冲的宽度。

2、方式1

方式1的计数位数是16位,由TL0作为低8位,TH0 作为高8位,组成了16位加1计数器 。

计数个数与计数初值的关系为:X=216-N

3、方式2

方式2为自动重装初值的8位计数方式

计数个数与计数初值的关系为:X=28-N

工作方式2特别适合于用作较精确的脉冲信号发生器。

4、方式3

方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 

工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。

5、初始化程序应完成如下工作:

对TMOD赋值,以确定T0和T1的工作方式。

计算初值,并将其写入TH0、TL0或TH1、TL1。

中断方式时,则对EA赋值,开放定时器中断。

使TR0或TR1置位,启动定时/计数器定时或计数。

6、计数器初值的计算

机器周期也就是CPU完成一个基本操作所需要的时间。

机器周期=1/单片机的时钟频率。

51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。机器周期=1/1M=1us。

而我们定时1ms的初值是多少呢,1ms/1us=1000。也就是要计数1000个数,初值=65535-1000+1(因为实际上计数器计数到66636才溢出)=64536=FC18H

四、编写程序

//通过定时器0实现灯一秒闪烁
#include"reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led = P2^0;   //D1void Timer0Init()     //定时器0的初始化
{TMOD |= 0x01;     //低四位为0001,工作方式选择方式1//1ms定时,51初值为FC18TH0 = 0XFC;         //定时为1ms时高八位为FCTL0=0X18;           //定时为1ms时低八位为18EA=1;               //打开总中断开关EX0=1;                //开外部中断0IT0=1;             //设置外部中断的触发方式
}void main()
{   Timer0Init();while(1);
}void Time0() interrupt 1
{static u16 i;TH0=0XFC;TL0=0X18;i++;if(i==1000){i=0;led=~led;       //将灯翻转}
}

C语言课设项目-51单片机-定时器和计数器相关推荐

  1. C语言课设项目-51单片机-数码管

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 静态数码管 1.数码管是如何显示出字符 显示器及其接口 共阴数码管码表 开发板数码管电路图 2.数码管 ...

  2. 单片机课设基于51单片机的波形发生器(公开资源)(四种波形)(同时输出两种波形)

    单片机课设-波形发生器 前言 一.课设任务是什么? 二.如何解决这几个任务? 三.仿真原理图 四.代码 4.1 LCD1602代码 4.2 波形输出以及8*8点阵显示代码 4.3 波形选择 五.仿真源 ...

  3. 【优秀课设】51单片机LCD1602显示的温度控制系统设计 包括时间显示 校时、设置最值温度报警功能

    1.将DS18B20温度传感器的温度读出来,并在LCD1602上显示出来. 2.在LCD上分别切换显示,软件设计时钟(时.分.秒),和当前温度值,和温度上下控制值.并可以通过按键进行修改设置,温度高于 ...

  4. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)

    51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...

  5. 51单片机c语言定时器程序,51单片机定时器设置入门与程序解析

    89C51单片机有两个计数器T0和T1,每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535. 其次.提供给定时器 ...

  6. c语言学生成绩查询课设报告,C语言课设报告(学生考试成绩查询程序)【荐】.doc...

    C语言课设报告(学生考试成绩查询程序)[荐].doc 学生考试成绩查询程序 学号:******** 姓名:***** 完成日期:****年月 通过键盘输入学生的考试信息,包括:学号.姓名.课程名称.学 ...

  7. 微机原理实验8254计算机钢琴,GitHub - SincereXIA/PianoMFC: 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC...

    PianoMFC 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC 需要连接西电微机原理实验室提供的 QTH9054 微机试验箱,使用其蜂鸣器发声,若不连接,程序会直接播放 mp3 文 ...

  8. 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程

    仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...

  9. 51单片机定时器(T0/T1)的使用与配置流程

    第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...

最新文章

  1. adb 提示adb server version(31) doesn't match this client(40) 解决办法
  2. 怎么表示一个PHP语句块,php switch语句多个值匹配同一代码块应用示例
  3. Centos7 docker 安装 zookeeper
  4. oracle数据泵索引创建慢,IMPDP 很慢的原因探究
  5. 棋魂桌面壁纸图片|大火影视壁纸找高图
  6. Python之进程+线程+协程(并发与并行、GIL锁、同步锁、死锁、递归锁)
  7. Android复习资料
  8. Python训练文本情感分析模型
  9. pdg file的打开
  10. 从1G说到5G:构造万物互联的社会
  11. hexo博客可以在百度谷歌搜索到
  12. 2021动画渲染农场排名出炉,渲染101综合领先,赛诚和瑞云Renderbus紧随其后!
  13. 《学会呼吸》书中的精髓:如何通过训练自己的呼吸,逐步改善健康问题?
  14. 英语介词at、in、on常见用法(时间、地点、方位)
  15. 关于win10开始菜单点击无反应解决方案
  16. 灰度共生矩阵(GLCM)并计算能量、熵、惯性矩、相关性(matlab)(待总结)
  17. RK3288原理图和PCB,RK3288核心板硬件设计资料汇总
  18. Niagara N4 与物联网的学习经验分享(一 New Station)
  19. 分布式事务常见解决方案
  20. php网页转html网页怎么弄

热门文章

  1. Python 集合11 |并集
  2. [手搓 RISC-V 高性能模拟器]笔记一
  3. 用Python实现问卷星自动填写(超详细!!!)
  4. ElasticSearch-美丽优雅
  5. 心田花开:三年级上册语文课程《荷塘月色》赏析
  6. 传奇GM调整极品属性的命令------技术分享
  7. vue-element-admin项目采用keep-alive全缓存,删除标签移除指定的缓存
  8. LInux 服务器状态查询
  9. JAVA数独解题(五):X-wing(矩阵法)
  10. 五个保证在家办公的工作效率的关键因素