#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;
}
}
}
}
请问下为什么在红字上面一直检查不到定时器一标志位有更新 从而忽略跳过了
|