这是制作一个开关的设备,程序设置4次开关已经实现功能,但是在增加开关次数或者改大延时时间时会出现,开关只切换一次,或者不切换的现象有没有PIC大神知道是什么情况,因为以前也是试过同一个函数使用一次延时一段时间再重复使用一次,重复这种操作超过几次就会跑飞的想象。有没有人试过这样的情况。、···
#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
__CONFIG(0x31D4);//配置位
uint i;
void delay(uint x);
void init()//初始化函数
{
ANSEL=0;//禁止模拟输入
TRISIO=0;//端口设置全部输出
GPIO2=0;//原来GPIO=0;设置输出高电平
// delay(5000);//稳定点灯延时
INTCON=0XC0;//中断配置设置
TMR1IE=1;//开启中断
TMR1L=(65536-3000)%256;//中断初始值高位设置
TMR1H=(65536-3000)/256;//中断初始值低位设置
T1CON=0X01;//定时器开启
}
void main()
{
init();
while(1)
{
if(i==20000) //开关设置
{
T1CON=0;//定时器关
i=0;
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开1
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开2
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开3
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开4
/* delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开5
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开6
T1CON=0X01;//定时器开*/
}
}
}
void interrupt kk()
{
T1IF=0;
TMR1L=(65536-3000)%256;//设置时间3000us
TMR1H=(65536-3000)/256;
i++;
}
void delay(uint x)//毫秒延时
{
uint a,b;
for(a=x;a>0;a--)
for(b=108;b>0;b--);
}
|