Свежие обсуждения
Микроконтроллеры

Поясните по Си

1 8

Тогда попробуйте это:

void SendDecValue(unsigned int val)
{char z,s;
unsigned int d;
z=0;
s=val/1000;
d=val%1000;
if ((!z) && (!s)) z=0;
else z=1;
if (z) TxByte(s+'0');
s=d/100;
d%=100;
if ((!z) && (!s)) z=0;
else z=1;
if (z) TxByte(s+'0');
s=d/10;
d%=10;
if ((!z) && (!s)) z=0;
else z=1;
if (z) TxByte(s+'0');
TxByte(d+'0');
}

TxByte(char c) - функция передачи символа через UART

 

Razaex: Так я бы и писал на асме, а в отчёте...

Ну иногда смотрят.... недавно вот прочитали.....одну бумажку.... всему отделу -50% от квартальной....

 

Tadas: Тогда попробуйте это:

Большое спасибо меньше на 1200 слов стала программа.

 

Wladimir_TS: Большое спасибо меньше на 1200 слов стала программа.

И даже работает ?

 

Ну что-то в UART улетает, а МАХ232 я еще не приладил...

 

А Proteus так и не освоили?

 

Tadas: Тогда попробуйте это:
void SendDecValue(unsigned int val)

Эту функцию можно написать гораздо компактней и элегантней, например:


void SendDecValue(unsigned int val)
{
char digits[sizeof(unsigned int) * 3]; /* Оценка сверху с запасом */
unsigned char i = 0;
while (val || i == 0) {
digits[i++] = '0' + (val % 10);
val /= 10;
}
while (i--)
TxByte(digits[i]);
}

Другое дело что сомнительна необходимость её вообще писать

 

boo2: Эту функцию можно написать гораздо компактней и элегантней,

Кто бы спорил.

boo2: Другое дело что сомнительна необходимость её вообще писать

Так ТС просил, Выдернул из какого-то допотопного проекта и привел в качестве примера.

 

Да, не заметил что там под printf памяти не хватает.
(хотя, если это это не крупносерийный экземпляр, то автор ССЗБ - надо было брать контроллер с запасом)

 

poruchik: poruchik ◊вчера, 23:42

А Proteus так и не освоили?

И как к нему цеплять всю прочую перефирию - внешние сигналы в него не загонишь. Работает он сильно неадекватно, времанки не выдерживает, глючит и падает. Проверить простенький код - можно и симулятором студии, а что посложнее - не помогает даже внутрисхемник ибо при его работе контролер работает медленнее.

boo2: Да, не заметил что там под printf памяти не хватает.
(хотя, если это это не крупносерийный экземпляр, то автор ССЗБ - надо было брать контроллер с запасом)

Тип контролера задан, менять неможно ибо стоит в уже давно готовом изделии - надо ПО доработать, а не могу вытащить данные - как оно вообще работает. Попытка цеплять отладочные средства провалилась - либо они неадекватно работают с WinAVRили одно из двух - но в режиме отладки программа неадекватна, а данные надо выводить - вот пришлось отцеплять от схемы выход UART и через него скидывать поток данных.

Полностью переписать на ассемблере может и проще - но кроме четкого ТЗ надо еще и ПОНЯТЬ АЛГОРИТМ а что-бы его понять (математическую часть) надо заставить работать блок ввыода и вывода информации ибо с искуственными данными не работает а только с получаемыми из остальной части аппаратуры. А похоже засада в них - данные портятся именно на этапе декодирования входного сигнала.

 
1 8