📄 c_isr.lst
字号:
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE C_ISR
OBJECT MODULE PLACED IN C_ISR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C_ISR.c BROWSE DEBUG OBJECTEXTEND CODE
stmt level source
1 #include <c8051F320.h> //c8051F320SFR的C51格式头文件
2 //C51采用中断实现
3 //-----------------------------------------------------------------------------
4 // 全局常量
5 //-----------------------------------------------------------------------------
6 #define uchar unsigned char
7
8 #define T2L_VAL 0xc0 //定时器2计时为4MS
9 #define T2H_VAL 0xe0
10
11 #define T3L_VAL 0xc0 //定时器3计时为20MS
12 #define T3H_VAL 0x63
13
14 //uchar seg[] = {0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x8c};
15 //uchar un_dig[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
16 uchar code seg[] = {0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x8c};
17 uchar code un_dig[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
18
19 //-----------------------------------------------------------------------------
20 // 全局变量
21 //-----------------------------------------------------------------------------
22 uchar dd,second_count,ring_tmr,second,minute,hour,tmr3_done;
23 uchar disbuf[6];
24 bit tmr2_done;
25
26 sbit RED_LED = P0^7;
27 sbit GREEN_LED = P1^0;
28 sbit RING = P1^1;
29 //-----------------------------------------------------------------------------
30 // 函数原型
31 //-----------------------------------------------------------------------------
32 extern void lock (void);
33 void SYSCLK_Init (void);
34 void PORT_Init (void);
35 void Timer2_Init (void);
36 void Timer2_ISR (void);
37 void Timer3_Init (void);
38 void Timer3_ISR (void);
39 uchar da_adjust(uchar da);
40 //-----------------------------------------------------------------------------
41 // MAIN Routine
42 //-----------------------------------------------------------------------------
43 void main (void)
44 {
45 1 PCA0MD &= ~0x40;
46 1 lock ();
47 1 SYSCLK_Init ();
48 1 PORT_Init ();
49 1 Timer2_Init ();
50 1 Timer3_Init();
51 1 dd=0;
52 1 second_count=50;
53 1 second = 0;
54 1 minute = 0;
55 1 hour = 0;
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 2
56 1 EA = 1;
57 1 PCA0CPH4 = 0;
58 1 while (1)
59 1 {
60 2 if (tmr2_done == 1&tmr3_done != 8)
61 2 {
62 3 PCA0CPH4 = 0;
63 3 tmr2_done = 0;
64 3 tmr3_done++;
65 3 }
66 2 }
67 1 }
68 //-----------------------------------------------------------------------------
69 // SYSCLK_Init
70 //-----------------------------------------------------------------------------
71 void SYSCLK_Init (void)
72 {
73 1 PCA0MD &= 0xb1;
74 1 PCA0CPL4 = 255;
75 1 PCA0MD |= 0x40;
76 1 CLKMUL |= 0x80;
77 1 CLKMUL |= 0xc0;
78 1 CLKSEL |= 0x02;
79 1 }
80 //-----------------------------------------------------------------------------
81 // PORT_Init
82 //-----------------------------------------------------------------------------
83 void PORT_Init (void)
84 {
85 1 XBR1 = 0xc0;
86 1 P0MDOUT |= 0x80;
87 1 P1MDOUT |= 0x01;
88 1 P2MDOUT |= 0x00;
89 1 RED_LED = 1;
90 1 GREEN_LED = 0;
91 1 RING = 1;
92 1 }
93 //-----------------------------------------------------------------------------
94 // Timer2_Init
95 //-----------------------------------------------------------------------------
96 void Timer2_Init ()
97 {
98 1 TMR2L = T2L_VAL;
99 1 TMR2H = T2H_VAL;
100 1 TMR2RLL = T2L_VAL;
101 1 TMR2RLH = T2H_VAL;
102 1 ET2 = 1;
103 1 TR2 = 1;
104 1 }
105 //-----------------------------------------------------------------------------
106 // Timer3_Init
107 //-----------------------------------------------------------------------------
108 void Timer3_Init ()
109 {
110 1 TMR3L = T3L_VAL;
111 1 TMR3H = T3H_VAL;
112 1 TMR3RLL = T3L_VAL;
113 1 TMR3RLH = T3H_VAL;
114 1 EIE1 |= 0x80;
115 1 TMR3CN = 0x04;
116 1 }
117 //-----------------------------------------------------------------------------
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 3
118 // da_adjust
119 //-----------------------------------------------------------------------------
120 uchar da_adjust(uchar da)
121 {
122 1 if((da&0x0f)>9) da+=0x06;
123 1 if((da&0xf0)>0x90) da+=0x60;
124 1 return (da);
125 1 }
126 //-----------------------------------------------------------------------------
127 // Interrupt Service Routines
128 //-----------------------------------------------------------------------------
129 //-----------------------------------------------------------------------------
130 // Timer2_ISR
131 //-----------------------------------------------------------------------------
132 void Timer2_ISR (void) interrupt 5
133 {
134 1 TF2H = 0;
135 1 P1 |= 0xfc;
136 1 P2=seg[disbuf[dd]];
137 1 P1&=un_dig[dd];
138 1 if(dd == 5) dd=0;
139 1 else dd++;
140 1 tmr2_done = 1;
141 1 }
142 //-----------------------------------------------------------------------------
143 // Timer3_ISR
144 //-----------------------------------------------------------------------------
145 void Timer3_ISR (void) interrupt 14
146 {
147 1 TMR3CN &= 0x7F;
148 1 if(second_count != 0) second_count--;
149 1 else
150 1 {
151 2 second_count = 50;
152 2 RING = 0;
153 2 GREEN_LED =~ GREEN_LED;
154 2 RED_LED =~ RED_LED;
155 2 if(second < 0x59)
156 2 {
157 3 second++;second = da_adjust(second);
158 3 ring_tmr = 5;
159 3 }
160 2 else
161 2 {
162 3 second = 0;
163 3 if(minute < 0x59)
164 3 {
165 4 minute++;minute = da_adjust(minute);
166 4 ring_tmr = 25;
167 4 }
168 3 else
169 3 {
170 4 minute = 0;
171 4 ring_tmr = 50;
172 4 if(hour < 0x23)
173 4 {
174 5 hour++;
175 5 hour = da_adjust(hour);
176 5 }
177 4 else hour = 0;
178 4 }
179 3 }
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 4
180 2 disbuf[0]=(hour&0xf0)>>4;
181 2 disbuf[1]=hour&0x0f;
182 2 disbuf[2]=(minute&0xf0)>>4;
183 2 disbuf[3]=minute&0x0f;
184 2 disbuf[4]=(second&0xf0)>>4;
185 2 disbuf[5]=second&0x0f;
186 2 }
187 1 if(ring_tmr != 0)
188 1 {
189 2 ring_tmr--;
190 2 if(ring_tmr == 0) RING = 1;
191 2 }
192 1 tmr3_done = 0;
193 1 }
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 43
; SOURCE LINE # 44
; SOURCE LINE # 45
0000 53D9BF ANL PCA0MD,#0BFH
; SOURCE LINE # 46
0003 120000 E LCALL lock
; SOURCE LINE # 47
0006 120000 R LCALL SYSCLK_Init
; SOURCE LINE # 48
0009 120000 R LCALL PORT_Init
; SOURCE LINE # 49
000C 120000 R LCALL Timer2_Init
; SOURCE LINE # 50
000F 120000 R LCALL Timer3_Init
; SOURCE LINE # 51
0012 E4 CLR A
0013 F500 R MOV dd,A
; SOURCE LINE # 52
0015 750032 R MOV second_count,#032H
; SOURCE LINE # 53
0018 F500 R MOV second,A
; SOURCE LINE # 54
001A F500 R MOV minute,A
; SOURCE LINE # 55
001C F500 R MOV hour,A
; SOURCE LINE # 56
001E D2AF SETB EA
; SOURCE LINE # 57
0020 F5FE MOV PCA0CPH4,A
0022 ?C0001:
; SOURCE LINE # 58
; SOURCE LINE # 59
; SOURCE LINE # 60
0022 300004 R JNB tmr2_done,?C0004
0025 7F01 MOV R7,#01H
0027 8002 SJMP ?C0005
0029 ?C0004:
0029 7F00 MOV R7,#00H
002B ?C0005:
002B E500 R MOV A,tmr3_done
002D 6408 XRL A,#08H
002F 6004 JZ ?C0006
0031 7E01 MOV R6,#01H
0033 8002 SJMP ?C0007
0035 ?C0006:
0035 7E00 MOV R6,#00H
0037 ?C0007:
0037 EE MOV A,R6
0038 5F ANL A,R7
0039 60E7 JZ ?C0001
; SOURCE LINE # 61
; SOURCE LINE # 62
003B E4 CLR A
003C F5FE MOV PCA0CPH4,A
; SOURCE LINE # 63
003E C200 R CLR tmr2_done
; SOURCE LINE # 64
0040 0500 R INC tmr3_done
C51 COMPILER V7.07 C_ISR 01/20/2005 07:51:19 PAGE 6
; SOURCE LINE # 65
; SOURCE LINE # 66
0042 80DE SJMP ?C0001
; FUNCTION main (END)
; FUNCTION SYSCLK_Init (BEGIN)
; SOURCE LINE # 71
; SOURCE LINE # 72
; SOURCE LINE # 73
0000 53D9B1 ANL PCA0MD,#0B1H
; SOURCE LINE # 74
0003 75FDFF MOV PCA0CPL4,#0FFH
; SOURCE LINE # 75
0006 43D940 ORL PCA0MD,#040H
; SOURCE LINE # 76
0009 43B980 ORL CLKMUL,#080H
; SOURCE LINE # 77
000C 43B9C0 ORL CLKMUL,#0C0H
; SOURCE LINE # 78
000F 43A902 ORL CLKSEL,#02H
; SOURCE LINE # 79
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -