السلام عليكم
16f84 السؤال كالتالي:
برنامج يعمل بشكل تلقائي لمدة 5 دقائق حتى يصل الى وضع ثابت ويوجد ضاغط على احد المداخل اذا تم الضغط خلال تنفيذ البرنامج يحفظ 1 ليقوم بتنفيذ برنامج اخر بعد انتهاء البرنامج الاول , واذا لم يتم الضغط يبقى في وضع ثابت لا يتغير واذا تم الضغط بعد مرور ال5 دقائق سينفذ البرنامج الاخر مباشرة .
|
السلام عليكم
كود:
sbit sw_press at RA0_bit;
sbit led at RA1_bit;
unsigned int cont;
char state=0;
//Timer0
//Prescaler 1:256; TMR0 Preload = 61; Actual Interrupt Time : 49.92 ms
//Place/Copy this part in declaration section
void InitTimer0(){
OPTION_REG = 0x87;
TMR0 = 61;
INTCON = 0xA0;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 61;
//Enter your code here
cont++;
}
}
void main()
{
TRISA0_bit=1;
TRISA1_bit=0;
InitTimer0();
while(1)
{
if(sw_press==0)state=1;
if(cont>= 6000) // 5min = 5*60*1000=300000/50=6000
{
cont=0;
if(state==1)led=1;
}
}
}
حيث مايكرو يبدأ بأحتساب الزمن عن طريق تايمر0 حيث انتربت يحدث كل 50ms
اي عندما يصل الى cont=6000 معناها وصل الى 5 دقائق
حيث يتم أختبار هل وصل زمن الى 5 دقائق اذا كان نعم يتم اختبار متغير state اذا كان مضغوط راح يشغل ليد (( يمكنكم وضع البرنامج الي راح ينفذه عند الضغط على سويج ))