其他分享
首页 > 其他分享> > 2021-05-15

2021-05-15

作者:互联网

目录

 

0x00 前言

0x01 定时器/计数器的控制

一、定时器/计数器的方式控制寄存器(TMOD)

二、定时器/计数器控制寄存器(TCON)

0x02 题目要求与解题

一、题目

二、解题

1、步骤理解

2、代码与成品图

0x03 反思与总结


0x00 前言

0x01 定时器/计数器的控制

一、定时器/计数器的方式控制寄存器(TMOD)

定时器/计数器方式寄存器TMOD的格式

位序

B7

B6

B5

B4

B3

B2

B1

B0

位符号

GATE

C/~T

M1

M0

GATE

C/~T

M1

M0

 

高4位(T1)

低4位(T0)

例:TMOD=0x05(0000 0101),则T1=0,T0=5。在T0中,GATE=0,C/~T=0,M1M2=01

TMOD寄存器的功能理解

位符号

取值

功能

GATE

0

仅受TCON寄存器控制

1

还受外部中断引脚(INT0/INT1)上电平影响

C/~T

0

定时器模式

1

计数器模式

M1M0

00

方式0,13位定时器/计数器。高8位,低5位。2^13=最高计数值8192

01

方式1,16位定时器/计数器。高8位,低8位。2^16=最高计数值65536

10

方式2,带初值自动重装的8位定时器/计数器

11

方式3,仅T0,且T0分成两个独立的8位寄存器,此时T1停止工作

注:

1、TMOD寄存器:特殊功能寄存器,用于控制定时器/计数器T0、T1的工作方式

2、TMOD寄存器的字节地址为89H,只能进行字节操作,即仅能对TMOD寄存器整体赋予初值

二、定时器/计数器控制寄存器(TCON)

定时器/计数器控制寄存器TCON的格式

位地址

8F

8E

8D

8C

8B

8A

89

88

位符号

TF1

TR1

TF0

TR0

 

 

 

 

TCON寄存器的功能理解

位符号

取值

功能

TF1/TF0

0

定时器/计数器的溢出标志位。溢出时TF*=1,则定时器/计数器中断请求

注:若查询该标志位,当检测到TF*=1时,需要软件清0(TF*=0)

例:while(TF0==0); TF=0;    //不断查询TF0是否为1,来判断时间的到达

1

TR1/TR0

0

定时器/计数器的启动/停止位

启动:TR*=1,若GATE=0,则直接启动;反之(GATE=1),则需要INT*为高电平才能启动

1

0x02 题目要求与解题

一、题目

  1. 选用定时/计数器T0,工作方式1,按键按三次加1。
  2. 选用定时/计数器T1,工作方式2,按键按五次加1。
  3. 仿真原理图:

image.png

二、解题

1、步骤理解

2、代码与成品图

1.选用定时/计数器T0,工作方式1,按键按三次加1

#include <reg51.h>
//要求:选用定时/计数器T0(只用寄存器TMOD的低四位),工作方式1(16位定时器),按键按三次加1
unsigned char num[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}; //共阳极
unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极
unsigned char count=0;
void main(){
    TMOD=0x05; //0000 0101
    TH0=(65536-3)/256; //按三下,即减去3,再右移八位作为最高位
    TL0=(65536-3)%256;
    TR0=1;
    P0=num[count]; 
    P2=s[count];
    
    while(1){
        while(TF0==0);
        TF0=0; 
        count++;
        P0=num[count%10];
        P2=s[count%10];
        TH0=(65536-3)/256;
        TL0=(65536-3)%256;
    }
}
 

2.选用定时/计数器T1,工作方式2,按键按五次加1

#include <reg51.h>
//要求:选用定时/计数器T1(只用寄存器TMOD的高四位),工作方式2(8位定时器,初值自动重装载),按键按五次加1
unsigned char num[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}; //共阳极
unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极
unsigned char count=0;
void main(){
    TMOD=0x60; //0110 0000
    TH1=256-5; //按五下,即减去5得初值
    TL1=256-5;
    TR1=1;
    P0=num[count]; 
    P2=s[count];
    
    while(1){
        while(TF1==0);
        TF1=0; 
        count++;
        P0=num[count%10];
        P2=s[count%10];
        //TH1=256-5;
        //TL1=256-5;
    }
}

image.png

0x03 反思与总结

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:count,定时器,15,05,T0,计数器,TMOD,2021,寄存器
来源: https://blog.csdn.net/weixin_46318141/article/details/116858984