Witam,
prosze o sprawdzenie mojego programu bo moim zdaniem jest OK a wciąż nie chce zadziałać.
Używając hyper terminal-a wysyłam znak poprzez RS232 do układu na USART0, chcę żeby po odebraniu znaku zapaliła się dioda podłączona do portu E.
Hyper terminal mam skonfigurowany następująco: 4800b/s, 8bitow danych, bit parzystosci, 2 bity stopu, kontrola przeplywu-brak
Oto program:
Proszę stosować znaczniki [code] - poprawiłem.
[zumek]
PS:
Znalazłem pewną rzecz:
- gdy wyzeruje bit RXCIE to komunikacja działa, gdy jest on ustawiony to nie działa ani przerwanie ani ręczne sprwadzanie znacznika zgloszenia przerwania RXC. Zależy mi żeby obslużyć to przerwanie, dlaczego więc nie działa?
prosze o sprawdzenie mojego programu bo moim zdaniem jest OK a wciąż nie chce zadziałać.
Używając hyper terminal-a wysyłam znak poprzez RS232 do układu na USART0, chcę żeby po odebraniu znaku zapaliła się dioda podłączona do portu E.
Hyper terminal mam skonfigurowany następująco: 4800b/s, 8bitow danych, bit parzystosci, 2 bity stopu, kontrola przeplywu-brak
Oto program:
define F_CPU 16000000UL
#include <avr/io.h> //dostep do rejestow
#include <util/delay.h> //dostep do funkcji opozniajacych
#include "lcd_dom.h" //dostep do lcd
#include <string.h>
#include <avr/signal.h> //definicje SIGNAL, INTERRUPT
#include <avr/interrupt.h> // funkcje sei(), cli()
ISR (USART0_RX_vect, ISR_NOBLOCK) //obsluga przerwania po odbiorze bajtu z USART1
{
//pisz_znak(UDR1);
DDRE=255;
PORTE=0;
}
int main(void)
{
unsigned char buffer=0;//////////
_delay_ms(45); // Czekaj 45 ms Na wykonanie się procedury zerującej sterownik LCD
LCD_init();
//inicjalizacja UART
cli(); //wyłączenie przerwań
UBRR0L=207; //ustalamy predkosc transmisji uart na 4800
UBRR0H=0;
UCSR0C=0b00101110; //tryb asynchroniczny, bit parzystosci, parzystosc, 1bit stopu, slowo 8bit
UCSR0B=0b10010000; //wlaczenie obslugi przerwan od RX, wlaczenie odbiornika
UCSR0A=0b00000000; //wyzerowanie znacznikow, pojedyncza predkosc transmisji, komunikacja NIE wieloprocesorowa
sei(); //wlaczenie przerwan
buffer=UCSR0A; ////////////////////////////////////
//koniec inicjalizacji UART
LCD_command(0b00000001); //czyszczenie ekranu
LCD_text("czekam:");
while (1==1)
{
if (UCSR0A != buffer) /////////////////////////////////
{
DDRE=255;
PORTE=0;
}
}
return 0;
}Proszę stosować znaczniki [code] - poprawiłem.
[zumek]
PS:
Znalazłem pewną rzecz:
- gdy wyzeruje bit RXCIE to komunikacja działa, gdy jest on ustawiony to nie działa ani przerwanie ani ręczne sprwadzanie znacznika zgloszenia przerwania RXC. Zależy mi żeby obslużyć to przerwanie, dlaczego więc nie działa?