Professional Documents
Culture Documents
Code Loc
Code Loc
#include <util/delay.h>
#include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include <avr/interrupt.h>
//////////////////////////////////////////////////////////////////////////////////
///////////////
void UART_init(long USART_BAUDRATE)
{
UCSRB |= (1 << RXEN) | (1 << TXEN) | (1<< RXCIE);/* Turn on transmission and
reception */
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);/* Use 8-bit character
sizes */
UBRRL = BAUD_PRESCALE; /* Load lower 8-bits of the baud rate value */
UBRRH = (BAUD_PRESCALE >> 8); /* Load upper 8-bits*/
sei();
}
unsigned char UART_RX()
{
while(!(UCSRA&(1<<RXC)));
return UDR;
}
void UART_TxChar(char ch)
{
while (! (UCSRA & (1<<UDRE))); /* Wait for empty transmit buffer*/
UDR = ch ;
}
}
int Response()
{
DDRD &= ~(1<<DHT11_PIN);
_delay_us(39);
if((PIND & (1<<DHT11_PIN))) //response signal error check!
return 1;
_delay_us(80);
if(!(PIND & (1<<DHT11_PIN))) //pulled ready output check!
return 1;
_delay_us(80);
}
int ADC_Read()
{
ADMUX = 0x40; /* Vref: Avcc, ADC channel: 0 */
ADCSRA |= (1<<ADSC); /* start conversion */
while ((ADCSRA &(1<<ADIF))==0); /* monitor end of conversion interrupt
flag */
ADCSRA |=(1<<ADIF); /* set the ADIF bit of ADCSRA register */
return(ADCW); /* return the ADCW */
}
void controlsw()
{
if((PIND&(1<<PIND3))==0)
{
while((PIND&(1<<PIND3))==0);
PORTA ^=(1<<PA5);
}
if((PIND&(1<<PIND4))==0)
{
while((PIND&(1<<PIND4))==0);
PORTA ^=(1<<PA6);
}
if((PIND&(1<<PIND5))==0)
{
while((PIND&(1<<PIND5))==0);
PORTA ^=(1<<PA7);
}
if((PIND&(1<<PIND6))==0)
{
while((PIND&(1<<PIND6))==0);
PORTD ^=(1<<PD7);
}
Request(); /* send start pulse */
if (Response()!=1)
{
}
int main(void)
{
DDRA = 0B11111110;
DDRB = 0xff;
DDRD = 0B10000000;
TCCR0 = (1<< CS00) | (1<< CS01); // PRE = 64
TCNT0 = 130 ;
TIMSK |=(1<<TOIE0);
sei();
UART_init(9600);
UART_SendString("N2,");
UART_SendString("10,");
}
else
{
UART_SendString("N2,");
UART_SendString("11,");
}
if((PINA&(1<< PA6)) == 0)
{
UART_SendString("20,");
}
else
{
UART_SendString("21,");
}
if((PINA&(1<< PA7)) == 0)
{
UART_SendString("30,");
}
else
{
UART_SendString("31,");
}
if((PIND&(1<< PD7)) == 0)
{
UART_SendString("40#\n\r");
}
else
{
UART_SendString("41#\n\r");
}
dem1 = 0;
}
}
_delay_ms(100);
}
ISR(USART_RXC_vect)
{
char pc = UDR;
switch (pc)
{
case '1':
_delay_ms(50);
PORTA &=~(1<<PA6);
break;
case '2':
_delay_ms(50);
PORTA |=(1<<PA6);
break;
case '3':
_delay_ms(50);
PORTA &=~(1<<PA7);
break;
case '4':
_delay_ms(50);
PORTA |=(1<<PA7);
break;
case '5':
_delay_ms(50);
PORTD &=~(1<<PD7);
break;
case '6':
_delay_ms(100);
PORTD |=(1<<PD7);
break;
default:
_delay_ms(500);
break;
}
}
ISR(TIMER0_OVF_vect)
{
TCNT0 = 130;
dem ++;
dem1 ++;