Chào các anh em trong diên đàn, em đang nghiên cứu watchdog Timer của atmega8 nhưng thử mãi mà nó ko chạy anh em nào có kinh nghiệm vụ này giúp mình với.
Đây là code mà em dùng để test watchdog timer của con atmega8.
Tình hình là em đặt watchdog timer cứ 1s sẽ reset chip 1 lần.
Ý đồ của em trong chương trình này là :
+ khởi tạo PORTD output, PORTD=0x00;
+delay 3s
+ vào vòng lặp while, delay 250 ms, cho PORTD.7 = đảo của PORTD.7 // chân PORT.7 nối với led bên ngoài.
+ nếu con led nhấp nháy thì watchdog timer chưa hoạt động nên ko reset dc chip
+ nếu con led ko nhấp ==> watchdog timer đã hoạt động , chip đã bị reset.
nhưng kết quả là con led nhấp nháy liên tục, em thử cách ồi, nhưng ko có cách nào làm cho nó hoạt động dc hết.
Mong các bác chỉ bảo !
Đây là code mà em dùng để test watchdog timer của con atmega8.
Tình hình là em đặt watchdog timer cứ 1s sẽ reset chip 1 lần.
Ý đồ của em trong chương trình này là :
+ khởi tạo PORTD output, PORTD=0x00;
+delay 3s
+ vào vòng lặp while, delay 250 ms, cho PORTD.7 = đảo của PORTD.7 // chân PORT.7 nối với led bên ngoài.
+ nếu con led nhấp nháy thì watchdog timer chưa hoạt động nên ko reset dc chip
+ nếu con led ko nhấp ==> watchdog timer đã hoạt động , chip đã bị reset.
nhưng kết quả là con led nhấp nháy liên tục, em thử cách ồi, nhưng ko có cách nào làm cho nó hoạt động dc hết.
Mong các bác chỉ bảo !
Code:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 02/08/2010
Author : CQ50Z
Company :
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
#pragma optsize-
WDTCR=0x1E;
WDTCR=0x0E;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
delay_ms(3000);
while (1)
{
delay_ms(250);
PORTD.7=!PORTD.7;
};
}


Comment