Witam serdecznie- ponizej przedstawiam program (przerobiony z jednej ze znanych stron), prosze podpowiedziec jak i gdzie napisac aby o przycisniecie przyciskow podlaczonych do atmegi8 uzyskac odpowiednio sygnaly na wyjciach (+5V) w momencie nacisniecia przelacznika.
#include <avr/io.h>
/******************************************************
Definicje stałych
*******************************************************/
#define F_CPU 1000000 /* 1MHz zegar procesora */
#define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */
/**************************************************************
Koniec definicji stałych
**************************************************************/
// Piszemy procedury opóźnienia czasowego
void delay(unsigned int us)
{
unsigned int delay_loops;
register unsigned int i;
delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)
for (i=0; i < delay_loops; i++) {};
}
void delayms(unsigned int ms)
{
unsigned int i;
for (i=0;i<ms;i++)
{
delay(999);
asm volatile (
"WDR":
;
}
}
/* wytwarzanie dźwięków
implementacja funkcji beep(częstotliwość,czas trwania)
*/
void beep(unsigned int freq,unsigned int duration)
{
unsigned int d=0;
unsigned int f=0;
for(d=0;d<duration;d++)
{
#define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
#define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
// wyjścia sterujące głośniczkiem
// najpierw pin do którego podłączamy pierwszy kabelek od głośniczka
#define speaker_pinA_port PORTC
#define speaker_pinA_pin PC4
#define speaker_pinA_DDR DDRC
// teraz pin do którego podłączamy drugi kabelek od głośniczka
#define speaker_pinB_port PORTC
#define speaker_pinB_pin PC5
#define speaker_pinB_DDR DDRC
//Prototypy funkcji i procedur
void delay(unsigned int us);
void delayms(unsigned int ms);
void beep(unsigned int freq,unsigned int duration);
// generujemy dodatnią połówkę przebiegu
sbi(speaker_pinA_DDR,speaker_pinA_pin);sbi(speaker_pinA_port,speaker_pinA_pin);
sbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
// teraz czekamy przez połówkę okresu "sinusoidy"
for(f=0;f<freq;f++)
{
delay(1);
}
// generujemy ujemną połówkę przebiegu
sbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
sbi(speaker_pinB_DDR,speaker_pinB_pin);sbi(speaker_pinB_port,speaker_pinB_pin);
// znowu czekamy przez połówkę okresu "sinusoidy"
for(f=0;f<freq;f++)
{
delay(1);
}
}
// na koniec wyłączamy przepływ prądu przez głośniczek
cbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
cbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
}
int main (void)
{
for (;
{
LED_ON;
beep(20,100);
beep(2,1000);
delayms(1000);
LED_OFF;
beep(30,70);
delayms(1000);
}
return (0);
//definiujemy stany portu sterującego diodą LED
#define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
#define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
// Piszemy procedury opóźnienia czasowego
int main (void)
{
LED_ON;
delayms(1000);
delayms(10);
LED_OFF;
delayms(500);
LED_ON;
delayms(500);
LED_OFF;
delayms(500);
LED_ON;
delayms(100);
LED_OFF;
delayms(100);
LED_ON;
delayms(10);
LED_OFF;
delayms(10);
}
return (0);
}
#include <avr/io.h>
/******************************************************
Definicje stałych
*******************************************************/
#define F_CPU 1000000 /* 1MHz zegar procesora */
#define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */
/**************************************************************
Koniec definicji stałych
**************************************************************/
// Piszemy procedury opóźnienia czasowego
void delay(unsigned int us)
{
unsigned int delay_loops;
register unsigned int i;
delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)
for (i=0; i < delay_loops; i++) {};
}
void delayms(unsigned int ms)
{
unsigned int i;
for (i=0;i<ms;i++)
{
delay(999);
asm volatile (
"WDR":
}
}
/* wytwarzanie dźwięków
implementacja funkcji beep(częstotliwość,czas trwania)
*/
void beep(unsigned int freq,unsigned int duration)
{
unsigned int d=0;
unsigned int f=0;
for(d=0;d<duration;d++)
{
#define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
#define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
// wyjścia sterujące głośniczkiem
// najpierw pin do którego podłączamy pierwszy kabelek od głośniczka
#define speaker_pinA_port PORTC
#define speaker_pinA_pin PC4
#define speaker_pinA_DDR DDRC
// teraz pin do którego podłączamy drugi kabelek od głośniczka
#define speaker_pinB_port PORTC
#define speaker_pinB_pin PC5
#define speaker_pinB_DDR DDRC
//Prototypy funkcji i procedur
void delay(unsigned int us);
void delayms(unsigned int ms);
void beep(unsigned int freq,unsigned int duration);
// generujemy dodatnią połówkę przebiegu
sbi(speaker_pinA_DDR,speaker_pinA_pin);sbi(speaker_pinA_port,speaker_pinA_pin);
sbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
// teraz czekamy przez połówkę okresu "sinusoidy"
for(f=0;f<freq;f++)
{
delay(1);
}
// generujemy ujemną połówkę przebiegu
sbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
sbi(speaker_pinB_DDR,speaker_pinB_pin);sbi(speaker_pinB_port,speaker_pinB_pin);
// znowu czekamy przez połówkę okresu "sinusoidy"
for(f=0;f<freq;f++)
{
delay(1);
}
}
// na koniec wyłączamy przepływ prądu przez głośniczek
cbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
cbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
}
int main (void)
{
for (;
{
LED_ON;
beep(20,100);
beep(2,1000);
delayms(1000);
LED_OFF;
beep(30,70);
delayms(1000);
}
return (0);
//definiujemy stany portu sterującego diodą LED
#define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
#define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
// Piszemy procedury opóźnienia czasowego
int main (void)
{
LED_ON;
delayms(1000);
delayms(10);
LED_OFF;
delayms(500);
LED_ON;
delayms(500);
LED_OFF;
delayms(500);
LED_ON;
delayms(100);
LED_OFF;
delayms(100);
LED_ON;
delayms(10);
LED_OFF;
delayms(10);
}
return (0);
}