一般用到的和定时器有关的寄存器有中断允许寄存器IE,定时器工作模式寄存器TMOD,定时器控制寄存器TCON。
TMOD不能进行位寻址,单片机复位时全部清零。
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
定时器1 |
定时器0 |
定时器有4种工作方式
M1 |
M0 |
|
0 |
0 |
方式0, 13位定时器 |
0 |
1 |
方式1, 16位定时器 |
1 |
0 |
方式2, 8位初值自动重装定时器 |
1 |
1 |
方式3, 仅用于T0,分2个8位计数器,T1不计数 |
IE里的EA为全局中断总开关,打开后其他中断才能打开,打开方式为EA=1.
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
EA |
。。 |
ET2 |
Es |
ET1 |
EX1 |
ET0 |
EX0 |
全局中断 |
。。 |
定时器2 |
串口 |
定时器1 |
中断1 |
定时器0 |
中断0 |
TCON控制定时器开始工作
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0\ |
|
定时器1 |
|
定时器0 |
中断1 |
|
中断0 |
|
中断服务函数的写法:
Void name() interrupt 中断号;
中断号1为定时器0, 3是定时器1。
一般启动定时器的流程如下:
1. 设置TMOD,设定工作方式,
2. 装入初值TH0/1,TL0/1,
3. 设置IE打开中断。
4. 设置TCON,启动定时器.
一个简单的启动例程:
Void main()
{
TMOD= 0x01;
TH0=(65536-50000)/256;
TH1=(65536-50000)%256
IE=0x82;
TCON=0x10;
While(1);
}
Void t0ex() interrupt 1
{
TH0=(65536-50000)/256;
TH1=(65536-50000)%256
….
}