Доброго времени суток, проблема следующая: имеются 4 реле времени, которые срабатывают практически одновременно, посылая импульсы на ноги контроллера, после попадания на него импульсов он формирует строку типа "a1256", где a - 1-й номер сработавшего реле, 1256 - 1,256 сек - время срабатывания. Если представить ситуацию, что все 4 реле времени сработали одновременно (т. е. самая распространённая ситуация), то вместо строки "aXXXXbXXXXcXXXXdXXXX" (где xxxx-времена срабатывания) по ком порту отправляется строка "abcdXXXX", т.е. передаётся только последнее время срабатывания реле
Код библиотеки usart прикрепил в файле.
Раздел: AVR
main()
{
volatile int optime=0; //время срабатывания
volatile char mass[10]; //для хранения optime в char
DDRB|=(0<<0)|(0<<1)|(0<<2)|(0<<3); //пины, ловящие импульс от реле
while(1)
{
for (int ii=0; ii<4;ii++)
{
if (PINB & (1<<(ii+4)) //если реле сработало то
US_cl();
USART_FlushTxBuf(); //очищаем передающий буфер
itoa(mass, optime,10); //перевод optime в char
switch (ii)
{
case 0: USART_SendStr("a"); break; //1 реле
case 1: USART_SendStr("b");break; //2 реле и т д
case 2: lUSART_SendStr("c"); break;
case 3: USART_SendStr("d"); break;
}
USART_SendStr(optime);
}
}
}
Код библиотеки usart прикрепил в файле.
Прикрепленные файлы:
Раздел: AVR