PIC12F675定时器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#define uint unsigned int
#define uchar unsigned char
#define clrwdt() asm("CLRWDT")
#define key GPIO3
#define key_dir TRIS3
#define on 0;
#define off 1;
uchar n=0;
uchar s=0;
uchar m=0;
uchar time_set=0;
void init(void)
{
CMCON=0X07;
ANSEL=0X00;
OPTION=0x87;
TRISIO=0;
key_dir = 1;
TMR0 = 156;
GIE = 1;
T0IE = 0;
T0IF = 1;
GPIO=0xFF;
}
void delay()
{
static uint i;
for(i=10000;i>0;i--)
clrwdt();
}
void output()
{
if((GPIO1&&GPIO2&&GPIO4&&GPIO5)||(!GPIO1&&GPIO2&&GPIO5&&GPIO4))
{
time_set = 10;
GPIO4=0;
GPIO1=1;GPIO2=1;GPIO5=1;
}
else if(GPIO1&&GPIO2&&(!GPIO4)&&GPIO5)
{
time_set = 20;
GPIO5=0;
GPIO1=1;GPIO4=1;GPIO2=1;
}
else if(GPIO1&&GPIO2&&GPIO4&&(!GPIO5))
{
time_set = 30;
GPIO2=0;
GPIO1=1;GPIO4=1;GPIO5=1;
}
else if(GPIO1&&!GPIO2&&GPIO4&&GPIO5)
{
time_set = 40;
GPIO1=0;
GPIO2=1;GPIO5=1;GPIO4=1;
}
}
void key_deal()
{
if(key==0)
{
delay();
if(key==0)
{
T0IE = 1;
T0IF = 0;
GPIO0=on;
output();
}
}while(key==0);
}
void interrupt timer0()
{
static char j;
if(T0IE==1&&T0IF==1)
{
n++;
TMR0=156;
T0IF = 0;
if(n==3)
{
n=0;
s++;
if(s>=20)
{
s=0;
m++;
if(time_set<=m)
{
for(j=0;j<10;j++)
delay();
if(time_set<=m)
{
GPIO |= 0X37;
m=0;
T0IE=0;
}
}
}
}
}
}
void main()
{
init();
while(1)
{
key_deal();
clrwdt();
}
}