使用定时器实现延时功能
main.c
#include "delay.h"
sbit LED = P1^0;
void main(void)
{
/*P1.0 准双向口模式*/
P1M0 = 0x00;
P1M1 &= ~(0x01);
EA = 1;
ET0 = 1;
while(1)
{
LED = 1;
delay_ms(250); //250ms
LED = 0;
delay_ms(250); //250ms
}
}
delay.h
#ifndef DELAY_H
#define DELAY_H
#include <STC8H.H>
static unsigned int count = 1;
void Timer0_Init_ms(void); //1毫秒
void Timer0_Init_us(void); //1微秒
void delay_ms(unsigned int ms); //延时毫秒
void delay_us(unsigned int us); //延时微秒
#endif
//static unsigned int TL = (65536-T*MAIN_Fosc)%256;
//static unsigned int HL = (65536-T*MAIN_Fosc)/256;
delay.c
#include "delay.h"
/*定时器T0初始化*/
void Timer0_Init_ms(void) //24MHz 1毫秒
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x40; //设置定时初始值
TH0 = 0xA2; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void Timer0_Init_us(void) //24MHz 1微秒
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xE8; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void delay_ms(unsigned int ms)
{
count = ms;
Timer0_Init_ms();
while(count);
TR0 = 0; //定时器0停止计时
}
void delay_us(unsigned int us)
{
count = us;
Timer0_Init_us();
while(count);
TR0 = 0; //定时器0停止计时
}
void Timer0() interrupt 1
{
--count;
}