Datasheet
UART_TX_Idle_Ptr := @UART1_TX_Idle;
UART1_Init(9600); // initialize UART1 module
Delay_ms(100);
RS485Master_Init(); // initialize MCU as Master
dat[0] := 0xAA;
dat[1] := 0xF0;
dat[2] := 0x0F;
dat[4] := 0; // ensure that message received flag is 0
dat[5] := 0; // ensure that error flag is 0
dat[6] := 0;
RS485Master_Send(dat,1,160);
SREG_I := 1; // enable global interrupt
RXCIE := 1; // enable interrupt on UART receive
while (TRUE) do
begin // upon completed valid message receiving
// data[4] is set to 255
Inc(cnt);
if (dat[5] <> 0) then // if an error detected, signal it
PORTC := dat[5]; // by setting PORTC
if (dat[4] <> 0) then // if message received successfully
begin
cnt := 0;
dat[4] := 0; // clear message received flag
j := dat[3];
for i := 1 to dat[3] do // show data on PORTB
PORTB := dat[i-1];
dat[0] := dat[0]+1; // increment received dat[0]
Delay_ms(1); // send back to slave
RS485Master_Send(dat,1,160);
end;
if (cnt > 100000) then // if in 100000 poll-cycles the answer
begin
Inc(PORTA); // was not detected, signal
cnt := 0; // failure of send-message
RS485Master_Send(dat,1,160);
if (PORTA > 10) then // if sending failed 10 times
begin
PORTA := 0;
RS485Master_Send(dat,1,50); // send message on
broadcast address
end;
end;
end;
end.
346
MIKROELEKTRONIKA - SOFTWARE AND HARDWARE SOLUTIONS FOR EMBEDDED WORLD
Libraries
mikroPASCAL PRO for AVR
CHAPTER 6