相关的特殊寄存器, 请查看有关资料
程序代码如下:

定时器
1
#include <reg52.H>
2
//使发光二极管按1000ms亮, 300ms暗, 300ms亮, 1000ms暗, 1000ms亮
.这样循环下去
.
3
/**//*
4
测试定时器的4种工作模式
5
单片机时钟为11.0592MHz, 1个机器周期为1.085us.
6
计算初值:又定时器0为例, 计算值为N us
7
模式0: TH0 = (2^13 - (N/1.085)) / 2^5 = (8192 - N/1.085) / 32, TL0 = (8192 - N/1.085) % 32;
8
模式1: TH0 = (2^16 - (N/1.085)) / 2^8 = (65536 - N/1.085) / 256, TL0 = (65536 - N/1.085) % 256;
9
模式2: TH0 = TL0 = 2^8 - N/1.085 = 256 - N/1.085;
10
模式3: 对于定时器0, 分成2个8位计数器; 对于定时器1, 停止计数
11
*/
12
13
unsigned char t0Count, t1Count; //存放计时器中断次数
14
unsigned char t0H, t0L, t1H, t1L; //存放初值
15
16
//T0模式0, 计时5ms
17
void time0() interrupt 1
18

{
19
t0Count++;
20
}
21
22
//T1模式1, 计时50ms
23
void time1() interrupt 3
24

{
25
t1Count++;
26
}
27
28
void main()
29

{
30
t0Count = 0;
31
t1Count = 0;
32
t0H = (8192 - 5000 / 1.085) / 32;
33
t0L = (8192 - 5000 / 1.085);
34
t0L %= 32;
35
t1H = (65536 - 50000 / 1.085) / 256;
36
t1L = (65536 - 50000 / 1.085);
37
t1L %= 256;
38
39
TH0 = t0H; TL0 = t0L; //初值, 计时5ms
40
TH1 = t1H; TL1 = t1L; // 计时50ms
41
42
EA = 1; //允许中断
43
ET0 = 1; //允许定时器0, 定时器1中断
44
ET1 = 1;
45
TMOD = 0x10; //T1模式1, T0模式0: TMOD = 0001 0000B
46
P1 = 0;
47
TR1 = 1; //先让T1开始计时, T0停止
48
TR0 = 0;
49
while(1)
50
{
51
if(t1Count==20) //够1000ms
52
{
53
if(!P1) //二极管是亮的, 则换频率
54
{
55
TR1 = 0; //让T0开始计时, T1停止
56
TR0 = 1;
57
}
58
TH1 = t1H; TL1 = t1L; // 计时50ms
59
t1Count = 0;
60
P1 = ~P1;
61
}
62
else if(t0Count==60) //够300ms
63
{
64
if(!P1) //二极管是亮的, 则换频率
65
{
66
TR1 = 1; //让T1开始计时, T0停止
67
TR0 = 0;
68
}
69
TH0 = t0H; TL0 = t0L; // 计时5ms
70
t0Count = 0;
71
P1 = ~P1;
72
}
73
}
74
}
posted @ 2007-03-14 20:55
MK2 阅读(430)
评论(0) 编辑 收藏 所属分类:
S 单片机/SCM/MCU/PLC