|
جزاك الله خيرا اخى الكريم وان امكن اريد مثال عن كيفية استخدام كلب الحراسه لعمل ريست للميكرو عند حدوث خلل بعمله وشكرا مقدما وربنا يجعله فى ميزان حسناتك
|
السلام عليكم
هذا مثال عن كيفيه دخول مايكرو الى حاله نوم اي وضعت سويج اسمه on_off وهذا مربوط على RB0
http://up.top4top.net/downloadf-top4...43d91-rar.html
كود:
sbit sw_on_off at RB0_bit;
/* Project name:
Understanding sleep mode in PIC microcontrollers
* Copyright:
(c) Rajendra Bhatt
* Test configuration:
MCU: PIC16F628A
Oscillator: XT, 4.0000 MHz
*/
int count=0 , count_sleep,sw_on_off_count=0;
char sw_on_off_flag=0 , state_on_off=0;
//Timer1
//Prescaler 1:1; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms
//Place/Copy this part in declaration section
void InitTimer1()
{
T1CON = 0x01;
TMR1IF_bit = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;
TMR1IE_bit = 1;
//INTCON = 0xC0;
}
void Interrupt()
{
if(INTF_bit==1)
{
INTF_bit=0;
state_on_off=~state_on_off;
}
if (TMR1IF_bit)
{
TMR1IF_bit = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;
//Enter your code here
count++;
if(sw_on_off_flag==1)sw_on_off_count++;
}
}
void main()
{
TRISB = 0b00000001;
portb=0;
InitTimer1();
INTCON = 0xD0;
OPTION_REG=0xC0;
while(1) {
if(sw_on_off==0){
sw_on_off_flag=1;
}
if( count>=5){
count=0;
rb1_bit=~rb1_bit;
rb2_bit=~rb2_bit;
rb3_bit=~rb3_bit;
}
if(state_on_off==255 && sw_on_off_count>5)
{
sw_on_off_flag=0;
sw_on_off_count=0;
rb1_bit=0;
rb2_bit=0;
rb3_bit=0;
RB4_bit=1;
asm sleep;
}
}
}
مثال بسيط حيث استفاد من تايمر1 لتوليد ازمنه بدلا من أستخدام الامر delay لانه من خلال تايمر1 مايكرو ينفذ كل اوامر موجوده في while اما delay يجعل مايكرو مشغول
تلاحظ انه اذا تم الضغط على سويج على أطفاء سوف يصبح متغير state_on_off==255 وبعد انتظار فتره 250ms اي لما يصبحsw_on_off_count>5
هنا شيئ مهم لازم قبل لاتدخل مايكرو الى وضع sleep لازم تطفئ كل مخارج لديك والا سوف تبقى شغاله
مثلا تلاحظ ليدات قمت بأطفائها وقمت بتشغيل ليد على RB4 لدلاله على ان مايكرو على وضع sleep
على عموم الامر asm sleep هو يدخل مايكرو في حاله نوم ولكي أجعله يستغيظ فطريقه وحيده هي انتربت وبالطبع سوف يتوقف كل تايمرات لان كرستاله سوف تتوقف وعليه يكون انتربت عبر مثلا portb او غيره ولكن ليس تايمرات او التي تعتمد على كرستاله