june_t 发表于 2010-5-4 16:15

单片机定时器0和1的使用

关于定时器0和1的使用
1、中断使能寄存器 IE(可位寻址)
IE 的结构如下:
EA*ET2ESET1ESET1EX1ET0EX0
EA:使能标志位,置位则所有中断使能,复位则禁止所有中断
EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
*   :保留
ET2 :定时器2中断使能
ES   :串行通信中断使能
ET1 :定时器1中断使能
EX1 :外部中断1(INT1)使能
ET0 :定时器0中断使能
EX0   :外部中断0(INT0)使能
故如果要使用定时器0,则 IE = 0x02
如果要使用定时器0和串行通信,则 IE = 0x12
如果要使用定时器0和1,则 IE = 0x0A
如此类推。
最后 EA=1

2、定时器的工作方式
定时器的工作方式由特殊功能寄存器 TMOD 来设置。通过改变 TMOD ,软件可控制两个定时的工作方式和时钟源(是I/O口的触发电平还处理器的时钟脉冲)。TMOD 的高四位控制定时器1,低四位控制定时器0。TMOD 的结构如下:
GATE   C/T   M1   M0      GATE   C/T    M1   M0
      定时器1                |      定时器0
GATE    :当GATE置位时,定时器仅当TR=1并且INT=1时才工作,
如果GATE=0,置位TR定时器就开始工作
C/T       :定时器方式选择。如果C/T=1,定时器以计数方式工作,C/T=0时,以定时方式工作
M1      :模式选择位高位
M0      :模式选择位低位
可通过 C/T 位的设置来选择定时器的时钟源。 C/T=1, 定时器以计数方式工作(对 I/0引脚脉冲计数),C/T=0 时,以定时方式工作(对内部时钟脉冲计数)。当定时器用来对内部时钟脉冲计数时,可通过硬件或软件来控制。GATE=0 为软件控制, 置位 TR 定时器就开始工作, GATE=1为硬件控制, 当 TR=1并且 INT=1时定时器才工作。 当 INT 脚给出低电平时, 定时器将停止工作。 这在测量 INT 脚的脉冲宽度时十分有用 ,当然 ,INT 脚不作为外部中断使用。
故要使用 Timer0 和 Timer1 (16位),且用软件控制,以定时方式工作时,设置 TMOD = 0x11

例子:
使用的晶掁频率是 11.0592MHz


TMOD = 0x11;// T0、T1 16-bits timer
IE = 0x1A;//com & timer0 & timer1 interrupt enable
//Timer0 per 20ms interrupt
TH0 = 0xB8;
TL0 = 0x00;
//Timer1 per 50ms interrupt
TH1 = 0x4C;
TL1 = 0x00;
TR0 = 1; //Timer0 start
TR1 = 1; //Timer1 start

void Timer0(void) interrupt 1   //Timer0
{
TR0 = 0; //Stop count time
TH0 = 0xb8;
TL0 = 0x00;
//add work code here ...
TR0 = 1; //Start
}
void Timer1(void) interrupt 3   //Timer1
{
TR1 = 0; //Stop count time
TH1 = 0x4c;
TL1 = 0x00;
//add work code here ...
TR1 = 1; //Start
}

june_t 发表于 2010-5-4 16:17

学校应该有很多人学单片机的
页: [1]
查看完整版本: 单片机定时器0和1的使用