|
|
  |
Исходники программ и библиотек, у вас есть чем поделиться? |
|
|
|
Sep 13 2009, 13:36
|

Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250

|
Цитата(zltigo @ Sep 13 2009, 17:04)  Посмотрел. Это будет правильным решением  Ну, именно от Вас я ожидал подобной фразы... Аргументируйте, если не трудно. Пусть будет мне наукой. Я, конечно, не претендую на звание "образец стиля" в написании программ, если Вы это имели ввиду под чисто ремесленными навыками, это оттачивается с годами. Нельзя ли конкретней? А то Вы только интригуете подобными фразами. Мне снизу не видно!
Сообщение отредактировал injen-d - Sep 13 2009, 13:12
--------------------
- Бендер, ты же робот, зачем тебе пить пиво? - Незачем! Я могу бросить в любой момент!
|
|
|
|
|
Oct 26 2009, 13:51
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 24-10-08
Пользователь №: 41 157

|
для работы с инкрементным энкодером
encoder.rar ( 1.07 килобайт )
Кол-во скачиваний: 1019для преобразования двоичных чисел в двоично десятичные и вывода на lcd
bcd.rar ( 1.36 килобайт )
Кол-во скачиваний: 839знакогенератор для LCD от Nokia3310
DriverNokia3310Tx.rar ( 6 килобайт )
Кол-во скачиваний: 732библиотека для работы с LCD от Nokia3310 с видео буфером. нужно от 1 КБ ОЗУ.
DriverNokia3310vb.rar ( 6.77 килобайт )
Кол-во скачиваний: 708
|
|
|
|
|
Oct 27 2009, 15:16
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Модуль доступа к 16-и битным регистрам AVR (для avr-gcc). CODE ======================================================================= ===== #define avr_read_word_atomic(addr) \ (__extension__({ \ uint16_t __addr16 = (uint16_t)(addr); \ uint16_t __result; \ __asm__ __volatile__ \ ( \ "in __tmp_reg__,__SREG__" "\n\t" \ "cli" "\n\t" \ "ldd %A0,%a1+0" "\n\t" /*lo*/ \ "out __SREG__, __tmp_reg__" "\n\t" \ "ldd %B0,%a1+1" /*hi*/ \ : "=r" (__result) /* output operands */ \ : "e" (__addr16) /* input operands */ \ : "memory" /* list of clobbered registers */ \ ); \ __result; \ }))
// ============================================================================ #define avr_write_word_atomic(addr,value) \ (__extension__({ \ uint16_t __addr16 = ((uint16_t)(addr)); \ uint16_t __value = (uint16_t)(value); \ __asm__ __volatile__ \ ( \ "in __tmp_reg__,__SREG__" "\n\t" \ "cli" "\n\t" \ "std %a1+1,%B0" "\n\t" /*hi*/ \ "out __SREG__, __tmp_reg__" "\n\t" \ "std %a1+0,%A0" /*lo*/ \ : /* output operands */ \ : "r" (__value), /* input operands */ \ "e" (__addr16) \ : "memory" /* list of clobbered registers */ \ ); \ }))
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Nov 2 2009, 22:02
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(sansnotfor @ Oct 26 2009, 16:51)  для работы с инкрементным энкодером
encoder.rar ( 1.07 килобайт )
Кол-во скачиваний: 1019для преобразования двоичных чисел в двоично десятичные и вывода на lcd
bcd.rar ( 1.36 килобайт )
Кол-во скачиваний: 839знакогенератор для LCD от Nokia3310
DriverNokia3310Tx.rar ( 6 килобайт )
Кол-во скачиваний: 732библиотека для работы с LCD от Nokia3310 с видео буфером. нужно от 1 КБ ОЗУ.
DriverNokia3310vb.rar ( 6.77 килобайт )
Кол-во скачиваний: 708Добавлю-ка я вариант с учетверением количества импульсов валкодера. indent-ы в исходном тексте съела форма ответа на сообщение... CODE static uint_least8_t old_val;
void spool_encinterrupt(void) { uint_least8_t new_val = hardware_get_encoder_bits(); /* Состояние фазы A - в бите с весом 2, фазы B - в бите с весом 1 */
// dimensions are: // old_bits new_bits const static int_least8_t v [4][4] = { { +0, /* 00 -> 00 stopped */ -1, /* 00 -> 01 rotate left */ +1, /* 00 -> 10 rotate right */ +0, /* 00 -> 11 invalid combination */ }, { +1, /* 01 -> 00 rotate right */ +0, /* 01 -> 01 stopped */ +0, /* 01 -> 10 invalid combination */ -1, /* 01 -> 11 rotate left */ }, { -1, /* 10 -> 00 rotate left */ +0, /* 10 -> 01 invalid combination */ +0, /* 10 -> 10 stopped */ +1, /* 10 -> 11 rotate right */ }, { +0, /* 11 -> 00 invalid combination */ +1, /* 11 -> 01 rotate right */ -1, /* 11 -> 10 rotate left */ +0, /* 11 -> 11 stopped */ }, };
rotate += v [old_val][new_val];
old_val = new_val; }
ISR(INT0_vect) { spool_encinterrupt(); }
ISR(INT1_vect) { spool_encinterrupt(); }
void encoder_clear(void) { rotate2 = 0; disableIRQ(); rotate = 0; tickcount = TICKCOUNT_MAX; enableIRQ(); } /* получение количества шагов и времени с последнего вызова. */ int encoder_snapshot( uint_least8_t * ticks, uint_least8_t derate) { div_t h; int hrotate;
disableIRQ(); if (tickcount != 0) { * ticks = tickcount; tickcount = 0; hrotate = rotate; rotate = 0; } else { * ticks = 1; hrotate = 0; //hrotate = rotate; //rotate = 0; } enableIRQ();
/* Ументшение разрешения валкодера в зависимости от установок в меню */ h = div(hrotate + rotate2, derate);
rotate2 = h.rem;
return h.quot; }
/* получение "редуцированного" количества прерываний от валкодера. * То что осталось после деления на scale, остается в накопителе */
int getRotateLoRes(void) { uint_least8_t ticks; return encoder_snapshot(& ticks, ROTATE_LORES_DIV * hiresdiv); }
Сообщение отредактировал Genadi Zawidowski - Nov 2 2009, 22:05
|
|
|
|
|
Dec 28 2009, 11:20
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Простой программный UART-передатчик. STX - Simple TX Удобно в Proteus нацепить на reset-вывод. Код работает под IAR и CodeVisionAVR. (добавите WinAVR - буду рад добавить в исходник) В архиве (функция и проекты IAR, CV, Proteus) STX Rev.71
|
|
|
|
|
Jan 2 2010, 23:31
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 24-10-08
Пользователь №: 41 157

|
Простой драйвер символьного lcd на основе контроллеров ks0066. Проверка флага занятости. Поддержка 4-ех и 8-ми разрядной шины. В архиве 2 варианта - для IARa и для WINAVR.
lcd_winstar.rar ( 3.92 килобайт )
Кол-во скачиваний: 762
Сообщение отредактировал sansnotfor - Jan 2 2010, 23:31
|
|
|
|
|
Mar 2 2010, 07:20
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 27-11-08
Пользователь №: 41 999

|
1. Библиотека V-USB (старое название AVR-USB) - программная реализация протокола USB на AVR. Есть примеры рабочих устройств USB и компутерных программ, работающих с этими устройствами. Библиотека бесплатная. Комментарии в библиотеке и примерах переведены на русский язык. 2. Макетные платы, на которых удобно применять библиотеку V-USB: AVR-USB-MEGA16, AVR-USB-TINY45. 3. Макетные платы с аппаратным интерфейсом USB: AVR-USB162, AT91SAM7X.
|
|
|
|
|
Mar 14 2010, 23:57
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 24-10-08
Пользователь №: 41 157

|
Драйвер матричной клавиатуры 3х4. Подходит для любого компилятора, нужно только подключить соответствующих заголовочный файл мк. Позволяет подключать клавиатуру как к разным портам, так и к одному. Единственное условие - столбцы матрицы должны быть подключены к младшим разрядам порта, строки - к старшим.
|
|
|
|
|
Apr 22 2010, 10:26
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Небольшая поправочка к моему сообщению №138 в этой ветке форума, вот так будет вернее: CODE ============================================================================ #define avr_read_word_atomic(addr) \ (__extension__({ \ uint16_t __addr16 = (uint16_t)(addr); \ uint16_t __result; \ __asm__ __volatile__ \ ( \ "in __tmp_reg__,__SREG__" "\n\t" \ "cli" "\n\t" \ "ldd %A0,%a1+0" "\n\t" /*lo*/ \ "out __SREG__, __tmp_reg__" "\n\t" \ "ldd %B0,%a1+1" /*hi*/ \ : "=r" (__result) /* output operands */ \ : "b" (__addr16) /* input operands */ \ : "memory" /* list of clobbered registers */ \ ); \ __result; \ }))
// ============================================================================ #define avr_write_word_atomic(addr,value) \ (__extension__({ \ uint16_t __addr16 = ((uint16_t)(addr)); \ uint16_t __value = (uint16_t)(value); \ __asm__ __volatile__ \ ( \ "in __tmp_reg__,__SREG__" "\n\t" \ "cli" "\n\t" \ "std %a1+1,%B0" "\n\t" /*hi*/ \ "out __SREG__, __tmp_reg__" "\n\t" \ "std %a1+0,%A0" /*lo*/ \ : /* output operands */ \ : "r" (__value), /* input operands */ \ "b" (__addr16) \ : "memory" /* list of clobbered registers */ \ ); \ }))
заменил "e" (__addr16) на "b" (__addr16) а то вдруг компилятор попытался сгенерить STD X+1,N (мой косяк) а можно лишь STD Y+1,N STD Z+1,N
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 3 2010, 08:56
|
Группа: Новичок
Сообщений: 2
Регистрация: 3-06-10
Пользователь №: 57 722

|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;ah:al/bl 86байт 46 тактов ;ah=]ah:al/bl[ остаток ;al=[ah:al/bl] частное div16_8: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; lsl al ;1 rol ah ;1 sbc ah,bl ;1 brsh koko7 ;2/1 add ah,bl ;1 koko7: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko6 ;2/1 add ah,bl ;1 koko6: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko5 ;2/1 add ah,bl ;1 koko5: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko4 ;2/1 add ah,bl ;1 koko4: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko3 ;2/1 add ah,bl ;1 koko3: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko2 ;2/1 add ah,bl ;1 koko2: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko1 ;2/1 add ah,bl ;1 koko1: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; rol ah ;1 sbc ah,bl ;1 brsh koko0 ;2/1 add ah,bl ;1 koko0: rol al ;1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; com al ;1 ret ;4 6+7*5+5=46 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;СRC-CCITT_16 0x1021;;;;;;;;; ;CRC-XMODEM (0x1021) Initial value:0x0 ; ; 50 байт ; ; 18 тактов на байт ;Z-sumbol al=dlin ; ;bh:bl=crc-16 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; crc_home: clr bh ;1 clr bl ;1 crc_plus: push al ;2 push ah ;2 push r1 ;2 push r0 ;2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; crc_loop1: ld ah,Z+ ;2 eor bh,ah ;1 ldi ah,16 ;1 mul ah,bh ;2 eor bh,r1 ;1 mul ah,bh ;2 eor bl,r0 ;1 add r0,r0 ;1 adc r1,r1 ;1 eor r0,bh ;1 eor r1,bl ;1 movw bh:bl,r1:r0;1 dec al ;1 brne crc_loop1 ;2/1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18 pop r0 ;2 pop r1 ;2 pop ah ;2 pop al ;2 ret ;4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
Jun 23 2010, 06:13
|

Участник

Группа: Участник
Сообщений: 23
Регистрация: 1-07-09
Пользователь №: 50 799

|
Небольшая утилита для Windows с исходниками Позволяет осуществлять удобное кодирование таблички для 7ми сегментного (семисегментного) индикатора Откомпилированный фал в папке realise В программе можно визуально указать какой сегмент к какому выводу контроллера подсоединен собственно PB и PD указанно для удобства можно читать что там и PA и PE короче PX и PY в результирующем фале digs.inc будет табличка из .dw биты которого будут соответствовать PXn и PYn то есть по адресу=адрестаблички+цифра*2 мы получим два байта которые можно сразу outить в PX и PY ну моджет быть замаскировав неиспользуемые биты это уже вторая версия, предыдущая была рассчитана только на один порт и генерировала готовый код с использованием оперативной памяти
Прикрепленные файлы
7SEG2.RAR ( 24.69 килобайт )
Кол-во скачиваний: 495
--------------------
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|