-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path定时器计数器T1.c
91 lines (56 loc) · 2.84 KB
/
定时器计数器T1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include<reg52.h>
/*
中断的分类(1.外部中断 INT0,INT1,定时器/计数器的中断T0,T1,串行口RX/TX中断)
中断系统的组成,通俗点讲就是中断的全过程:1.中断请求(也叫中断源),
2.(1)中断允许控制,又包括外部中断INT0,1,允许 和定时器T0,T1允许,还有串行口中断允许
(2)中断选择执行方式,又称中断标志,是下降沿有效(io口默认高电平,输入一个低电平就是下降沿)还是低电平有效
3.然后执行中断函数 void interrupt_function() interrupt 0{ 0是中断号
中断号:0 代表执行外部中断0 /INT0 注意!!优先级
1 代表执行定时器0 T0中断 ..中断优先级 随中断号增大而降低
2 代表外部中断1 /INT1
3 代表定时器1 T1中断
4 代表串行口中断 TI,RI
}
***解析:2.(1)中断控制开关 EA=1;CPU中断总开关 0表示关闭 1表示打开
EX0=1;外部中断0 /INT0的开关 1表示打开 0表示关闭 打开代表允许外部中断执行
EX1=1;外部中断1 /INT1的开关 1表示打开 0表示关闭 打开表示使用找个中断
ET0=1;定时器/计数器 T0的中断开关 1表示打开,使用找个中断 0表示关闭
ET1=1;定时器/计数器 T1的中断开关 1表示打开使用这个中断,0表示关闭
ES=1;串行口中断允许 1为允许打开开关 0表示关闭
2.(2)允许了中断进行以后,就要选择中断执行的标志 也叫中断标志,例如P32=0,就标志着执行中断
IT0=1/0;外部中断0 /INT0 控制外部中断0发生的方式 1表示下降沿有效(IO口默认高电平,设置个低电平0就是成了下降沿),0表示低电平有效
IE0=1/0;外部中断0 /INT0 中断标志位,1表示有效,0表示无效
IT1=1/0;外部中断1 /INT1 发生中断的表示 1表示下降沿有效,0表示低电平有效
IE0=1/0;外部中断1 /INT1 中断标志位 1表示有效
TF0=1;定时器/计数器T0 溢出TF0会置1
TF1=1;定时器/计数器T1 溢出TF1会置1
*/
typedef unsigned int ui; //对数据类型进行声明定义
typedef unsigned char uc;
sbit led=P2^0;
void csh(){//定时器初始化的函数 T0定时器/计数器
/*初值a=65536-(f晶振频率/12)*t 为时间 单位是微妙us 将a转化为16进制,分别存入TH0 ,TL0 高八位和低八位
例如 a=FC18 然后TH0=0XFC; TL0=0X18;
*/ TMOD|=0X01;//0000 0001 GATE=0
TR1=1;//启动定时器/计数器T0
TH1=0XFF;//定时器高8位 初值=65536-100 100us
TL1=0X9C;//定时器低8位
ET1=1;//打开定时器T0中断
EA=1;//打开CPU总中断
}
void main(){
csh();
while(1);
}
int i=0;
void time0() interrupt 1
{//100us进来一次中断函数
TH1=0XFF;//初值=65536-100
TL1=0X9C;
//重新赋值
i++;
if(i==1000){
i=0;
led=~led;
}
}