Rev 299 | Blame | Last modification | View Log | Download
//----------------------------------------------------------------------------------// Prevodnik RS232 <--> RS485// pri startbitu na RS232 zapne okamzite vysilac pokud nejsou detekovana data z RS485.//----------------------------------------------------------------------------------#include <avr/io.h>#include <avr/interrupt.h>#include <stdlib.h>#include <ctype.h>#include <avr/eeprom.h>#include <avr/pgmspace.h>#define POVOLOVAK_LOW PORTB &= ~(1<<PB3)#define POVOLOVAK_HIGH PORTB |= (1<<PB3)#define DATA (PIND & (1<<PD1))// ------------------------------------------------------------------// Main// ------------------------------------------------------------------int main(void){int delay;int spozdeni;int last;DDRD |= (1<<DDD5);DDRB |= (1<<DDB3);TCCR1B |= (1 << CS10); // Set up timerwhile(1){if(!DATA) // kdyz je 0 na datech{POVOLOVAK_HIGH; // zapni vysilanifor (spozdeni=8;spozdeni>=0;spozdeni --) // odpocitej dobu 8mi bitu{last = DATA;TCNT1 = 0; // zacni znova merit caswhile (TCNT1 <= delay) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu{if(DATA != last){if (TCNT1 < delay) delay = TCNT1;break;}}}while (!DATA); // cekani na stop bitfor (spozdeni=2;spozdeni >= 0;spozdeni --){TCNT1 = 0; // zacni znova merit cas zacatku stopbituwhile (TCNT1 <= delay) if(!DATA) break;}}else POVOLOVAK_LOW; // kdyz je 1 prepni na prijemdelay = 60000;}return(0);}