N76E003的定时器/计数器 0和1

定时器/计数器 0和1
N76E003系列定时器/计数器 0和1是2个16位定时器/计数器。每个都是由两个8位的寄存器组成的16位计数寄存器。

对于定时器/计数器0,高8位寄存器是TH0、 低8位寄存器是TL0。

同样定时器/计数器1也有两个8位寄存器, TH1 和TL1。

TCON 和 TMOD 可以配置定时器/计数器0和1的工作模式。

通过TMOD中的 位来选择定时器或计数器功能。

每个定时器/计数器都有选择位,TMOD的第2位选择定时器/计数器0功能,TMOD的第6位选择定时器/计数器1功能。

将它们设置为定时器后,定时器将对系统时钟周期计数。

定时器0通过设置T0M(CKCON.3)位,定时器1通过设置T1M(CKCON.4)位,来选择定时器时钟是系统时钟(FSYS)的12分频或直接是系统时钟。

在计数器模式下,每当检测到外部输入脚T0上的下降沿,计数寄存器的内容就会加一。如果在一个时钟周期采样到高电平,在下一个时钟周期采样到低电平,那么T0或T1引脚就会确认为一个由高到低的跳变。

当有定时器溢出发生,定时器0和1能配置引脚T0/T1自动翻转输出。

这个功能通过设P2S寄存器的T0OE和T1OE来设置,分别对应于定时器0和定时器1。当打开这个功能,输出端口在第一个定时溢出之前输出逻辑1。为确保此模式功能, 位应该被清除并且选择系统时钟作为定时器的时钟源。

注意:TH0(TH1)和TL0(TL1)是独立分开访问。需要特别注意,在模式0或模式1下时,当读/写TH0(TH1)和TL0(TL1)之前,必须清除TR0(TR1)来停止计时。否则将产生不可预料的结果。

模式0(13位定时器)
在模式 0, 定时器/计数器是13位的计数器。13位的计数器由TH0 (TH1) 和TL0 (TL1)的低五位组成。TL0 (TL1)的高三位被忽略。当TR0 (TR1)置位且GATE是0或 是1时,定时器/计数器使能。GATE设置为1可以通过定时器来计算外部输入引脚上输入脉冲的宽度。当13位的定时器计数值从1FFFH变为0000H后,定时器溢出标志TF0 (TF1) 置位,如果中断打开,此时会产生一个定时器中断。

#define TH0_INIT        0xFC //[email protected]=12MHz, Period = (10.85/2) [email protected]=22.1184MHz
#define TL0_INIT        0x0F
#define TH1_INIT        0xE0 //[email protected]=12MHz, Period = (5.425/2) [email protected]=22.1184MHz
#define TL1_INIT        0x00
TMOD = 0XFF;
    Set_All_GPIO_Quasi_Mode;
    TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration
    TIMER1_MODE0_ENABLE;

    clr_T0M;
    clr_T1M;

    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    TH1 = TH1_INIT;
    TL1 = TL1_INIT;

//    set_ET0;                                    //enable Timer0 interrupt
    set_ET1;                                    //enable Timer1 interrupt
    set_EA;                                     //enable interrupts

    set_TR0;                                    //Timer0 run
//    set_TR1;                                    //Timer1 run
TMOD = 0XFF;


Set_All_GPIO_Quasi_Mode; 设置引脚模式

#define   P14_OpenDrain_Mode   P1M1|=SET_BIT4;P1M2|=SET_BIT4
    TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration

#define TIMER0_MODE0_ENABLE TMOD&=0xF0

//-------------------- Timer1 function define --------------------
#define        TIMER0_MODE0_ENABLE        TMOD&=0xF0
#define        TIMER0_MODE1_ENABLE        TMOD&=0xF0;TMOD|=0x01
#define        TIMER0_MODE2_ENABLE        TMOD&=0xF0;TMOD|=0x02
#define        TIMER0_MODE3_ENABLE        TMOD&=0xF0;TMOD|=0xF3
    clr_T0M;
    clr_T1M;
