Witam,
Moja przejściówka USB - RS232 okazała się być jakimś chińskim szajsem więc nie mogę chwilowo sprawdzić poprawności kodu. Czy ktoś mógłby rzucić okiem i stwierdzić czy poniższy kod ma szansę funkcjonować? ATmega jedynie odbiera jeden bajt po RS'sie i w zależności od tego czy jest to 1 czy 0, ustawia cały port C w stan aktywny bądź niski.
Mikrokontroler: ATmega32
Przejściówka: USB-RS232 TTL
Pozdrawiam
Moja przejściówka USB - RS232 okazała się być jakimś chińskim szajsem więc nie mogę chwilowo sprawdzić poprawności kodu. Czy ktoś mógłby rzucić okiem i stwierdzić czy poniższy kod ma szansę funkcjonować? ATmega jedynie odbiera jeden bajt po RS'sie i w zależności od tego czy jest to 1 czy 0, ustawia cały port C w stan aktywny bądź niski.
Mikrokontroler: ATmega32
Przejściówka: USB-RS232 TTL
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <util/delay.h>
volatile unsigned char bajt_odebrany = 0; //odebrany bajt danych
//przerwanie od USART - zakończono odbiór
// USART, Rx Complete - _Vector(13)
SIGNAL(SIG_UART_RECV)
{
bajt_odebrany = UDR;
PORTA ^= _BV(PA0); //sygnalizuj diodą
}
// inicjalizacja USART dla podanego BAUD
void USART_Init(unsigned long int baud)
{
UBRRH = (unsigned char)((F_CPU/16UL/baud-1)>>8);
UBRRL = (unsigned char)(F_CPU/16UL/baud-1);
UCSRB |= _BV(RXCIE); //włączenie przerwania od odbiornika
UCSRB |= _BV(RXEN); //aktywacja odbiornika
UCSRC |= _BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0); //transmisja 8 bitów i 1 bit stopu
}
//konfiguracja portów, timerów i USART
void konfig(void)
{
DDRA = 0xFF; //wszystko jako wyjścia
PORTA = 0x00; //stan niski
DDRC = 0xFF; //wszystko jako wyjścia
PORTC = 0x00; //stan niski
//USART
USART_Init(9600); //ustawienie prędkości transmisji
sei(); //włącz globalne zezwolenie na przerwania
}
/////////////// PROGRAM GŁÓWNY //////////////////
void main(void)
{
konfig();
while(1)
{
if(bajt_odebrany == 1)
{
PORTC = 0xFF;
}
else
{
PORTC = 0x00;
}
}
}
Pozdrawiam