Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //------------------------Deklaracje u¬ytkownika--------------------------------------------------
- volatile char c_in; // odebrany znak (przez port szeregowy - przerwanie)
- char znak; // zmienna w main()
- char UART_init(long baud) // inicjowanie portu szeregowego
- {
- char speed, err=0;
- speed = baud / 4800;
- switch(speed)
- {
- case 1:
- UBRRL = 103; // 4800 (fosc=8MHz => UBRRL=103)
- UBRRH = 0;
- break;
- case 2:
- UBRRL = 51; // 9600 (fosc=8MHz => UBRRL=51)
- UBRRH = 0;
- break;
- case 4:
- UBRRL = 25; // 19200 (fosc=8MHz => UBRRL=25)
- UBRRH = 0;
- break;
- case 8:
- UBRRL = 12; // 38400 (fosc=8MHz => UBRRL=12)
- UBRRH = 0;
- break;
- default:
- UBRRL = 25; // 19200 (fosc=8MHz => UBRRL=25)
- UBRRH = 0;
- err = 1; // nietypowa predkoťŠ (ustawiona domyťlna)
- break;
- }
- UCSRB =_BV(RXCIE)|_BV(RXEN)|_BV(TXEN); // w-. przerwania od odb., w-. odb. i nadajnika
- UCSRC =_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0); // transmisja asynchroniczna, 8N1
- sei(); // globalne odblokowanie przerwa˝
- return err;
- }
- void COM_send(char c_out) // wys-anie jednego znaku do portu COM
- {
- loop_until_bit_is_set(UCSRA, UDRE); // oczekiwanie na wys-anie poprzedniego znaku
- UDR = c_out; // wyťlij nowy znak
- }
- char COM_recv(void) // odbiˇr jednego znaku z portu COM
- {
- char c = c_in; // odczyt znaku - przerwanie ( 0 = brak znaku, NULL)
- c_in = 0; // zeruj flagŕ
- return c; // zwroŠ znak
- }
- void send_str(char * s) // wys-anie tekstu do portu COM
- {
- while (*s) COM_send(*s++); // wysy-aj kolejno znaki tekstu
- }
- ISR (SIG_USART_RECV) // przerwanie od odbiornika
- {
- c_in = UDR; // odbiˇr znaku do bufora
- }
- //--------------------Koniec deklaracji u¬ytkownika-----------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement