Kod: Zaznacz cały
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <stdlib.h>
#define CPU_Hz 8000000
#define OSC 8
#define BAUD 9600
#define MYUBRR CPU_Hz/16/BAUD-1
// **** fukcje dla RS232 ****
void UART_init(unsigned int ubrr)
{
UBRRH = (unsigned char) (ubrr>>8);
UBRRL = (unsigned char) ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
void USART_out (unsigned char data) // wysłanie znaku
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
unsigned char USART_in (void) // odebranie znaku
{
while (!(UCSRA & (1<<RXC)));
return UDR;
}
// **** funkcja czasowa ****
void waitms(unsigned char czas)
{
unsigned char a, b; // zmnienne licznikowe
for( ; czas > 0; --czas) // ta pętla zostanie wykonana x-razy
for(b = 10; b > 0; --b) // a ta 10 razy
for(a = 25 * OSC; a > 0; --a) // natomiast ta 100 razy
__asm("nop"); // dodatkowa instrukcja opóźniająca o 1 cykl
}
int button1={0B00000110};
int button2={0B01011011};
int button3={0B01001111};
int button4={0B01100110};
int all={0B01111111};
//**** program glowny
int main(void)
{
DDRD=0x00; //klawa ustawiona jako wejscie 00000000
PORTD=0xFF;//port ustawiony jako wyjscie 11111111
int i; int j; int x; int z;
char przycisk1; //inicjacja na przycisk 1
char przycisk2; //inicjacja na przycisk 2
char przycisk3; //inicjacja na przycisk 3
char przycisk4; //inicjacja na przycisk 4
przycisk1=49; przycisk2=50; przycisk3=51; przycisk4=52;
//----------------------
char odbiorA;
odbiorA=65; //dana "A"
//----------------------
DDRA = 0xFF;
DDRB = 0xFF;
PORTA = 0xFF;
PORTB = 0x01;
while (1) {
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
if (PIND==0xFE){
PORTB = 2;
PORTA = button1;
_delay_ms(8);
UART_init(MYUBRR);
USART_out(przycisk1);
}
if (PIND==0xFD){
PORTB=2;
PORTA=button2;
_delay_ms(8);
UART_init(MYUBRR);
USART_out(przycisk2);
}
if (PIND==0xFB){
PORTB=2;
PORTA=button3;
_delay_ms(8);
UART_init(MYUBRR);
USART_out(przycisk3);
}
if (PIND==0xF7){
PORTB=2;
PORTA=button4;
_delay_ms(8);
UART_init(MYUBRR);
USART_out(przycisk4);
}
//----------------Chodzi gownie o ta czesc prog-czyli odbior
//----------------Mozliwe ze nie moge uzywac USART_in() w warunku if
//----------------Chcialbym sie dowiedziec czy skladnia jest ok i czy powinno dzialac
char temp;
temp=USART_in();
if (temp==odbiorA) {
PORTB=8;
PORTA=all; }
}
}