TC0TC1功能和使用方法是一样的,所以这里只介绍TC0

与定时器TC0相关的寄存器共有5;TC0M,TC0C,INTRQ,INTEN,TC0R

一、TC0M模式寄存器

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0M

TC0ENB

TC0rate2

TC0rate1

TC0rate0

TC0CKS

ALOAD0

TC0OUT

PWM0OUT

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

Bit0PWM0OUTpwm输出控制位

0=禁止pwm0输出

1=使能pwm0输出,占空比由TC0OUTALOAD0决定

Bit1TC0OUT;仅当PWM0OUT =0时有效

0=禁止,p54作为普通IO口使用

1=使能,p54输出TC0OUT信号

Bit2ALOAD0,自动装载控制。仅当PWM0OUT = 0 时有效。

0 = 禁止 TC0自动装载;
1 = 使能 TC0 自动装载。

Bit3TC0CKSTC0 时钟信号控制位。
0 = 内部时钟(FcpuFosc);
1 = 外部时钟,由 P0.0/INT0输入。

Bit6~bit4T0rate2~T0rate0T0分频选择位

T0时钟由CPU时钟分频而来,分频比如下;

T0rate2~T0rate0

分频比

000

fCPU/256

001

fCPU/125

010

fCPU/64

011

fCPU/32

100

fCPU/16

101

fCPU/8

110

fCPU/4

111

fCPU/2

Bit7T0ENBT0使能位,

0=不使能

1=使能

注:若 TC0CKS=1,则TC0 用作外部事件计数器,此时不需要考虑TC0RATE 的设置,P0.0 口无中断信号(P00IRQ0

二、TC0C计数寄存器

TC08位的计数器,计数范围为0-255,到255+1就溢出,

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0C

TC0C7

TC0C6

TC0C5

TC0C4

TC0C3

TC0C2

TC0C1

TC0C0

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

TC0时钟来源不同时,TC0C的计数范围也不一样,当TC0M寄存器中TC0CKS0= 0=计数脉冲来源为内部时钟(FcpuFosc),计数范围由PWM0OUTTC0OUTALOAD0决定。当TC0CKS0=1 =为外部计数模式,由 P0.0/INT0输入。计数范围为0-256

TC0CKS0

PWM0OUT

TC0OUT

ALOAD0

TC0C范围

计数多少次溢出

0

0

x

x

00H-0FFH

256

1

0

0

00H-0FFH

256

1

0

1

00H-3FH

64

1

1

0

00H-1FH

32

1

1

1

00H-0FH

16

1

00H-0FFH

256

TC0C初值=256-T0溢出间隔时间*时钟速度)

例;TC0C定时10msfCPU=1mTC0rate=010=fCPU/64,那么

TC0C初值=256-T0溢出间隔时间*时钟速度)

=256-10ms*fcpu/64))

=64H

三、TC0R自动重装寄存器

TC0 的自动装载功能由 TC0MALOAD0位控制。当 TC0C溢出时, TC0R的值自动装入 TC0C中。这样在使用的过程中就不需要在中断中重新赋值。

 

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

TC0R

TC0R7

TC0R6

TC0R5

TC0R4

TC0R3

TC0R2

TC0R1

TC0R0

/

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

复位

0

0

0

0

0

0

0

0

TC0R初值=256-T0溢出间隔时间*时钟速度),计算方法和TC0C一样。

四、中断请求寄存器INTRQ

五、中断请求使能寄存器INTEN

名称

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

复位

INTRQ

ADCIRQ

TC1IRQ

TC0IRQ

T0IRQ

SIOIRQ

P02IRQ

P01IRQ

P00IRQ

00000000

INTEN

ADCIEN

TC1IEN

TC0IEN

T0IEN

SIOIEN

P02IEN

P01IEN

P00IEN

00000000

置位寄存器INTEN的相应位可以使能相应的中断。

当中断发生时,寄存器INTRQ相应的位会被置1,这个中断标志位需要在中断中软件清零。TC0C溢出时,如果使能了TC0中断使能,则会产生TC0中断,TC0IRQ会被置1.

 

 

 

例;在cpu=1M情况下,T0中断定时10ms

#include<sn8p2612.h>

main()

{

FTC0IEN=0;//配置中断的时候最好先关闭相应中断

TC0M=0X24;//分频 fCPU/64,使能自动重装载

TC0R=0X64;//重装值

TC0C=0X64;//10ms初值

FTC0IEN=1;//开定时器T0中断

FGIE=1;//开总中断

 

while(1);

}

 

//所有中断共用一个入口,所以要在中断中查询相应的标志位的判断是哪个中断

 __interrupt T0INT(void)

{

 

if(FTC0IRQ=0) //T0中断查询

{

FTC0IRQ=0; //标志位手动清零

//中断处理函数,该干嘛干嘛去!

}

}

例;TC0作为外部脉冲计数器

 

#include<sn8p2612.h>

int TC0_OVER_COUNT=0; //中断溢出次数,溢出一次为256个脉冲

 

main()

{

unsigned int All_Count=0; //计数总值

FTC0IEN=0; //配置中断的时候最好先关闭相应中断

TC0M=0X08; //对外部脉冲计数

FTC0IEN=1; //开定时器T0中断

FGIE=1; //开总中断

 

while(1)

{

All_Count=TC0_OVER_COUNT*256+TC0C; //计算外部脉冲总值

}

}

 

//所有中断共用一个入口,所以要在中断中查询相应的标志位的判断是哪个中断

 __interrupt T0INT(void)

{

 

if(FTC0IRQ=0) //TC0中断查询

{

FTC0IRQ=0; //标志位手动清零

TC0_OVER_COUNT++;

}

}