реклама на сайте
подробности

 
 
> Исходники программ и библиотек, у вас есть чем поделиться?
Waso
сообщение Dec 19 2005, 16:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Предлагаю сюда скидывать (кому не жалко) свои инклюды для работы с периферийными устройствами, предназначенные для работы в IAR. Дело в том, что например для WinAVR такую библиотеку можно найти в сети. CodeVision имеет свою библиотеку. А ИАР этим не богат. Приходится либо писать свое с нуля, либо переделывать то что есть. Гемора в этих двух занятиях поровну.
Самому мне правда пока нечего выкинуь. Наоборот, нужны исходники для стандартного текстового ЖКИ-дисплея, клавиатуры 4х4, АЦП, ШИМ и пользовательского интерфейса. Так как с ИАРом (и вообще с Си) только знакомлюсь - дело идет медленно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
umup
сообщение Nov 15 2007, 10:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720



bin2bcd AVR :
Код
u32 bin2bcd_u32(u32 data, u8 result_bytes) NAKED;
u32 bin2bcd_u32(u32 data, u8 result_bytes)
{asm volatile(
  "push __tmp_reg__ \n push r26 \n push r27 \n push r30 \n push r31 \n"
  "mov __tmp_reg__, %A1   \n" /*number of bytes in result*/
   "bin2bcd_u32_00:       \n" /*correct input number by left shifts*/
     "mov r31, %A0        \n"
     "mov %A0, %B0        \n"
     "mov %B0, %C0        \n"
     "mov %C0, %D0        \n"
     "mov %D0, r31        \n"
     "dec __tmp_reg__     \n"
     "brne bin2bcd_u32_00 \n"
  
   "eor r26, r26          \n" /*clear result*/
   "eor r27, r27          \n"
   "eor r30, r30          \n"
   "eor r31, r31          \n"
   "mov __tmp_reg__, %A1  \n"
   "lsl __tmp_reg__ \n lsl __tmp_reg__ \n lsl __tmp_reg__ \n" /*__tmp_reg__=size in bits*8*/
  
   "bin2bcd_u32_01:       \n" /*shift loop*/
    "subi r26,-0x33       \n" /*add 0x33*/
    "sbrs r26, 3          \n" /*if carry to bit 3,*/
    "subi r26, 3          \n" /*subtract 3*/
    "sbrs r26, 7          \n" /*if carry to bit 7,*/
    "subi r26, 0x30       \n" /*subtract 0x30*/
    "subi r27,-0x33       \n" /*add 0x33*/
    "sbrs r27, 3          \n" /*if carry to bit 3,*/
    "subi r27, 3          \n" /*subtract 3*/
    "sbrs r27, 7          \n" /*if carry to bit 7,*/
    "subi r27, 0x30       \n" /*subtract 0x30*/
    "subi r30,-0x33       \n" /*add 0x33*/
    "sbrs r30, 3          \n" /*if carry to bit 3,*/
    "subi r30, 3          \n" /*subtract 3*/
    "sbrs r30, 7          \n" /*if carry to bit 7,*/
    "subi r30, 0x30       \n" /*subtract 0x30*/
    "subi r31,-0x33       \n" /*add 0x33*/
    "sbrs r31, 3          \n" /*if carry to bit 3,*/
    "subi r31, 3          \n" /*subtract 3*/
    "sbrs r31, 7          \n" /*if carry to bit 7,*/
    "subi r31, 0x30       \n" /*subtract 0x30*/
    "lsl r26 \n rol r27 \n rol r30 \n rol r31 \n" /*shift out buffer*/
  
    "sbrc %D0, 7          \n" /*skip if msbit of input =0*/
    "ori  r26, 1          \n" /*set lsb of output*/
    "lsl %A0 \n rol %B0 \n rol %C0 \n rol %D0 \n"/*shift input*/
  
    "dec __tmp_reg__      \n"
    "brne bin2bcd_u32_01  \n" /*repeat for all bits*/
  
    "movw r22, r26        \n" /*move result*/
    "movw r24, r30        \n"
    "pop r31 \n pop r30 \n pop r27 \n pop r26 \n pop __tmp_reg__\n"
    "ret \n"
  : :"r"(data),"r"(result_bytes):"r0","r26","r27","r30","r31" /*input and output parameters*/
  );


bin2bcd C :
Код
u32 bin2bcd_u32(u32 data, u8 result_bytes)
{u32 result = 0; /*result*/
  u8 u8_1;
  for (u8_1 = (4 - result_bytes); u8_1; u8_1--) data <<= 8; /*adjust input bytes*/
  for (u8_1 = (result_bytes << 3); u8_1; u8_1--) /*bit shift loop*/
  {u8 u8_2, u8_3;
   /*result BCD nibbles correction*/
   result += 0x33333333;
   /*result correction loop*/
   for (u8_3 = 4; u8_3; u8_3--)
   {u8_2 = result >> 24;
    if (!(u8_2 & 0x08)) u8_2 -= 0x03;
    if (!(u8_2 & 0x80)) u8_2 -= 0x30;
    result <<= 8; /*shift result*/
    result |= u8_2; /*set 8 bits of result*/
   }
   /*shift next bit of input to result*/
   result <<= 1;
   if (((u8)(data >> 24)) & 0x80) result |= 1;
   data <<= 1;
  }
  return(result);
}


bcd2bin AVR (GCC) :
Код
u32 bcd2bin_u32(u32 data, u8 result_bytes) NAKED;
u32 bcd2bin_u32(u32 data, u8 result_bytes)
{asm("push __tmp_reg__ \n push r26 \n push r27 \n push r30 \n push r31 \n"
  "eor r26, r26           \n" /*clear result*/
  "eor r27, r27           \n"
  "eor r30, r30           \n"
  "eor r31, r31           \n"
  "mov __tmp_reg__, %A1   \n"
  "lsl __tmp_reg__ \n lsl __tmp_reg__ \n lsl __tmp_reg__ \n" /*__tmp_reg__=input parameter size in bits*/

   "bcd2bin_u32_00:       \n" /*bits shift loop*/
  
    "lsr r31 \n ror r30 \n ror r27 \n ror r26 \n" /*shift out buffer*/
  
    "sbrc %A0, 0          \n" /*move lowest bit*/
    "ori  r31, 0x80       \n"
  
    "lsr %D0 \n ror %C0 \n ror %B0 \n ror %A0 \n"
  
    "sbrc %D0, 7          \n" /*if carry to bit 7,*/
    "subi %D0, 0x30       \n" /*subtract 0x30*/
    "sbrc %D0, 3          \n" /*if carry to bit 3,*/
    "subi %D0, 3          \n" /*subtract 3*/
    "sbrc %C0, 7          \n" /*if carry to bit 7,*/
    "subi %C0, 0x30       \n" /*subtract 0x30*/
    "sbrc %C0, 3          \n" /*if carry to bit 3,*/
    "subi %C0, 3          \n" /*subtract 0x30*/
    "sbrc %B0, 7          \n" /*if carry to bit 7,*/
    "subi %B0, 0x30       \n" /*subtract 0x30*/
    "sbrc %B0, 3          \n" /*if carry to bit 3,*/
    "subi %B0, 3          \n" /*subtract 3*/
    "sbrc %A0, 7          \n" /*if carry to bit 7,*/
    "subi %A0, 0x30       \n" /*subtract 0x30*/
    "sbrc %A0, 3          \n" /*if carry to bit 3,*/
    "subi %A0, 3          \n" /*subtract 3*/
  
    "dec __tmp_reg__      \n" /*repeat for all bits*/
    "brne bcd2bin_u32_00  \n"
  
   "movw r22, r26         \n" /*adjust result bytes*/
   "movw r24, r30         \n"
    "bcd2bin_u32_01:      \n"
     "mov __tmp_reg__,r25 \n"
     "mov r25,r24         \n"
     "mov r24,r23         \n"
     "mov r23,r22         \n"
     "mov r22,__tmp_reg__ \n"
     "dec %A1             \n"
     "brne bcd2bin_u32_01 \n"
  
   "pop r31 \n pop r30 \n pop r27 \n pop r26 \n pop __tmp_reg__ \n"
   "ret \n"
   : :"r"(data),"r"(result_bytes):"r0","r26","r27","r30","r31" /*input and output parameters*/
  );
}


bcd2bin C :
Код
u32 bcd2bin_u32(u32 data, u8 input_bytes)
{u32 result = 0; /*result*/
  u8 cnt_bits, cnt_bytes, tmp_byte;
  for (cnt_bits = (input_bytes << 3); cnt_bits; cnt_bits--)
  {/*shift next bit*/
   result >>= 1;
   if (((u8)(data)) & 0x01) result |= 0x80000000;
   data >>= 1;
   {/*BCD correction of result*/
    for (cnt_bytes = 4; cnt_bytes; cnt_bytes--)
    {tmp_byte = (data >> 24);
     if (tmp_byte & 0x80) tmp_byte -= 0x30;
     if (tmp_byte & 0x08) tmp_byte -= 0x03;
     data <<= 8;
     data |= tmp_byte;
    }
   }
  }
  /*adjust result bytes*/
  for (cnt_bits = (4 - input_bytes); cnt_bits; cnt_bits--) result >>= 8;
  return(result);
}



num2asc C - форматированный вывод числа с фикс.запятой в ASCI-буфер (options&7 = общее количество знаков, (options>>4)&7 = положение запятой считая справа, options&8 = 8 - отображать начальные нули, options&80 = 80 - сначала преобразовать в BCD) :
Код
void num2asc_s32(s32 data, u8 *buf, u8 options)
{u8 cnt_chars, point_pos;
cnt_chars = (options & 7); /*number of digits*/
/*convert negative to positive, set '-' flag*/
if (data < 0) {data = -data; options |= 1;} else options &= ~1;
/*if necessary, convert to BCD*/
if (options & 0x80) data = bin2bcd_u32(data, (cnt_chars >> 1) + 1);
cnt_chars++;
/*calculate point position*/
point_pos = cnt_chars - ((options >> 4) & 7);
if (point_pos) point_pos++;
while (cnt_chars) /*digits conversion loop*/
{if ((options & 8) && (data == 0) && (cnt_chars < point_pos))
  {if (options & 1) *buf = asc_minus; else *buf = asc_space;
   options &= ~1;
  } else
   {if ((cnt_chars == point_pos) && (options & 0x70)) /*store point*/
    {*buf = asc_point;
     cnt_chars--;
     buf--;
    }
    *buf = bin2asc_u8(data); /*store ASCII digit*/
   }
  cnt_chars--;
  buf--;
  data >>= 4;
}
if (options & 1) *buf = asc_minus;
}


Сообщение отредактировал umup - Nov 15 2007, 10:28
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Waso   Исходники программ и библиотек   Dec 19 2005, 16:29
- - haker_fox   Может быть сюда вообще выкладывать различные подпр...   Dec 20 2005, 01:03
|- - alecsvg   Цитата(haker_fox @ Dec 20 2005, 02:03) Мо...   Mar 28 2007, 07:11
- - at90   Вот библиотечка для работы с ЖКИ 16x2 и жк ht1611....   Dec 20 2005, 06:23
- - at90   Библиотека для работы с датафлэшем at45   Dec 20 2005, 07:46
- - Nixon   В данном топике предлагается выкладывать различные...   Dec 21 2005, 08:45
- - at90   Хороший проект с Атмеловского контеста. Вэб камер...   Dec 21 2005, 10:14
- - aai_m   Любопытное применение дисплея Siemens S65 с исходн...   Dec 21 2005, 13:07
|- - Серега   Библиотека для 25lc640.   Dec 24 2005, 20:31
- - *SERG   много примеров и исходников http://www.gaw.ru/html...   Dec 26 2005, 03:14
- - haker_fox   Это архив студенческих проектов Американского унив...   Dec 27 2005, 00:49
- - Alechin   Вот мои используемые практически в каждом проекте ...   Jan 11 2006, 15:22
- - DeXteR   Написал h файл для тех кто любит записи типа 0bxxx...   Jan 18 2006, 13:24
- - Мах   Не столько библиотека как исходник для подключения...   Jan 20 2006, 09:51
- - Nikola Kirov   Калкулатор boudrate для Usarta. Не нашел готовъи ...   Jan 25 2006, 00:57
- - afe   Както не хватает: http://hubbard.engr.scu.edu...   Jan 25 2006, 22:48
|- - Evgeny_CD   Цитата(afe @ Jan 26 2006, 01:48) ...Procy...   Feb 6 2006, 17:41
- - Proton   Преобразователь *.ebn в *.hex. Хоть таких файлов и...   Jan 29 2006, 17:50
- - haker_fox   Прошу оценить мое сромное творчество, буду признат...   Feb 3 2006, 09:36
- - ЛЕСЯ   haker_fox Как насчет выложить библтотеку для работ...   Feb 6 2006, 11:37
|- - haker_fox   Цитата(ЛЕСЯ @ Feb 6 2006, 19:37) haker_fo...   Feb 7 2006, 00:19
- - alm_   Модуль для работы с текстовым дисплеем 16x2 При в...   Feb 16 2006, 09:50
- - alm_   Расчёт CRC16 - на С с оптимизацией по скорости (та...   Feb 16 2006, 11:20
- - Jatagan   Вылаживаю подпрограмму (Div24.asm) для беззнаковог...   Mar 7 2006, 08:25
- - SasaVitebsk   В одном из моих проектов было много устройств I2C ...   Apr 2 2006, 10:27
- - Aquatik   SasaVitebsk опубликуй.. Очень хотелось бы посмотре...   Apr 3 2006, 06:45
- - SasaVitebsk   Заранее извиняюсь. Всё это начиналось давно. Тольк...   Apr 3 2006, 21:41
- - vesago   SasaVitebsk будь так любезен - выложи схемку в пдф...   Apr 6 2006, 10:50
- - SasaVitebsk   Схема была в EAGLE для быстроты. Мелочи не рисовал...   Apr 6 2006, 20:14
- - GOP   Еще библиотека для разработчика есть практически в...   Apr 17 2006, 15:43
- - prottoss   Выкладываю драйвер USARTа на Си, использующий коль...   May 22 2006, 14:46
- - defunct   Программный full-duplex UART для ATtiny13. С внутр...   May 23 2006, 05:16
- - prottoss   Привет всем! Стартовый исходник для символ...   May 30 2006, 14:15
|- - aleksey_g   Цитата(prottoss @ May 30 2006, 17:15) При...   May 30 2006, 15:37
|- - prottoss   Цитата(aleksey_g @ May 30 2006, 23:37) Ци...   May 30 2006, 15:50
- - agnedbay   Вот поляк выложил аппаратный TWI для управления LC...   Jun 9 2006, 11:32
- - Stas633   Не смог найти готового, поэтому сделал свое.... Б...   Jul 1 2006, 07:47
- - TamTam   Библиотека и модель в PROTEUSE 6.9. sp4 для подклю...   Jul 6 2006, 07:00
- - andr_doy   RkLibAvr Польская библиотека http://robkry.freepgs...   Sep 19 2006, 04:42
- - SasaVitebsk   Например при обработке сложного последовательного ...   Sep 28 2006, 00:35
- - Георгий   To SasaVitebsk: Я все таки не отказался бы от исхо...   Sep 28 2006, 04:31
- - kamedi_clab   Шаблон для быстрого программирования в CVAVR и отл...   Oct 8 2006, 17:01
- - VitPushchin   А вот приемник ИК пульта от Самсунга (кодировка ти...   Oct 23 2006, 14:23
- - SasaVitebsk   Свой вариант библиотек LCD44780 и DS1820. Очень п...   Nov 21 2006, 00:01
- - Screw   Здравствуйте! Я вот тут решил зарегистрироват...   Nov 29 2006, 22:08
|- - yarunt   Если кому интересно ,как я поборол жки нокиа3510и.   Jan 4 2007, 12:14
- - kuber   Проект на Pic MASTER-Pic16f628 Slave - Pic12f629...   Jan 8 2007, 23:03
- - Шалапут:-)   Поделюсь своим кодом на Ассме для организации меню...   Jan 11 2007, 04:56
- - Yuriy_AVR   Может кому будет полезно очень быстрое преобразова...   Jan 16 2007, 20:08
- - Fakir   на телесисах пробегала сылка на коллекцию исходник...   Jan 18 2007, 11:55
- - Сергей Борщ   Часто появляются вопросы об удобном доступе к ножк...   Jan 21 2007, 01:19
|- - ReAl   Цитата(Сергей Борщ @ Jan 21 2007, 00:19) ...   Jan 22 2007, 14:42
|- - Sergei Frolov   Код(* Вычисление дня недели в приложениях а...   Jan 30 2007, 16:34
- - umup   Сергей Борщ Цитата#define LED1 PORTC,2,H // o...   Feb 4 2007, 20:30
|- - Сергей Борщ   Цитата(umup @ Feb 4 2007, 19:30) Сергей Б...   Feb 4 2007, 23:16
- - Kuzmi4   Драсте всем! В прикреплённом файле - ф-ция и и...   Feb 21 2007, 10:57
- - megachip   Шрифт от Нокии 6510 анг/рус для библиотеки www.ape...   Feb 24 2007, 00:53
- - prottoss   Выложил исходники своего программатора AVR910 USB....   Feb 25 2007, 16:21
- - Kuzmi4   2 Beer - ну бывает...   Feb 26 2007, 15:16
- - SasaVitebsk   Часто при работе с АЦП приходится делать таблицу п...   Feb 27 2007, 14:21
- - Kuzmi4   оки... сча вот порылся , нашёл проэкт.. сча заттач...   Feb 27 2007, 15:30
- - yarunt   Цитата(Waso @ Dec 19 2005, 17:29) Предлаг...   Mar 20 2007, 10:22
|- - Qwertty   Цитата(yarunt @ Mar 20 2007, 10:22) Вот х...   Mar 20 2007, 11:26
|- - yarunt   Цитата(Qwertty @ Mar 20 2007, 12:26) В сх...   Mar 20 2007, 12:19
|- - Qwertty   Цитата(yarunt @ Mar 20 2007, 12:19) Диод...   Mar 20 2007, 12:40
|- - yarunt   Цитата(Qwertty @ Mar 20 2007, 13:40) Прав...   Mar 20 2007, 12:51
- - SasaVitebsk   Фонты 6х8, 8х8 в виндовой кодировке начиная с кода...   Mar 29 2007, 15:52
|- - acex2   Цитата(SasaVitebsk @ Mar 29 2007, 16:52) ...   Mar 29 2007, 22:44
- - Kolia   Додрый день Есть архивчик программ - весит 82 Мег...   Mar 30 2007, 12:11
- - DeXteR   Цитата(Kolia @ Mar 30 2007, 13:11) Додрый...   Mar 30 2007, 13:51
|- - xemul   Цитата(DeXteR @ Mar 30 2007, 13:51) Ктони...   Mar 30 2007, 14:04
- - Александр Куличок   ЦитатаНе совсем исходники, но все же: Макросы для ...   Apr 10 2007, 16:32
- - by-pass   Класс для работы с CAN контроллера AT90CAN128. C++...   Apr 13 2007, 23:01
- - umup   вот немного : http://umup.narod.ru/ul_c_lib.zip   May 15 2007, 03:22
- - Serg_greS   Вот нашел несколько вещей на досуге, думаю будет и...   Jun 9 2007, 04:02
- - Serg_greS   h_tp://barello.net/avrx/index.htm AvrX is a Real T...   Jul 4 2007, 11:24
- - IgorKossak   Как то пытался использовать AVRx RTOS. Проект сыро...   Jul 10 2007, 18:18
- - Serg_greS   Еще немного библиотек h__p://www.ember.com/pdf/EM2...   Jul 31 2007, 09:42
- - Serg_greS   Цитатано как добраться к тем хэдерам в смысле к са...   Aug 3 2007, 11:50
- - dimka76   пример проекта умножения с плавающей точкой. работ...   Aug 16 2007, 11:55
|- - haker_fox   Цитата(dimka76 @ Aug 16 2007, 20:55) прим...   Aug 17 2007, 00:16
- - at90   Вот куча исходников для AVR от немцев. https://141...   Oct 1 2007, 06:35
- - yarunt   rc-5 на Алгоритм билдере.Может кому пригодится.   Oct 29 2007, 12:01
- - Waso   Выкладываю портированный мною под ИАР TCP-IP стек ...   Oct 31 2007, 04:06
|- - Сергей Борщ   Цитата(Waso @ Oct 31 2007, 06:06) Выклады...   Nov 6 2007, 22:43
- - INT1   Здесь есть библиотеки для MODBUS http://freemodbu...   Oct 31 2007, 13:41
- - umup   вот кусок : www.ukpyr.narod.ru/mb_clp.c правда там...   Nov 6 2007, 19:31
- - alekseyb   Подсчет CRC для DALLAS 1Wire устройств.Работает оч...   Dec 7 2007, 02:58
2 страниц V   1 2 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 20:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016