|
关于定时器0和1的使用
1、中断使能寄存器 IE(可位寻址)
IE 的结构如下:
EA * ET2 ES ET1 ES ET1 EX1 ET0 EX0
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
- }
复制代码 |
|