📄 hardware_delay_50ms.c
字号:
/*--------------------------------------------------------------*-
Hardware_Delay_50ms.C(v1.00)
Author:06_Digital_Media
All Right Reserved
----------------------------------------------------------------
A test programe for hardware-based delays
-*--------------------------------------------------------------*/
#include <reg52.h>
sbit LED_pin = P1^5 ;
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){
//Change the LED state (OFF to ON ,or vice versa)
LED_FLASH_Change_State();
//Delay for approx 1000 ms
DELAY_HARDWARE_One_Second();
}
}
/*------------------------------------------------------------*-
LED_FLASH_Init()
Prepare for LED_Change_State() function - see below
-*------------------------------------------------------------*/
void LED_FLASH_Init(void){
LED_state_G = 0;
}
/*-------------------------------------------------------------*-
LED_FLASH_Change_State()
Change 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 1HZ 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 ;
//Call DELAY_HAREWARE_50ms twenty times
for(d=0 ; d<20;d++){
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 50ms delay
TH0 = 0x3C; //Timer 0 intial value (High Byte)
TL0 = 0xB0; //Timer 0 intial 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
}
/*-------------------------------------------------------------*-
--------------END OF FILE--------------------------------------
-*-------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -