así que lo que estoy tratando de hacer es que intento hacer que el led parpadee un cierto número de veces antes de que se apague. Quiero evitar usar retrasos, así que lo intenté
Utilizando la interrupción y también usé un valor de marcador de posición como x para contar el número de veces que pasa por la interrupción, por lo que al alcanzar ese valor se desactivará. Sin embargo, tengo problemas para hacer que funcione, cualquier idea.
/*
* GccApplication3.c
*
* Created: 2015-04-01 6:13:58 AM
* Author: Bangladesh
*/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define stp_led PB0
#define dir_led PB1
#define led_port PORTB
#define led_ddr DDRB
#define F_CPU 16000000UL
int x = 0;
int main(void)
{
///////////////////////////////////////////////////////
led_ddr |= (1 << stp_led); //enable led as an output pin
led_ddr |= (1 << dir_led);
//led_port |= (1<<stp_led);
led_port |= (1<<dir_led);
///////////////////////////////////////////////////////
TCCR1B |= (1 << WGM12); // configuring timer 1 for ctc mode
OCR1A = 15625;
TIMSK1 |= (1 << OCIE1A); // enable ctc interrupt
TCCR1B |= ((1 << CS12) | (1<< CS10)); //Start at 1024 prescaler
sei(); //Enable global interrupts
//Sets ctc compare value to 1hz at 1mhz AVR clock, with prescaler of 64
while(1)
{
}
} //end of while loop
ISR(TIMER1_COMPA_vect)
{
function_details (10, 1);
}
void function_details (stp,dir){
if (dir == 1){
led_port |= (1 << dir_led);
}
else if (dir == 0){
led_port &= ~ (1 << dir_led);
}
while (1){
led_port ^= (1 << stp_led);
if (x == stp){
led_port &= ~ (1 << stp_led);
return 0;
}
x++;
}
}