/* ---------------------------------------------------------------------------* AVR Blink Demo Application* www.mlab.cz miho 2008* ---------------------------------------------------------------------------* Demo program for AVR processors* Simple blinking application for ATtiny13/ATmega8 and similar* ---------------------------------------------------------------------------* 00.00 2008/04/18 First Version* ---------------------------------------------------------------------------*/// Configuration// -------------// Define LED port here// Use port available on all devices with no conflict with ISP port#define LED B#define LED_BIT 3// Define CPU clock frequency here// Do not forget to set Clock Oscillator in Low Fuse// Select just one//#define F_CPU 1000000UL // Frequency in Hz#define F_CPU F_CPU_DEFAULT // Default internal RC clock frequency//#define F_CPU F_CPU_MAX // Maximum internal RC clock frequency// Define blink period#define PERIOD 5000 // in ms#define DUTY 20 // in %// End of Configuration// --------------------// Helpers#define GLUE(a,b) a##b#define PORT(a) GLUE(PORT,a)#define PIN(a) GLUE(PIN,a)#define DDR(a) GLUE(DDR,a)// Port definitions#define LED_PORT PORT(LED)#define LED_DDR DDR(LED)// Processor definitions#include <avr/io.h>// Define clock values for selected processors// ATtiny13#if _AVR_IOTN13_H_#define F_CPU_DEFAULT 1200000UL // Default clock 9.6MHz/8#define F_CPU_MAX 9600000UL // Maximal internal clock#endif// ATmega8/16/32/64#if _AVR_IOM8_H_ | _AVR_IOM16_H_ | _AVR_IOM32_H_ | _AVR_IOM64_H_ \| _AVR_IOM88_H_#define F_CPU_DEFAULT 1000000UL // Default clock 1MHz#define F_CPU_MAX 8000000UL // Maximal internal clock#endif// Use delay library#include <util/delay.h>// Define ON and OFF times on PERIOD and DUTY#define TIME_ON (1L*PERIOD*DUTY/100)#define TIME_OFF (1L*PERIOD*(100-DUTY)/100)// Main programint main(){LED_DDR |=1<<LED_BIT; // Set LED port as outputfor(;;) // Never ending story{LED_PORT |= 1<<LED_BIT; // Set LED port to 1_delay_ms(TIME_ON); // WaitLED_PORT &= ~(1<<LED_BIT); // Clear LED port to 0_delay_ms(TIME_OFF); // Wait}return 0;}