void itoa(int n, char *str)
converts the integer n to characters in string str.
void ltoa(long int n, char *str)
converts the long integer n to characters in string str.
Подскажите пожалуйста:
есть данные счётчика, скажем unsigned int A=3021 (16 бит)
надо передать в uart сначала старший байт, потом младший.
догадываюсь что это можно сделать просто, но вот упёрся и всё...
rlc писал(а):Подскажите пожалуйста:
есть данные счётчика, скажем unsigned int A=3021 (16 бит)
надо передать в uart сначала старший байт, потом младший.
догадываюсь что это можно сделать просто, но вот упёрся и всё...
В данном случае вообще никакого прикола нет. У AVR 8 bit буферизироанный передатчик UART. Это значит, что если передатчик пуст, то при первой записи, число поместится в сдвиговый регистр и начнется передача. При второй записи число поместится в буферный регистр (т.е. в сам UDR), а как только закончится передача первого байта, второе число сразу переместится в сдвиговый регистр. Собственно я согласен, что показана только реализация и в общем случае нужно сначала убедиться в том что буфер передатчика пуст, но чтобы советовать заглянуть в даташит, нужно сначала самому его основательно изучить.
С возрождением. феникс вы наш негасимый!
Если я привел в одном блоке кода 2 строчки, это не означает, что я рекомендовал их подряд всегда писать - я показал, как выделяются байты. в принципе, все поняли, что я хотел, и лишь вы, въедливый наш, решили в очередной раз взбаламутить воду
что касается лабухов из атмела, то приведение типов можно делать даже тогда, когда в этом нет никакого смысла - но это не означает, что его нужно делать. при простом присваивании переменных signed char или unsigned char ни при каких услдовиях никакой роли не сыграет!!! (если обе переменные, конечно, одинакового размера char)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
#include <mega8535>
#include <stdio>
#define RX_COMPLETE (1<<RXC)
extern unsigned int ukaz_schet=0;
void TX250()
{
putchar(0xAA);// ответ
putchar(0x30);// 250 байт
putchar(ukaz_schet>>8);// старший байт адреса озу
putchar(ukaz_schet);// младший байт адреса озу
putchar(0x00);// резерв
}
вызов:
void main(void)
{
while (1)
{
if(rx_buf_counter==1)
{
rx_buf_counter=0;
if(rx_buffer[0]==0x55){TX250();}//собственно сам вызов
ukaz_schet++;
}
}
}
если ukaz_schet передавать в функцию как параметр - всё работает
если считать как внешнюю (extern) то в функции она видна со значением 0 - вроде как переназначается
Последний раз редактировалось rlc Ср дек 30, 2009 23:37:10, всего редактировалось 4 раза.