Sei sulla pagina 1di 4

/*

* lab0.ca
*
*/
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
#define MORSE_LUNG 3
#define MORSE_SCURT 1
int pini_C[8] = {PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7};
/* aprinde led-ul PC0 la apasarea butonului PB0 */
void exemplu() {
/* setez pinul PB0 ca intrare */
DDRB &= ~(1 << PB0);
/* activez rezistenta de pull-up pentru pinul PB0*/
PORTB |= (1 << PB0);
/* setez pinul PC0 ca iesire */
DDRC |= (1 << PC0);
/* opresc LED-ul pe de pinul PC0 */
PORTC &= ~(1 << PC0);
while (1) {
/* daca butonul este apasat */
if ((PINB & (1 << PB0)) == 0) {
/* ledul este aprins */
PORTC |= (1 << PC0);
} else {
/* altfel ledul este stins */
PORTC &= ~(1 << PC0);
}
}
}
/* TODO 1 - generare secvente aprindere LED-uri */
void task1() {
/* Setare directii porturi folosite */
DDRB &= ~((1 << PB0) | (1 << PB1));
PORTB |= ((1 << PB0) | (1 << PB1));
// toti bitii pe 1
DDRC = 0xFF;
PORTC = 0;
int contor = 0; // shut down
int pinIndx = 0;
while(1) {
if ((PINB & (1 << PB0)) == 0)
contor = 1;

else if ((PINB & (1 << PB1)) == 0)


contor = 2;
/*
Generare secvente pentru PB1 si PB0

*/

switch(contor)
{
case 1:
{
PORTC = 0; // stingem leduri
PORTC |= (1 << pinIndx);
pinIndx = (pinIndx + 1) % 8;
}
break;
case 2:
{
PORTC = 0; // stingem leduri
PORTC |= (1 << pinIndx | 1 << (7 - pinIn
dx));
pinIndx = (pinIndx + 1) % 8;
}
break;
default:
break;
}
_delay_ms(500);
}
}
/* TODO 2 - cod morse folosind speaker */
void task2() {
/* Setare directii porturi folosite
/* Setare directii porturi folosite */
DDRB &= ~((1 << PB0) | (1 << PB1));
PORTB |= ((1 << PB0) | (1 << PB1));
DDRD |= (1 << PD5);
int contor = 0; // shut down
int pinIndx = 0;
int i;
while(1) {
if ((PINB & (1 << PB0)) == 0)
{
for(i =0; i< 25;i++)
{
PORTD |= (1 << PD5);
_delay_ms(1);
PORTD &= ~(1 << PD5);

*/

_delay_ms(1);
}
}
else if ((PINB & (1 << PB1)) == 0)
{
for(i =0; i< 75;i++)
{
PORTD |= (1 << PD5);
_delay_ms(1);
PORTD &= ~(1 << PD5);
_delay_ms(1);
}
}
_delay_ms(50);
}
}
/* TODO 2 - genereaza sunetul pentru tipul de cod folosit: lung sau scurt */
void speaker_morse(int tip_morse) {
/* se va alterna starea portului PD5 la intervale de timp foarte mici */
}
/* TODO 3 - implementati functionalitatea task-ului 3 */
void task3() {
DDRC = 0xff;
/* setez pinul PB0 ca intrare */
DDRB &= ~(1 << PB0);
/* activez toate rezistentele de pull up*/
PORTB = 0xff;
/* Setare directii porturi folosite

*/

while (1) {
PORTC = PINB;
/*
Testare stare butoane si implementare functionalitate */
if ((PINB & (1 << PB0)) == 0)
{
PORTB = ~PORTB;
PORTB |= (1 << PB0);
_delay_ms(500);
}
}
}
int main(void) {
// exemplu();
// task1();
// task2();

task3();
return 0;
}

Potrebbero piacerti anche