#define clr_PWMCKS  CKCON   &= ~SET_BIT6
#define clr_T1M     CKCON   &= ~SET_BIT4
#define clr_T0M     CKCON   &= ~SET_BIT3
#define clr_CLOEN   CKCON   &= ~SET_BIT1

    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    TH1 = TH1_INIT;
    TL1 = TL1_INIT;
#define TH0_INIT        0xFC //[email protected]=12MHz, Period = (10.85/2) [email protected]=22.1184MHz
#define TL0_INIT        0x0F
#define TH1_INIT        0xE0 //[email protected]=12MHz, Period = (5.425/2) [email protected]=22.1184MHz
#define TL1_INIT        0x00
 
    set_ET1;                                    //enable Timer1 interrupt

#define set_ET1 ET1 = 1

    set_EA;                                     //enable interrupts

    set_TR0;                                    //Timer0 run
 

中断服务函数:

void Timer0_ISR (void) interrupt 1          //interrupt address is 0x000B
{
    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    P12 = ~P12;                                                            // GPIO toggle when interrupt
}

模式1(16位定时器)

模式1与模式0 非常相似,只是模式1下定时器/计数器为16位的,就是说是用THx和TLx的全部16位用来计数。当
计数值由FFFFH向0000H翻转后,定时器相应的溢出标志TF0(TF1)置1,如果中断使能则将产生中断。

模式2(8位自动重装载定时器)
模式2下定时器/计数器为自动重装模式。此模式下TL0(TL1)是一个8位的计数器,TH0(TH1)保存重装计数
值。当TL0(TL1)溢出后,TCON中的TF0(TF1)标志置位且TH0(TH1)中内容重装至TL0(TL1),然后继续计数过
程。重装过程中TH0(TH1)内的值保持不变.该特征最好地适用于UART波特率发生器,不需要连续软件介入。

模式3(两组独立8位定时器)
定时器0和定时器1的模式3有着不同的工作方式。对定时器/计数器1来说模式3会将其停用;对定时器/计数器0来
说,模式3下TL0和TH0是2个独立的8位计数寄存器。模式3下TL0使用定时器0的控制位:如 GATE, TR0,

(TMOD.2)来决定。TH0 只能对时钟周期计和 TF0。TL0也可以用来对T0 脚上的1到0 跳变计数,由

数,并使用定时器/计数器1的控制位(TR1和TF1)。当需要额外的8位定时器时可以使用模式3 。当定时器0配
置为模式3时,定时器1可以通过配置其进入或离开模式3的方式来打开或关闭自己。定时器1依然可以工作在模
式0、1、2下,但它的灵活性受到限制。虽然基本功能得以维持,但已不能对TF1和TR1进行控制。此时定时器1
依然可以使用GATE脚、T1M。它同样可以用作串行口的波特率发生器或其他不需要中断的应用。

原文地址:https://www.cnblogs.com/zhugeanran/p/9180609.html

时间: 2024-12-09 11:27:10

N76E003的定时器/计数器 0和1的相关文章

定时器/计数器0之定时器

/* 效果说明: 定时器中断:通过单片机计数使程序执行 一秒中断一次,中断发生时高四位亮一秒,中断发生后又回到主程序 */ #include <reg51.h> #include <stdio.h> unsigned int i; void delay()//延时子函数 { i=1000000; while(i--);//执行一次大概要一毫秒 这里给它一秒就是中断发生时高四位亮一秒 } //中断初始化 void zhongduan1() { ET0 = 1;//启动计数器中断开关

51单片机中断机制(定时器/计数器)

单片机中断简介 52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下: INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 - 外部中断1,由P3.3端口线引入,低电平或下降沿引起 T0    - 定时器/计数器0中断, 由T0计数器计满回零引起 T1    - 定时器/计数器1中断, 由T1计数器计满回零引起 T2    - 定时器/计数器2中断, 由T2计数器计满回零引起 TI/RI - 串行口中断,串行端口完成一帧字符发送/接收后引起 其中T2是5

