my_rs485_binary.c

/**
 * Copyright (c) 2006-2007, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license
 * 
 *
 * Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania
 * modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o
 * prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki
 * użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.
 *
 * This program is free software. Redistribution and use in source and binary
 * forms, with or without modification, ARE PERMITTED provided save this copyright
 * notice. This document/program is distributed WITHOUT any warranty, use at YOUR
 * own risk.
 * 
 **/

/**
 * funkcje obsługugi RS 485
 * zgodne z protokołem komunikacyjnym używanym w moich projektach
 *
 * dwa pierwsze bity (uart_buf_head) oznaczają typ komunikatu:
 *  00 (0x00) - identyfikator urzadzenia
 *  01 (0x40) - identyfikator lini
 *  10 (0x80) - komenda
 *  11 (0xC0) - odpowiedz (ignorowane przez slave)
 */

/** funkcja wysyłająca komendę RS **/
void send_rs_cmd(uint8_t dev, uint8_t line, uint8_t cmd) {
#ifdef DRIVER_CTRL_PIN_SET_DDR
  DRIVER_CTRL_PIN_SET_DDR = DRIVER_CTRL_PIN_SET_DDR | (1 << DRIVER_CTRL_PIN);
#endif
  DRIVER_CTRL_PORT = DRIVER_CTRL_PORT | (1 << DRIVER_CTRL_PIN);
  _delay_ms(5); // 5ms
  UDR=dev;
  _delay_cs(5); // 50ms
  UDR=line;
  _delay_cs(5); // 50ms
  UDR=cmd;
  _delay_ms(5); // 5ms
  DRIVER_CTRL_PORT = DRIVER_CTRL_PORT & ( ~(1 << DRIVER_CTRL_PIN));
#ifdef DRIVER_CTRL_PIN_SET_DDR
  DRIVER_CTRL_PIN_SET_DDR = DRIVER_CTRL_PIN_SET_DDR & ( ~(1 << DRIVER_CTRL_PIN));
#endif
}

/** funkcja wysyłająca odpowiedz przez RS **/
void send_rs(uint8_t reply) {
#ifdef DRIVER_CTRL_PIN_SET_DDR
  DRIVER_CTRL_PIN_SET_DDR = DRIVER_CTRL_PIN_SET_DDR | (1 << DRIVER_CTRL_PIN);
#endif
  DRIVER_CTRL_PORT = DRIVER_CTRL_PORT | (1 << DRIVER_CTRL_PIN);
  _delay_ms(5); // 5ms
  UDR = 0xC0 | reply;
  _delay_ms(5); // 5ms
  DRIVER_CTRL_PORT = DRIVER_CTRL_PORT & ( ~(1 << DRIVER_CTRL_PIN));
#ifdef DRIVER_CTRL_PIN_SET_DDR
  DRIVER_CTRL_PIN_SET_DDR = DRIVER_CTRL_PIN_SET_DDR & ( ~(1 << DRIVER_CTRL_PIN));
#endif
}

XHTML generated by highlight (http://www.andre-simon.de/) from my_rs485_binary.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/usage_and_config/smart_home/smart_home_story/my_rs485_binary.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).