[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灯会闪烁。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
定时器的没去做了,本来STM8的定时器就不多,还用一个来做这个延时,就有点浪费了.
---------------------------------
这个不知道哦.
---------------------------------
我验证是可以的哦,至于你的死机,那就要找找原因了
我用的IAR编译器。
一周热门 更多>