void modbus_cycle() { // Wenn nichts mehr zu senden und etwas im Empfangspuffer ist und eine Pause von min 3ms entstanden ist // dann Telegramm auswerten if (usart_write_len()==0 && usart_read_len()>0 && usart_rx_getdelay()>2) { modbus_processSlaveFrame(usart_rx_buffer, usart_read_len()); // nach der Auswertung Puffer rücksetzen, damit vom Anfang an neu gelesen wird usart_flush(); } }
int main(void) { uint8_t oldStatus = 0; initSysVars(); initPorts(); // we use RS485 here, to go with RS232 just have a look at Modbus_uart.c/.h // and use the rs232 init function rs485_init(UART_BAUD_SELECT(9600,F_CPU)); initInterrupts(); sei(); // actProfileData[IDX_DW_Debug02] = 2; actProfileData[IDX_DW_Debug01] = 101; actProfileData[IDX_DW_Debug02] = 102; actProfileData[IDX_DW_Debug03] = 103; actProfileData[IDX_DW_EncSteps] = 200; actProfileData[IDX_DW_EncHyst] = 4; setBitValForSysBit(IDX_AB_EncSync, ON); for (;;) { if (oldStatus != uart0_status.status) { oldStatus = uart0_status.status; if (uart0_status.status == RS_FrameComplete) { if (UART_RxHead) { modbus_processSlaveFrame((uint8_t*) UART_RxBuf, UART_RxHead); } uart_flush(); uart0_status.status = RS_Wait; } } if (changedBit.cBit != 99) { performBitActions(); } } }