打印
[STM8]

贴上源代码 请大家指导下STM8的

[复制链接]
1610|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w67599|  楼主 | 2012-12-29 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostm8s105k6.h>

unsigned int t;
unsigned int q;
void goip_device()           //引脚初始化
{
  PC_DDR=0x0E;          // PC123做继电器输出
PC_CR1=0x0E;

   PD_DDR=0x00;          // PD456做按键输入 PDX延时PD0启动PD2复位
PD_CR1=0x05;


}
void delay(unsigned int count)
{
  while(count--);
}

void DelayMS(unsigned int ms)
{
  unsigned char i;
  while(ms != 0)
  {
    for(i=0;i<250;i++)
    {
    }
    for(i=0;i<75;i++)
    {
    }
    ms--;  
  }     
}
void Delay1(void)
{
  if(t==1)
    DelayMS(5000);
     if(t==2)
    DelayMS(8000);
     if(t==3)
    DelayMS(10000);
            
            
          }



//_____________________________延迟1__________________________________________________
void TIM1_init()
{  
    TIM1_PSCRH = 0x1F;  // 8M系统时钟经预分频f=fck/(PSCR+1)
  TIM1_PSCRL = 0x3F;  // 每个计数周期1ms
  TIM1_IER = 0x00;  // 禁止中断
   
   TIM1_EGR = 0x01;   // 允许产生更新事件

   
   if(t==1)
   { TIM1_ARRH = 0x13;  //
     TIM1_ARRL = 0x88;  // 每记数5000次产生一次中断,即5s
   }
   
     if(t==2)
   
     {            TIM1_ARRH = 0x1F;  //                    
                  TIM1_ARRL = 0x40;  // 每记数8000次产生一次中断,即8s
   }
     
      
      
     if(t==3)
    {TIM1_ARRH = 0x27;  //
     TIM1_ARRL = 0x10;  // 每记数10000次产生一次中断,即10s
   }
   

       TIM1_CR1 = 0x01;  // 计数器使能,开始计数                              

}




//___________________________________主程序
//____________________________________________

void main(void)
{

goip_device();

t=1;

while (1)
{
   
   if(PD_IDR_IDR2==0)
   {
     
     DelayMS(20);
      
       if(PD_IDR_IDR2==0)
         
       {
         t++;
         if(t>4)
           t=1;
        DelayMS(20);
        while(!PD_IDR_IDR2);
        
       }
   }
   
    if(PD_IDR_IDR0==0)         //PD0启动
    {                         // PD456做按键输入 PD6延时PD5启动PD4复位
     DelayMS(200);
      
       if(PD_IDR_IDR0==0)        //开始工作    PC1=A PC2=B PC3=C
       {
         DelayMS(200);
         PC_ODR_ODR1=1;      //A吸合
          DelayMS(1000);     //吸合延时
         PC_ODR_ODR2=1;      //B继电器打开
                            //B继电器延时
          TIM1_init();
         
        while(!TIM1_SR1_UIF);
        TIM1_CR1=0x00;       关闭计数器
        TIM1_SR1=0x00;
         
        
        

         
           PC_ODR_ODR2=0;      //B继电器关闭
         PC_ODR_ODR3=1;      //c继电器打开
        DelayMS(2000);
         PC_ODR_ODR3=0;
           PC_ODR_ODR1=0;
         
         
         
         
         
         
       }
         
    }
   
   
   
   
}  
  
}




请问下为什么在红字上面一直检查不到定时器一标志位有更新  从而忽略跳过了
沙发
uet_cache| | 2012-12-29 20:55 | 只看该作者
定时器使能之前可以先清一下0.

使用特权

评论回复
板凳
w67599|  楼主 | 2012-12-29 21:35 | 只看该作者
uet_cache 发表于 2012-12-29 20:55
定时器使能之前可以先清一下0.

对哦·······昨晚改来改去改到三点 都乱了 多谢啊 本来以为不行的一直亮 后来耐心数了下20+s后灭了 原来我还没时钟分频 时间变久了 多谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