| 
[mw_shl_code=c,true]#include"stm8s103k3.h"
void TIM1_Init(unsigned int us);
void TIM1_over_test(void);
void t1_delay_us(unsigned int t_us);
_Bool LED1 @PC_ODR:2;
unsigned char t_over;
void GPIO_Init(void)//初始化GPIO
{
	PC_DDR = 0x04;
	PC_CR1 = 0x04;              
	PC_CR2 = 0x00;
	
}
main()
{
	
	GPIO_Init();
	
	while(1)
	{
		LED1=1;
		t1_delay_us(40000);
		LED1=0;
	  t1_delay_us(4000);
	}  
}
void TIM1_Init(unsigned int us)//延时函数,延时时间=单位时间*初值us
{
	
	TIM1_PSCRH = 0;  
	TIM1_PSCRL = 19;//时钟分频,每个单位为10us
	TIM1_ARRH=(unsigned char)(us>>8);//自动重装载
	TIM1_ARRL=(unsigned char)us;
	TIM1_IER=0X00;
	TIM1_CNTRH=(unsigned char)(us>>8);//赋予初值
	TIM1_CNTRL=(unsigned char)us;
	TIM1_CR1 |=0x01;//开计数器
	
}
void TIM1_over_test(void)//判断是否产生更新事件
{
	while(t_over==1)
	{
		if((TIM1_SR1&0x01)==0x01)//如果产生更新时间,则将标志位清零,判断位清零
		{
			TIM1_SR1&=0xfe;
			t_over=0;
		} 	
	}	
}
void t1_delay_us(unsigned int t_us)//延时函数
{
	 TIM1_Init(t_us);//对计数器赋初值
	 TIM1_SR1&=0xfe;//标志位清零,这句位置非常重要,不能修改到void TIM1_Init(unsigned int us)中,否则程序部延时[/mw_shl_code]
[mw_shl_code=c,true]          t_over=1;
	 TIM1_over_test();
	 TIM1_CR1=0X00;//关计数器
}	[/mw_shl_code]
程序思路,将定时器tim1做出一个方便使用的延时函数。在此程序中led灯会闪烁。 
 |