?? interrupt.lst
字號:
C51 COMPILER V7.50 INTERRUPT 09/20/2008 15:21:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE INTERRUPT
OBJECT MODULE PLACED IN interrupt.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE interrupt.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********interrupt.c****************/
2 #include "interrrupt.h"
3 extern xdata uchar state;
4 extern xdata uchar liangcheng;
5 extern xdata refreshTime;
6 extern xdata refreshTemp;
7
8 idata Counter periodCounters[COUNTERS_LEN];
9 Counter periodCounter;
10 //uint counts[6];
11 //uint count=0;
12 idata uchar DownCount=0 ;
13 bit T2ExDown2=0;
14 xdata uchar CountFor1s=0;
15
16
17 #define IGNORE 4
18
19 void InitInterrupt(); //初始化中斷
20
21 void InitInterrupt()
22 {
23 1 // PCA0MD=0x0B;//使用外時鐘8分頻,允許CF中斷
24 1 // EIE1 =0x08;//EPCA0置1,允許PCA0中斷
25 1
26 1
27 1 EX0=1;//外部中斷0
28 1 IT1=1;//沿觸發(fā)方式
29 1 //IT1=0;//
30 1 CKCON=0xF0; //定時器1,2,4系統(tǒng)時鐘不分頻,定時器0使用12分頻
31 1
32 1 TMOD=0x21;
33 1 TH0=0;TL0=0;
34 1
35 1 PT0=0;//低優(yōu)先級
36 1 ET0=1;
37 1 TR0=1;
38 1
39 1 EA=1;
40 1 //EX1=1;//打開外部中斷1
41 1 //IT1=0;//電平觸發(fā)方式
42 1
43 1 //EIE2=0x10;//打開外部中斷6
44 1 //P3IF=0x00;//使用默認值,下降沿觸發(fā)
45 1
46 1
47 1 }
48
49
50 void INT1() interrupt 2 using 1 //外部中斷1
51 {
52 1 if(++DownCount<=8)//if(++DownCount<=2*IGNORE)
53 1 return;//舍棄前IGNORE次結果
54 1
55 1 if(DownCount%2==1)
C51 COMPILER V7.50 INTERRUPT 09/20/2008 15:21:11 PAGE 2
56 1 {
57 2 //periodCounter.Low16=
58 2 TR1=1; //開定時器
59 2 }
60 1 else
61 1 {
62 2 TR1=0;
63 2 periodCounters[DownCount/2-5]=periodCounter;//periodCounters[DownCount/2-(IGNORE+1)]=periodCounter;
64 2 periodCounter=0;
65 2 }
66 1 if(DownCount==20)//if(DownCount==((IGNORE*+COUNTERS_LEN)*2))
67 1 {
68 2 ET1=0;
69 2 EX1=0;//關閉外部中斷0
70 2 DownCount=0;
71 2 // interrupted=1;
72 2 state=CALCU;
73 2 }
74 1
75 1
76 1 }
77
78
79
80 void Timer1() interrupt 3 using 3
81 {
82 1 periodCounter++;
83 1
84 1 // TEST=!TEST;
85 1 }
86
87
88 void Timer0() interrupt 1 using 1
89 {
90 1 ++CountFor1s;
91 1 if(32==CountFor1s)
92 1 refreshTime=1;
93 1 if(64==CountFor1s)
94 1 {
95 2 refreshTime=1;
96 2 refreshTemp=1;
97 2 CountFor1s=0;
98 2 }
99 1 }
100
101
102 /*
103 void PCATimer() interrupt 9 using 3
104 {
105 TR1=0;
106
107 }*/
108
109
110 //way 1
111 void Timer2() interrupt 5 using 2 //the number of the input pulse arrived 65536
112 {
113 1 TR1=0;
114 1 TR2=0;
115 1 EA=0;
116 1
117 1 periodCounters[DownCount++]=periodCounter;
C51 COMPILER V7.50 INTERRUPT 09/20/2008 15:21:11 PAGE 3
118 1 periodCounter=0;
119 1
120 1 if(DownCount==3)
121 1 {
122 2 DownCount=0;
123 2 ET2=0;
124 2 ET1=0;
125 2 state=CALCU;
126 2 }
127 1 else
128 1 {
129 2 switch(liangcheng)
130 2 {
131 3 case 4:break;
132 3 case 3:TH2=0xfc;TL2=0x18;break;//1000 periods
133 3 case 2:TH2=0xff;TL2=0x9c;break;//100 periods
134 3 case 1:TH2=0xff;TL2=0xf6;//10 periods
135 3 case 5:TH2=0xff;TL2=0xfb;//2 periods
136 3 }
137 2
138 2 EA=1;
139 2 TR1=1;
140 2 TR2=1;
141 2 }
142 1 TF2=0;
143 1
144 1 }
145
146
147
148 /*
149 //way 2
150
151 void Timer2() interrupt 5 using 2 //
152 {
153
154 if(EXF2)
155 {
156 EXF2 = 0; // Reset Capture Flag
157
158 }
159 else if(TF2)
160 {
161 TF2 = 0;
162 }
163
164
165 if(T2ExDown2==0)
166 {
167 T2ExDown2=1;
168 }
169 else
170 {
171 periodCounter=RCAP2H*256+RCAP2L ;
172 EXEN2=0;
173 T2ExDown2=0;
174 TR2=0;
175 TH2=0;
176 TL2=0;
177 }
178 EXF2=0;
179 }
C51 COMPILER V7.50 INTERRUPT 09/20/2008 15:21:11 PAGE 4
180 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 353 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = 25 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -