Oto jeden z kodów który wymodziliśmy:
program testing;
var received_byte : byte;
channel : byte;
procedure Recived; org URXCaddr; //Procedura obsługująca odbieranie bajtu
begin
inc (channel);
if UCSRB.FE = 1 then channel := 0;
received_byte := UDR;
if channel = 2 then PORTA := not received_byte;
end;
begin
UBRRH := $00;
UBRRL := $01;
UCSRA := $0;
UCSRB.RXEN := 1; //Odblokowanie przerwania odbioru
UCSRB.RXCIE := 1; //Odblokowanie odbiornika
UCSRC.URSEL := 1; //Zapisywanie do USCRA
UCSRC.UCSZ0 := 1; //Ustawienie rozmiaru ramki na 8 bitów
UCSRC.UCSZ1 := 1; //j.w.
UCSRC.USBS := 1; //Dwa bity stopu
{
======================
Cały powyrzszy kod jest zgodny z następującym kodem w C:
UBRRH = 0x00;
UBRRL = 0x01;
UCSRA = 0x0;
UCSRB = _BV(RXEN);
UCSRC = _BV(URSEL) | _BV(UCSZ0) | _BV(UCSZ1) | _BV(USBS);
======================
}
SREG.7:= 1; //Globalne odblokowanie przerwań
DDRA := $FF; //DDRA = 0xff; Port A jako wyjście
while true do begin
end;
end.
Programik w MikroPascalu, postarałem sie troche go okomentować żeby programiści C mieli łatwiej. Teoretycznie przerwanie odbioru sie wykonuje i zlicza kałay i ich wartości ale jak przerobiłem program tak że miałem podgląd wartości na LCD to wychodziło na to że procek wykrywał break przy kilkudziesięciu kanałach (mój układ DMX wysyła pełne 512) a i te kanały które odebrał pokazują bzdury. Ma ktoś jakieś pojęcie do może być nie tak?