OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2422|回复: 6

STM8L间隔1S闪烁

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2016-8-26 09:12:47 | 显示全部楼层 |阅读模式
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/


#include <stm8l052c6.h>
void delay(unsigned int time);
void main(void)
{
  int i;
    PD_DDR=0x03;         //设置PD0,PD1口为输出模式
    PD_CR1=0x03;         //设置PD0,PD1口为推挽输出
    PD_CR2=0x03;         //设置PD0,PD1口输出速率为16mhz
    CLK_CKDIVR=0x07;     //对HSI进行128分频,16MHZ/128=125KHZ
    for(i=0;i<10;i++)
    {
            PD_ODR=0xfe;      //PD1(红)亮
        delay(12500);           //延时1S
        PD_ODR=0xfc;            //PD1(红)灭
        delay(12500);           //延时1S
    }
}
void delay(unsigned int time)
{
  while(time--);
}
有需要的朋友可以来看看

天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2015-9-15
在线时间
98 小时
发表于 2016-8-29 13:22:18 | 显示全部楼层
请问下,你这个延时一秒怎么算的?
回复 支持 反对

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2016-8-29 15:33:19 | 显示全部楼层
weewwewe 发表于 2016-8-29 13:22
请问下,你这个延时一秒怎么算的?

我这个不够一秒的,你不要被后面的注释误解了。我这个是0.1s
天道酬勤
回复 支持 反对

使用道具 举报

18

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2015-9-15
在线时间
98 小时
发表于 2016-8-29 16:30:56 | 显示全部楼层
紫气东升 发表于 2016-8-29 15:33
我这个不够一秒的,你不要被后面的注释误解了。我这个是0.1s

恩恩,了解了。是说怎么不对。现在开始搞stm8了
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-3-24
在线时间
8 小时
发表于 2016-8-30 10:20:50 | 显示全部楼层
你开定时器来进行精确定时才行,你这时间也不对比如
/*******************************************************************************
**函数名称:void TIM2_Delayus(unsigned int us)
**功能描述:定时器2参进行精确延时,最小为1微秒,最大65535
**入口参数:unsigned int ms     1=< us <= 65535
**输出:无
*******************************************************************************/
void Delay_us(unsigned int us)
{
   
    TIM2_CR1 = 0x81;        //启动定时器2开始计数
    while(us--)
    {
      while( !(TIM2_SR1 & 0x01)); //等待计数是否达到1微秒
      TIM2_SR1 &= ~(0x01);  //计数完成1毫秒,清除相应的标志
    }
    TIM2_CR1 = 0x00;       //延时全部结束,关闭定时器2
}
/*******************************************************************************
**函数名称:void TIM2_DelayMs(unsigned int ms)
**功能描述:定时器2参进行精确延时,
**入口参数:unsigned int ms
**输出:无
*******************************************************************************/
void Delay_ms(unsigned int ms)
{
    uint x = 0 ;
    while (ms != x)
    {
     Delay_us(935);
     x += 1;
    }
}
/*******************************************************************************
**函数名称:void TIM2_Init()
**功能描述:定时器2参数初始化
**入口参数:无
**输出:无
*******************************************************************************/
void TIM2_Init()
{
  TIM2_PSCR = 0x00;     //定时器2预分频数为 1 分频,即定时器时钟 = 系统时钟 = 16MHz
  TIM2_ARRH = 0x00;     //设置1微秒时间自动重载 16000 / 1000  = 0x3e80 / 1000 = 16
  TIM2_ARRL = 16;     //

  TIM2_CNTRH = 0x00;    //清除计数寄存器
  TIM2_CNTRL = 0x00;    //
  TIM2_SR1 = 0x00;      //清除所有的中断标志

}
回复 支持 反对

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2016-8-30 14:45:01 | 显示全部楼层
hongor 发表于 2016-8-30 10:20
你开定时器来进行精确定时才行,你这时间也不对比如
/************************************************* ...

我不太会用定时器,这位大神能不能帮我放进我发的那个程序里面去,谢谢
天道酬勤
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-3-24
在线时间
8 小时
发表于 2016-8-31 17:53:40 | 显示全部楼层
本帖最后由 hongor 于 2016-8-31 17:55 编辑

妈呀,这么好的程序,你还要我给你放进去?我无语了,直接拷进去就能用了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-29 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表