Примеры CodeVisionAVR - Watchdog Timer & ЖКИ

Автор: Internet. Опубліковано в Початківцям з CV AVR

Зміст статті

 
Пример использования Watchdog Timer  (программно, fuse не запрограммирован) .

Код программы.
Code
/*****************************************************
CodeWizardAVR V2.04.4a 
Chip type : ATmega8
AVR Core Clock frequency: 4,000000 MHz
*****************************************************/
#include <mega8.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include // библиотека задержки 
#include // стандартная библиотека вывода символов на экран 
unsigned char lcd_buffer[16];
unsigned int pokazometr=0; 
unsigned char iii=0; 
eeprom unsigned int kol_VKL=0; 
void main(void)
{
PORTB=0b00000000; //подтяжка
DDRB=0b00000000; //выход
PORTC=0b00000011; 
DDRC=0b00000000;
PORTD=0b00000000; 
DDRD=0b00000000; 
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
kol_VKL++;
lcd_gotoxy(0,0); 
lcd_putsf("c2.at.ua");
lcd_gotoxy(0,1);
lcd_putsf("START MK.");
while (iii<200) {iii+=1;
delay_ms(8);}; //задержка надписи 
lcd_clear(); 
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/2048k
#pragma optsize-
WDTCR=0x1F;
WDTCR=0x0F;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

while (1)

#asm("wdr"); //Сбрасываем счетчик WDT 
pokazometr++;//Счетчик работы МК, - показометр

sprintf(lcd_buffer,"pokazometr=%i",pokazometr); // записуем в масив показания на экран 
lcd_gotoxy(0,0); // указали место на дисплее
lcd_puts(lcd_buffer); // выводим масив на LCD

sprintf(lcd_buffer,"kol_VKL.=%i",kol_VKL); // записуем в масив показания на экран 
lcd_gotoxy(0,1);
lcd_puts(lcd_buffer); // выводим масив на LCD
// delay_ms(30); 
if(PINC.0==0) while (1) {} //имитируем зависание 

if(PINC.1==0) { // 
pokazometr=0;
kol_VKL=0; //обнуляем счетчик включений
lcd_clear(); 
}
};
}

Проект ; исходник, протеус.