Например, для тестового варианта посылка в UART. UART отдельно работает, проверен.
В данном варианте я жду появления флага совпадения OCF0.
В результате выполнения получаю только единицы между START и END.
А должны быть 16-ть раз поочередно N-единиц и N-нулей.
Т.е. while выполняется только первый. Да и выполняется сам код слишком быстро, а должен 8сек работать.
Заранее спасибо.
Используются: CVavr, mega16.
Код
#include <mega16.h>
#include <stdio.h>
#define F_XTAL 1000000L
#define SPEED 2L
void Start_Timer0(void)
{
TCCR0 = 0b00111101; // CTC
OCR0=F_XTAL/2L/1024L/SPEED-1;
TIMSK = 0b11;
}
void Stop_Timer0(void)
{
TCCR0=0;
}
void send1(void)
{
while ((TIFR & 0b10)==0)
{
putsf("1");
};
}
void send0(void)
{
while ((TIFR & 0b10)==0)
{
putsf("0");
};
}
void main ()
{
[...] //UART init
putsf("\nSTART\n");
Start_Timer0();
for (i=0;i<16;i++)
{
if ((0x5555&(1<<i))) send1(); else send0();
};
Stop_Timer0();
putsf("\nEND");
}
#include <stdio.h>
#define F_XTAL 1000000L
#define SPEED 2L
void Start_Timer0(void)
{
TCCR0 = 0b00111101; // CTC
OCR0=F_XTAL/2L/1024L/SPEED-1;
TIMSK = 0b11;
}
void Stop_Timer0(void)
{
TCCR0=0;
}
void send1(void)
{
while ((TIFR & 0b10)==0)
{
putsf("1");
};
}
void send0(void)
{
while ((TIFR & 0b10)==0)
{
putsf("0");
};
}
void main ()
{
[...] //UART init
putsf("\nSTART\n");
Start_Timer0();
for (i=0;i<16;i++)
{
if ((0x5555&(1<<i))) send1(); else send0();
};
Stop_Timer0();
putsf("\nEND");
}