📄 ex10-3.lst
字号:
C51 COMPILER V8.18 EX10_3 11/30/2009 13:21:27 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE EX10_3
OBJECT MODULE PLACED IN ex10-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex10-3.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "stc12c5a.h"
2 #include "intrins.h"
3
4 sbit Begin_Led = P1^2; //系统开始工作指示灯
5 unsigned char Is_Power_Down = 0; //判断是否进入掉电模式标志
6 sbit Is_Power_Down_Led_INT0 = P1^7; //掉电唤醒指示灯,在INT0中
7 sbit Not_Power_Down_Led_INT0 = P1^6; //不是掉电唤醒指示灯,在INT0中
8 sbit Is_Power_Down_Led_INT1 = P1^5; //掉电唤醒指示灯,在INT1中
9 sbit Not_Power_Down_Led_INT1 = P1^4; //不是掉电唤醒指示灯,在INT1中
10 sbit Power_Down_Wakeup_Pin_INT0 = P3^2; //掉电唤醒管脚,INT0
11 sbit Power_Down_Wakeup_Pin_INT1 = P3^3; //掉电唤醒管脚,INT1
12 sbit Normal_Work_Flashing_Led = P1^3; //系统处于正常工作状态指示灯
13 void Normal_Work_Flashing(void);
14 void INT_System_init(void);
15 void INT0_Routine(void);
16 void INT1_Routine(void);
17
18 void main(void)
19 {
20 1 unsigned char j=0;
21 1 unsigned char wakeup_counter = 0; //中断唤醒次数变量初始为0
22 1
23 1 Begin_Led = 0; //系统开始工作指示灯
24 1 INT_System_init(); //中断系统初始化
25 1
26 1 while(1)
27 1 {
28 2 P2 = ~wakeup_counter; //中断唤醒次数显示,先将wakeup_counter取反
29 2 wakeup_counter++; //中断唤醒次数显示
30 2 for(j=0;j<2;j++)
31 2 Normal_Work_Flashing(); //系统正常工作指示灯
32 2 Is_Power_Down = 1; //进入掉电模式之前,将其置为1,以供判断
33 2 PCON = 0x02; //执行完此句,单片机进入掉电模式,外部时钟停止振荡
34 2 _nop_();
35 2 //外部中断唤醒后,首先执行上句,然后才会进入中断服务程序
36 2 _nop_(); //建议多加几个空操作指令NOP,以便观察
37 2 _nop_(); //建议多加几个空操作指令NOP
38 2 }
39 1 }
40 void INT_System_init(void) //中断系统初始化
41 {
42 1 IT0 = 0; //外部中断0,低电平触发中断
43 1 EX0 = 1; //允许外部中断0 中断
44 1 IT1 = 1; //外部中断 1,下降沿触发中断
45 1 EX1 = 1; //允许外部中断1中断
46 1 EA = 1; //开总中断控制位
47 1 }
48 void INT0_Routine(void) interrupt 0 //外部中断0服务程序
49 {
50 1 if(Is_Power_Down) //判断掉电唤醒标志
51 1 {
52 2 Is_Power_Down = 0;
53 2 Is_Power_Down_Led_INT0 = 0; //点亮外部中断0掉电唤醒指示灯
54 2 while(Power_Down_Wakeup_Pin_INT0==0); //等待变高
55 2 Is_Power_Down_Led_INT0 = 1; //关闭外部中断0掉电唤醒指示灯
C51 COMPILER V8.18 EX10_3 11/30/2009 13:21:27 PAGE 2
56 2 }
57 1 else
58 1 {
59 2 Not_Power_Down_Led_INT0 = 0; //点亮外部中断0正常工作中断指示灯
60 2 while(Power_Down_Wakeup_Pin_INT0==0); //等待变高
61 2 Not_Power_Down_Led_INT0 = 1; //关闭外部中断0正常工作中断指示灯
62 2 }
63 1 }
64 void INT1_Routine(void) interrupt 2 //外部中断1服务程序
65 {
66 1 if(Is_Power_Down) //判断掉电唤醒标志
67 1 {
68 2 Is_Power_Down = 0;
69 2 Is_Power_Down_Led_INT1 = 0; //点亮外部中断1掉电唤醒指示灯
70 2 while(Power_Down_Wakeup_Pin_INT1==0); //等待变高
71 2 Is_Power_Down_Led_INT1 = 1; //关闭外部中断1掉电唤醒指示灯
72 2 }
73 1 else
74 1 {
75 2 Not_Power_Down_Led_INT1 = 0; //点亮外部中断1正常工作中断指示灯
76 2 while(Power_Down_Wakeup_Pin_INT1==0); //等待变高
77 2 Not_Power_Down_Led_INT1 = 1; //关闭外部中断1正常工作中断指示灯
78 2 }
79 1 }
80 void delay(void)
81 {
82 1 unsigned int j,k;
83 1
84 1 for(k=0;k<2;++k)
85 1 {
86 2 for(j=0;j<=30000;++j)
87 2 {
88 3 _nop_();
89 3 _nop_();
90 3 _nop_();
91 3 _nop_();
92 3 _nop_();
93 3 _nop_();
94 3 _nop_();
95 3 _nop_();
96 3 }
97 2 }
98 1 }
99 void Normal_Work_Flashing(void)
100 {
101 1 Normal_Work_Flashing_Led = 0;
102 1 delay();
103 1 Normal_Work_Flashing_Led = 1;
104 1 delay();
105 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 157 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -