با سلام به همگی
من میخوام یه برنامه بنویسم که با یک میکرو سوئیچ LED هم روشن بشه و هم خاموش به این صورت که وقتی برای اولین بار میکروسوئیچ فشرده بشه LED روشن بشه و به محض اینکه دست رو از روی میکروسوئیچ بر دارم تایمر شروع به شمردن کنه و تا یک ثانیه بشمره حالا توی این یک ثانیه به ازای هر بار زدن میکروسوئیچ تایم یک ثانیه دوباره از اول محاسبه بشه و LED تغییر وضعیت نده ولی اگر بعد از سپری شدن یک ثانیه میکرو سویچ رو بزنم
LED خاموش بشه و این کار تکرار بشه . برای ساده کردن برنامه بالا اول یه برنامه نوشتم برای اینکه یه LED رو با یک میکروسوویچ خاموش روشن کنم و بعد از روشن شدن LED به محض اینکه کاربر دستش رو از میکزوسوئیچ برداره تایمر شروع به شمردن کنه و بعد از یک ثانیه LED رو خاموش کنه البته با هر با فشردن میکروسوئیچ LED تاگل بشه خب اینم از کد های برنامه
char flag1=1;
char hhh=0;
char count=0;
void RegConfigration()
{
//Timer2 Registers Prescaler= 16 - TMR2 PostScaler = 16 - PR2 = 150
t2con=0b01111011;
PR2 = 150;
tmr2=0;
PIR1.TMR2IF = 0;
PIE1.TMR2IE = 1;
INTCON.GIE = 1;
INTCON.PEIE = 1;
}
void pinsconfigration()
{
TRISB.f7 =0;
PORTB.f7 =0;
trisc.f3 =1;
}
void interrupt()
{
if (PIR1.TMR2IF == 1)
{
count++;
PIR1.TMR2IF = 0;
if (count==100)
{
PR2 = 150;
tmr2=0;
PORTB.F7 =0;
count=0;
t2con.tmr2on=0;
}
}
}
void main()
{
pinsConfigration();
RegConfigration();
hhh=0;
flag1=1;
flag2=0;
while(1)
{
if (portc.f3==0) { if (hhh==0)
{ portb.f7=1;
flag1=0;
hhh=1;
}
}
if (hhh==1) { if (portc.f3==1)
{
t2con.tmr2on=1;
}
}
if (portc.f3==0) { if (flag1==0)
{
portb.f7=0;
hhh=0;
flag1=1;
}
}
}
}
مشکلم اینه که بعضی وقتا باید چند بار میکروسویچ رو بزنم تا LED تغییر وضعیت بده !!!؟ و تایمرم که درست کار نمیکنه و سر یک ثانیه LED رو خاموش نمیکنه !! این مشکل ها که حل بشه میرم سر وقت صورت مسئله ی اصلی
من از میکروسی استفاده می کنم و PIC 16f877
من میخوام یه برنامه بنویسم که با یک میکرو سوئیچ LED هم روشن بشه و هم خاموش به این صورت که وقتی برای اولین بار میکروسوئیچ فشرده بشه LED روشن بشه و به محض اینکه دست رو از روی میکروسوئیچ بر دارم تایمر شروع به شمردن کنه و تا یک ثانیه بشمره حالا توی این یک ثانیه به ازای هر بار زدن میکروسوئیچ تایم یک ثانیه دوباره از اول محاسبه بشه و LED تغییر وضعیت نده ولی اگر بعد از سپری شدن یک ثانیه میکرو سویچ رو بزنم
LED خاموش بشه و این کار تکرار بشه . برای ساده کردن برنامه بالا اول یه برنامه نوشتم برای اینکه یه LED رو با یک میکروسوویچ خاموش روشن کنم و بعد از روشن شدن LED به محض اینکه کاربر دستش رو از میکزوسوئیچ برداره تایمر شروع به شمردن کنه و بعد از یک ثانیه LED رو خاموش کنه البته با هر با فشردن میکروسوئیچ LED تاگل بشه خب اینم از کد های برنامه
char flag1=1;
char hhh=0;
char count=0;
void RegConfigration()
{
//Timer2 Registers Prescaler= 16 - TMR2 PostScaler = 16 - PR2 = 150
t2con=0b01111011;
PR2 = 150;
tmr2=0;
PIR1.TMR2IF = 0;
PIE1.TMR2IE = 1;
INTCON.GIE = 1;
INTCON.PEIE = 1;
}
void pinsconfigration()
{
TRISB.f7 =0;
PORTB.f7 =0;
trisc.f3 =1;
}
void interrupt()
{
if (PIR1.TMR2IF == 1)
{
count++;
PIR1.TMR2IF = 0;
if (count==100)
{
PR2 = 150;
tmr2=0;
PORTB.F7 =0;
count=0;
t2con.tmr2on=0;
}
}
}
void main()
{
pinsConfigration();
RegConfigration();
hhh=0;
flag1=1;
flag2=0;
while(1)
{
if (portc.f3==0) { if (hhh==0)
{ portb.f7=1;
flag1=0;
hhh=1;
}
}
if (hhh==1) { if (portc.f3==1)
{
t2con.tmr2on=1;
}
}
if (portc.f3==0) { if (flag1==0)
{
portb.f7=0;
hhh=0;
flag1=1;
}
}
}
}
مشکلم اینه که بعضی وقتا باید چند بار میکروسویچ رو بزنم تا LED تغییر وضعیت بده !!!؟ و تایمرم که درست کار نمیکنه و سر یک ثانیه LED رو خاموش نمیکنه !! این مشکل ها که حل بشه میرم سر وقت صورت مسئله ی اصلی
من از میکروسی استفاده می کنم و PIC 16f877
دیدگاه