定时器计数器中断

定时器/计数器的工作由TMOD与TCON两个寄存器控制,TCON是控制寄存器,控制启动停止以及设置溢出标志,TMOD确定工作方式和功能.计数器溢出时会使得TCON寄存器中TF0或者TF1置1,并向CPU发出中断请求. TMOD 工作方式寄存器 TMOD在单片机复位时全部被清零,其高四位设置定时器1,低四位设置定时器0:四位的意义如下: GATE:门控制位,=0定时器的启动停止仅受TCON寄存器控制,=1时受TCON控制器和外部中断引脚电平状态共同控制: C/T:定时器与计数器模式选择,=1为计数

单片机 定时器/计数器

一.什么是定时器/计数器 在51单片机中,定时器/计数器是用来实现定时功能,并且具有计数的功能,来实现对外部信号的计数. 二.定时器/计数器有什么类型 在51单片机中,分为软件定时器,不可编程硬件定时器,可编程定时器. 软件定时:CPU每执行一条指令时,是需要固定时间的,所以,通过执行空指令可以达到延时的效果,这样子做的代价是占用CPU时间,所以一般很少这么做. 不可编程硬件定时器:是由电路和硬件来完成定时功能的,一般采用基电路,外接定时部件(电阻和电容),通过改变电阻的阻值和电容的电容值来修改

定时器/计数器实验报告

/************************************************* 实验名称:定时器实验一 实验目的:利用定时器/计数器让发光二极管以1HZ闪烁 *************************************************/ #include<reg52.h> sbit P10 = P1^0; unsigned char flag; void main() { flag = 0; P10 = 0; TH0 = 0xfe; TH0 = 0x

毕业回馈-89c51之定时器/计数器(Timer/Count)

今天分享的是89c51系列单片机的内部资源定时器/计数器,在所有的嵌入式系统中都包含这两个内部功能. 首先先了解几个定时器/计数器相关的概念: ?时钟周期:时钟周期 T 是时序中最小的时间单位,具体计算的方法就是1/时钟源频率,(一般单片机采用的是11.0592mHz) ?机器周期:我们的单片机完成一个操作的最短时间.标准51单片机,一个机器周期是 12 个时钟周期,也就是 12/11059200 秒. ?定时器:当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加1,计数

N76E003之定时器3

定时器3是一个16位自动重装载,向上计数定时器.用户可以通过配置T3PS[2:0] (T3CON[2:0])选择预分频,并写入重载值到R3H 和R3L寄存器来决定它的溢出速率.用户可以设置TR3 (T3CON.3)来开始计数.当计数跨过FFFFH,TF3 (T3CON.4)置为1,且R3H 和R3L寄存器的内容重载到内部16位计数器.如果ET3 (EIE1.1)置为1,定时器3中断服务程序被执行.当进入中断服务程序,TF3会被硬件自动清零.定时器3同时也用作串口波特率产生定时器,详细内容请参考章

nrf51822-硬件(3)-定时器/计数器TIMER(IK-51822DK开发套件)

一.Timer 原理 定时器是单片机的重要外设之一,可用于定时.精确延时.计数等.而且Time在运行时不占用CPU时间,在配置好后,可以和CPU并行工作,实现精确的定时和计数.并可以通过软件控制其来产生中断,使用起来方便灵活. 在NRF51822中共有3个定时器,对应的编号为TIMER0.TIMER1.TIMER2,都可以分别工作在定时模式和计数模式下.其原理结构体如下: Timer模块从PCLK1M/PCLK16M处获取时钟源,然后经分频后的到时钟作为Timer的时钟(即图中的fTIMER),

定时器计数器工作方式

1.方式0          方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成.TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求. 方式1      方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器 . 计数个数与计数初值的关系为:X=216-N 方式2      方式2为自动重装初值的8位计数方式. 计数个数与计数初值的关系为:X=28-N工作方式2特别适合于用作较精确的脉冲信号发生器.