All pastes #1470498 Raw Edit

Anonymous

public text v1 · immutable
#1470498 ·published 2009-06-22 23:37 UTC
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); 
    }
  }
}