Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 299 → Rev 300

/programy/Atmel_C/RS232toRS485/P232.c
1,5 → 1,5
//----------------------------------------------------------------------------------
// Prevodnik RS232 <--> RS485 s prodlevou pri prevodu smerem do RS485
// Prevodnik RS232 <--> RS485
// pri startbitu na RS232 zapne okamzite vysilac pokud nejsou detekovana data z RS485.
//----------------------------------------------------------------------------------
 
10,20 → 10,10
#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))
 
#define F_CPU 3686400UL
#include <util/delay.h>
 
void delay_ms(unsigned int ms)
{
while(ms)
{
_delay_ms(0.96);
ms--;
}
}
 
 
// ------------------------------------------------------------------
// Main
// ------------------------------------------------------------------
34,24 → 24,23
int last;
 
DDRD |= (1<<DDD5);
// DDRB |= (1<<DDB3);
DDRB |= (1<<DDB3);
 
TCCR1B |= (1 << CS10); // Set up timer
 
// PORTB |= (1<<PB3);
 
while(1)
{
if(!(PIND & (1<<PD1))) // kdyz je 0 na datech
if(!DATA) // kdyz je 0 na datech
{
PORTD &= ~(1<<PD5); // zapni vysilani
for (spozdeni=0;spozdeni<=8;spozdeni ++)
POVOLOVAK_HIGH; // zapni vysilani
for (spozdeni=8;spozdeni>=0;spozdeni --) // odpocitej dobu 8mi bitu
{
last = (PIND & (1<<PD1));
last = DATA;
TCNT1 = 0; // zacni znova merit cas
while (TCNT1 <= delay)
while (TCNT1 <= delay) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
{
if((PIND & (1<<PD1)) != last)
if(DATA != last)
{
if (TCNT1 < delay) delay = TCNT1;
break;
58,9 → 47,16
}
}
}
while (!(PIND & (1<<PD1)));
while (!DATA); // cekani na stop bit
 
for (spozdeni=2;spozdeni >= 0;spozdeni --)
{
TCNT1 = 0; // zacni znova merit cas zacatku stopbitu
while (TCNT1 <= delay) if(!DATA) break;
}
}
else PORTD |= (1<<PD5); // kdyz je 1 prepni na prijem
else POVOLOVAK_LOW; // kdyz je 1 prepni na prijem
delay = 60000;
}
return(0);
}