📄 hardware_delay_50ms.lst
字号:
C51 COMPILER V6.21 HARDWARE_DELAY_50MS 01/23/2002 17:26:36 PAGE 1
C51 COMPILER V6.21, COMPILATION OF MODULE HARDWARE_DELAY_50MS
OBJECT MODULE PLACED IN Hardware_Delay_50ms.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Hardware_Delay_50ms.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*------------------------------------------------------------------*-
2
3 Hardware_Delay_50ms.C (v1.00)
4
5 ------------------------------------------------------------------
6
7 A test program for hardware-based delays.
8
9 COPYRIGHT
10 ---------
11
12 This code is associated with the book:
13
14 EMBEDDED C by Michael J. Pont
15 [Pearson Education, 2002: ISBN: 0-201-79523-X].
16
17 This code is copyright (c) 2001 by Michael J. Pont.
18
19 See book for copyright details and other information.
20
21 -*------------------------------------------------------------------*/
22
23 #include <reg52.h>
24
25 sbit LED_pin = P1^5;
26 bit LED_state_G;
27
28 void LED_FLASH_Init(void);
29 void LED_FLASH_Change_State(void);
30
31 void DELAY_HARDWARE_One_Second(void);
32 void DELAY_HARDWARE_50ms(void);
33
34 /*..................................................................*/
35
36 void main(void)
37 {
38 1 LED_FLASH_Init();
39 1
40 1 while(1)
41 1 {
42 2 // Change the LED state (OFF to ON, or vice versa)
43 2 LED_FLASH_Change_State();
44 2
45 2 // Delay for approx 1000 ms
46 2 DELAY_HARDWARE_One_Second();
47 2 }
48 1 }
49
50 /*------------------------------------------------------------------*-
51
52 LED_FLASH_Init()
53
54 Prepare for LED_Change_State() function - see below.
55
C51 COMPILER V6.21 HARDWARE_DELAY_50MS 01/23/2002 17:26:36 PAGE 2
56 -*------------------------------------------------------------------*/
57 void LED_FLASH_Init(void)
58 {
59 1 LED_state_G = 0;
60 1 }
61
62
63 /*------------------------------------------------------------------*-
64
65 LED_FLASH_Change_State()
66
67 Changes the state of an LED (or pulses a buzzer, etc) on a
68 specified port pin.
69
70 Must call at twice the required flash rate: thus, for 1 Hz
71 flash (on for 0.5 seconds, off for 0.5 seconds) must call
72 every 0.5 seconds.
73
74 -*------------------------------------------------------------------*/
75 void LED_FLASH_Change_State(void)
76 {
77 1 // Change the LED from OFF to ON (or vice versa)
78 1 if (LED_state_G == 1)
79 1 {
80 2 LED_state_G = 0;
81 2 LED_pin = 0;
82 2 }
83 1 else
84 1 {
85 2 LED_state_G = 1;
86 2 LED_pin = 1;
87 2 }
88 1 }
89
90 /*------------------------------------------------------------------*-
91
92 DELAY_HARDWARE_One_Second()
93
94 Hardware delay of 1000 ms.
95
96 *** Assumes 12MHz 8051 (12 osc cycles) ***
97
98 -*------------------------------------------------------------------*/
99 void DELAY_HARDWARE_One_Second(void)
100 {
101 1 unsigned char d;
102 1
103 1 // Call DELAY_HARDWARE_50ms() twenty times
104 1 for (d = 0; d < 20; d++)
105 1 {
106 2 DELAY_HARDWARE_50ms();
107 2 }
108 1 }
109
110 /*------------------------------------------------------------------*-
111
112 DELAY_HARDWARE_50ms()
113
114 Hardware delay of 50ms.
115
116 *** Assumes 12MHz 8051 (12 osc cycles) ***
117
C51 COMPILER V6.21 HARDWARE_DELAY_50MS 01/23/2002 17:26:36 PAGE 3
118 -*------------------------------------------------------------------*/
119 void DELAY_HARDWARE_50ms(void)
120 {
121 1 // Configure Timer 0 as a 16-bit timer
122 1 TMOD &= 0xF0; // Clear all T0 bits (T1 left unchanged)
123 1 TMOD |= 0x01; // Set required T0 bits (T1 left unchanged)
124 1
125 1 ET0 = 0; // No interupts
126 1
127 1 // Values for 50 ms delay
128 1 TH0 = 0x3C; // Timer 0 initial value (High Byte)
129 1 TL0 = 0xB0; // Timer 0 initial value (Low Byte)
130 1
131 1 TF0 = 0; // Clear overflow flag
132 1 TR0 = 1; // Start timer 0
133 1
134 1 while (TF0 == 0); // Loop until Timer 0 overflows (TF0 == 1)
135 1
136 1 TR0 = 0; // Stop Timer 0
137 1 }
138
139 /*------------------------------------------------------------------*-
140 ---- END OF FILE -------------------------------------------------
141 -*------------------------------------------------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 68 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
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 + -