52单片机定时器/计数器编程汇总
扫描二维码
随时随地手机看文章
/*----------------------------------------------------------------------
TMOD (89H)
T1 T0
GATE C/T` M1 M0 GATE C/T` M1 M0
------------------------------------------------------------------------
GATE=0时,TR0=1,T0就开始定时/计数
GATE=1时,TR0=1,INT0`=1,T0才开始定时/计数
C/T`=0,计数;C/T`=1,定时
M1 M0 工作方式 功能说明
0 0 方式0 13位定时/计数器(0~8192)
0 1 方式1 16位定时/计数器(0~65536)
1 0 方式2 可自动重载的8位定时/计数器(0~256)
1 1 方式3 定时/计数器0分为两个8位的计数器,关闭T1
------------------------------------------------------------------------
TCON (88H)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
------------------------------------------------------------------------
TF0/TF1=1,定时/计数器T0/T1溢出
TR0/TR1=0,定时/计数器T0/T1停止计数
TR0/TR1=1,GATE=0,定时/计数器T0/T1开始计数
TR0/TR1=1,GATE=1,INT0`=1/INT1`=1,定时/计数器T0/T1开始计数
IT0/IT1=1,外部中断INT0`/INT1`为边沿触发
IT0/IT1=0,外部中断INT0`/INT1`为低电平触发
IE0/IE1,外部中断INT0`/INT1`有中断请求信号时,置1
------------------------------------------------------------------------
IE (A8H)
EA - - ES ET1 EX1 ET0 EX0
AFH AEH ADH ACH ABH AAH A9H A8H
EA=1:允许所有中断 EA=0:禁止所有中断
ES=1:允许串行口中断 ES=0:禁止串行口中断
ET1=1:允许T1中断 ET1=0:禁止T1中断
EX1=1:允许INT1`中断 EX1=0:禁止INT1`中断
ET0=1:允许T0中断 ET0=0:禁止T0中断
EX0=1:允许INT0`中断 EX0=0:禁止INT0`中断
----------------------------------------------------------------------*/
/*---------------------------------------------------------
定时器初始化程序
-----------------------------------------------------------*/
void Init_Timer()
{
TMOD |= 0x01;
/* ---------------------------------------------------------------------------------
工作方式0 工作方式1 工作方式2 工作方式3
定时器0选用 0x00 0x01 0x02 0x03
定时器1选用 0x00 0x10 0x20 0x30
计数器0选用 0x04 0x05 0x06 0x07
计数器1选用 0x40 0x50 0x60 0x70
---------------------------------------------------------------------------------*/
TH0=0x00; //16位:(65536-X)/256 13位:(8192-X)/256
TL0=0x00; //16位:(65536-X)%256 13位:(8192-X)%256
EA=1; //总中断打开
ET0=1; //定时器0中断打开
TR0=1; //定时器0开关打开
}
/*---------------------------------------------------------
定时器中断子程序
interrupt 0 指明是外部中断0 using 0 是第0组寄存器
interrupt 1 指明是定时器中断0 using 1 是第1组寄存器
interrupt 2 指明是外部中断1 using 2 是第2组寄存器
interrupt 3 指明是定时器中断1 using 3 是第3组寄存器
interrupt 4 指明是串行口中断
---------------------------------------------------------*/
void Timer_isr() interrupt 1 using 1
{
TH0=0x00; //需重新赋值,除工作方式2外
TL0=0x00;
}