/**
TF2 定时器2 溢出标志。定时器2 溢出时置位,必须由软件清除。
当RCLK或TCLK=1 时,TF2 将不会置位。TR2 定时器2 启动/ 停止控制位。
置1 时启动定时器。C/T2 定时器/ 计数器选择。
(定时器2)
CP/RL2 捕获/ 重装标志。置位:EXEN2=1时,T2EX的负跳变产生捕获。
清 零:EXEN2=0 时,定时器2 溢出或T2EX 的负跳变都可使定时器自动重装
。当RCLK=1 或TCLK=1 时,该位无效且定时器强制为溢出时自动重装。
RCAP2H,RCAP2L是定时器T2一个专门存放预置数的寄存器。
定时器2 递增计数到0FFFFH,并在溢出后将TF2 置位,
然后将RCAP2L 和RCAP2H 中的16 位值作为重新装载值装入定时器2。
RCAP2L 和RCAP2H 的值是通过软件预设的。
[T2CON=0x09;//必须将T2CON.7位置1才能进行外部捕获 /或者外部T2EX由1到0时产生中断]
T2CON EQU 0C8H ; T2 控制寄存器,用以程控定时器2和外部中断操作格式
T2CON.7 TF2 溢出中断标志位
T2CON.6 EXF2 外部中断标志位
T2CON.5 RCLK 串行接口接受时钟标志位
T2CON.4 TCLK 串行接口发送时钟标志位
T2CON.3 EXEN2 外部允许控制位
T2CON.2 TR2 运行控制为
T2CON.1 C/T2 定时器/计数器功能选择位
T2CON.0 CP/RL2 捕捉/重装载标志位
T2MOD EQU 0C9H ; T2 控制寄存器,用以定时器2在装入计数方式选择
; T2MOD.0 DCEN 向下计数允许位
; T2MOD.1 T2OE T2输出允许位
TL2 EQU 0CCH ; T2 计数寄存器低字节
TH2 EQU 0CDH ; T2 计数寄存器高字节
TR2 EQU 0C8H.2 ; T2 启动位
RCAP2L EQU 0CAH ; T2 计数重载寄存器低字节
RCAP2H EQU 0CBH ; T2 计数重载寄存器高字节
TF2 EQU 0C8H.7 ; 定时计数器2计满回零溢出中断请求标志位
ET2 EQU IE.5 ; 定时器T2中断允许
;PT2 EQU IP. ; 定时器T2的中断优先级控制位,
或的书写方式 TMOD|=0x30;
书写格式:
void Time2_Init(void) interrupt 5
{
EA=1; //开启总中断
ET2=1; //允许T2中断 .T2CON 师T2的控制寄存器
EXEN2=0; //定时器2 溢出或T2EX 的负跳变都可使定时器自动重装(也得软件清零溢出位,不然没法自动重装)
C_T2=0; // 定时器/ 计数器选择 0= 内部定时器(OSC/12 或OSC/6) 1= 外部事件计数器(下降沿触发)
TF2=0; //溢出位软件清零
RCAP2L=(65535-18432)%256; //捕获模式
RCAP2H=(65535-18432)/256;
}
**/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Led=P0^0; //定义LED位
void Timer2() interrupt 5 //调用定时器2,自动重装载模式(也得软件清零溢出位)
{
static uchar i=0; //定义静态变量i
TF2=0; //定时器2的中断标志要软件清0
i++; //计数标志自加1
if(i==16) //判断是否到1s
{
i=0; //将静态变量清0
Led=~Led; //LED位求反
}}
void main()
{
TH2=(65536-62500)/256; //重装载计数器赋初值
TL2=(65536-62500)%256;
ET2=1;//开定时器2中断
EA=1;//开总中断
TR2=1;//开启定时器,并设置为自动重装载模式
while(1);
}
完整资料打包(含仿真):