rendered paste body#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
//variables
#define portio PIND
#define portiow PORTD
#define rxled PD7
#define rele PD6
#define btnsw PD5
#define triac PD4
#define MAX_BUFFSIZE 3
#define TRUE 1
#define FALSE 0
void usartInit(unsigned int ubrr)
{
cli(); // disable interrupts while adjusting baudrate
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)|(0<<UCSZ2);
UCSRC = (1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(0<<UCPOL);
UBRRH = (unsigned char) (ubrr>>8);
UBRRL = (unsigned char) ubrr;
sei(); // Enable interrupts
}
volatile unsigned char usart[MAX_BUFFSIZE];
volatile unsigned char usart1[MAX_BUFFSIZE];
//volatile unsigned char usart2[MAX_BUFFSIZE];
//volatile unsigned char usart3[MAX_BUFFSIZE];
volatile unsigned char rx_count = 0;
volatile unsigned char GotMessage = FALSE;
short int ovf0cnt = 0; //value for timer0 cycle
short int int0cnt = 0;
volatile unsigned short timerr;
volatile uint16_t timer;
volatile unsigned char timer_flag = FALSE;
//short int i = 0; //value for pwm storing
volatile short int btnsw_right = 0;
//int count = 0;
int main (void)
{
timer = 0;
TIMSK |= (1<<TOIE1 | 1 << TOIE0); //enable interrupt from Timer0
MCUCR |= (1<<ISC00 | 1<<ISC01);
TCCR0 = (1<<CS02 | 0<<CS01 | 0<<CS00);
TCCR2 = 0x61; //set TCCR2 to the above values (0x01100001b)
OCR2 = 0x00; //set OCR2 to overflow at XX
DDRB = 0x08; //as of right now, only enable the PWM pin as output
DDRD = (1 << PD7 | 1 << PD6 | 0<<PD5 | 1<<PD4 | 0<<PD2);
PORTD |= (1 << PD5 | 1<<PD4);
usartInit(51);
//PORTD = 1<<PD6;
while(1)
{
if((btnsw_right == 0) && ((portio & (1<<btnsw))))//0x20)))
btnsw_right = 1;
}
}
ISR(TIMER0_OVF_vect)
{
if (++ovf0cnt == 4)
{
if((btnsw_right == 1) && (!(portio & (1<<btnsw))))
{
portiow ^= (1 << rele);
timer=400;
btnsw_right = 0;
}
ovf0cnt = 0;
}
if(timer)
{
if(--timer == 0)
{
portiow ^= (1 << rxled);
}
}
}