📄 hardware_delay_50ms.c
字号:
/*------------------------------------------------------------------*-
Hardware_Delay_50ms.C (v1.00)
------------------------------------------------------------------*/
#include <reg52.h>
sbit LED_pin = P1^0;
bit LED_state_G;
void LED_FLASH_Init(void);
void LED_FLASH_Change_State(void);
void DELAY_HARDWARE_One_Second(void);
void DELAY_HARDWARE_50ms(void);
void main(void)
{
LED_FLASH_Init();
while(1)
{
LED_FLASH_Change_State(); // Change the LED state (OFF to ON, or vice versa)
DELAY_HARDWARE_One_Second(); // Delay for approx 1000 ms
}
}
/*----------------------------------------------------------------
LED_FLASH_Init()
Prepare for LED_Change_State() function - see below.
------------------------------------------------------------------*/
void LED_FLASH_Init(void)
{
LED_state_G = 0;
}
/*------------------------------------------------------------------*-
LED_FLASH_Change_State()
Changes the state of an LED (or pulses a buzzer, etc) on a
specified port pin.
Must call at twice the required flash rate: thus, for 1 Hz
flash (on for 0.5 seconds, off for 0.5 seconds) must call
every 0.5 seconds.
-*------------------------------------------------------------------*/
void LED_FLASH_Change_State(void)
{
// Change the LED from OFF to ON (or vice versa)
if (LED_state_G == 1)
{
LED_state_G = 0;
LED_pin = 0;
}
else
{
LED_state_G = 1;
LED_pin = 1;
}
}
/*******************************************
DELAY_HARDWARE_One_Second()
Hardware delay of 1000 ms. *** Assumes 12MHz 8051 (12 osc cycles) ***
********************************************/
void DELAY_HARDWARE_One_Second(void)
{
unsigned char d;
for (d = 0; d < 10; d++) // Call DELAY_HARDWARE_50ms() twenty times
{
DELAY_HARDWARE_50ms();
}
}
/*******************************************
DELAY_HARDWARE_50ms()
Hardware delay of 50ms.
*** Assumes 12MHz 8051 (12 osc cycles) ***
********************************************/
void DELAY_HARDWARE_50ms(void)
{ // Configure Timer 0 as a 16-bit timer
TMOD &= 0xF0; // Clear all T0 bits (T1 left unchanged)
TMOD |= 0x01; // Set required T0 bits (T1 left unchanged)
ET0 = 0; // No interupts
// Values for 50 ms delay
TH0 = 0x3C; // Timer 0 initial value (High Byte)
TL0 = 0xB0; // Timer 0 initial value (Low Byte)
TF0 = 0; // Clear overflow flag
TR0 = 1; // Start timer 0
while (TF0 == 0); // Loop until Timer 0 overflows (TF0 == 1)
TR0 = 0; // Stop Timer 0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -