|
Исходники программ и библиотек, у вас есть чем поделиться? |
|
|
13 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
Dec 20 2005, 01:03
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Может быть сюда вообще выкладывать различные подпрограммы, для работы не только с периферией, но и например математику, сортировку, обработку данных и т.п. Для "затравки" хочу выложить свое скромное творчество: CRC8.ZIP - модуль для подсчета CRC8 по табличному способу (накажут меня модераторы, я уже где-то этот модуль выкладывал). MT_10T7.ZIP - модуль для работы с дисплеем MT-10T7 фирмы "МЭЛТ" (ЖКИ 10 семисегментных знакомест + контроллер управления). RTC.ZIP - модуль программных часов, реализована проверка високосного года. Функция rtc_service() должна вызываться каждую секунду. P.S. В этих библиотеках, как и в любой нормальной программе, есть баги, которые я еще не встречал, просто не было удобного случая  Есть еще библиотека для работы с протоколом WAKE (http://www.spetspribor.com/support/software/wake/wake.html), если кого заинтересует, могу выложить.
Прикрепленные файлы
CRC8.zip ( 1.42 килобайт )
Кол-во скачиваний: 17339
MT_10T7.zip ( 1.91 килобайт )
Кол-во скачиваний: 17084
rtc.zip ( 1.64 килобайт )
Кол-во скачиваний: 16897
--------------------
Выбор.
|
|
|
|
|
Dec 20 2005, 06:23
|

Знающий
   
Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814

|
Вот библиотечка для работы с ЖКИ 16x2 и жк ht1611. Взял здесь! http://www.averos.narod.ru/products/8515.htm
Прикрепленные файлы
8515.zip ( 80.97 килобайт )
Кол-во скачиваний: 47415
--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
|
|
|
|
|
Dec 21 2005, 08:45
|
Гуру
     
Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48

|
В данном топике предлагается выкладывать различные исходные тексты программ и библиотек (как своих так и не очень  ). Приветствуется подробный стиль изложения сути предлагаемого (но только по теме  ). Сами исходные тексты выкладывать лучше аттачем к сообщению или ссылкой на них. Короткие тексты (в пределах разумного) допускается публиковать прямо в теле сообщения. Различный флейм и бессодержательные сообщения будут пресекаться на корню. Удачи.
--------------------
Вам помочь или не мешать?
|
|
|
|
|
Jan 11 2006, 15:22
|
Частый гость
 
Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334

|
Вот мои используемые практически в каждом проекте наработки: 1. Timer. Модуль таймеров. Использует таймер 3 (Мега128). Дискретность - 1 мсек. Предоставляет пользователю 8 таймеров, каждый из которых может быть однократным (отсчитал интервал и остановился) и циклическим (отсчитал, выставил флаг и перезапустился). По истечению каждого таймера может запускаться внешняя процедура. 2. AsyncTmr. Асинхронный таймер - использует таймер 0 в асинхронном режиме. Дискретность - 1 секунда. Функционально аналогичен предыдущему. 3. 3Wire. Драйвер шины 3-Wire (не путать с SPI!!!). Служит базой для построения драйверов устройств, подключаемых по 3-Wire (например, DS2404). Особенность - задержки подобраны под кварц 16 МГц. 4. MT12864. Драйвер графического дисплея MT12864 с набором шрифтов 6 на 8, 7 на 10 толстый и тонкий, 12 на 16 пикселов. Особенность - задержки подобраны под кварц 16 МГц. 5. PE12864. Драйвер графического дисплея PE12864 с набором шрифтов 6 на 8, 7 на 10 толстый и тонкий, 12 на 16 пикселов. Особенность - задержки подобраны под кварц 4 МГц.
|
|
|
|
|
Jan 23 2006, 17:49
|
Участник

Группа: Свой
Сообщений: 41
Регистрация: 16-02-05
Пользователь №: 2 688

|
Цитата(Balaganov @ Jan 19 2006, 18:01)  Хидер задержек для IAR. Использует __delay_cycles для формирования задержек от наносекунд до секунд. В параметре CPU_CLK_Hz указать тактовую частоту в герцах.[attachment=3956:attachment] Сори не тот файл выложил, он в принципе рабочий, но до 2 с копейками МГц. Вот последний вариант
delay.h.txt ( 379 байт )
Кол-во скачиваний: 16475
|
|
|
|
|
Jan 25 2006, 00:57
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050

|
Калкулатор boudrate для Usarta. Не нашел готовъи вариант и написал ета прога. Думаю кто то поможет. p.s Ест какои то проблем с закачки фаилов в форуме. exe,rar,zip не хочет принимат. Ето rar которъй переименовал на txt. Поменяите рзширение.
|
|
|
|
|
Jan 25 2006, 22:48
|

Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 4-05-05
Из: Харьков
Пользователь №: 4 740

|
Както не хватает: http://hubbard.engr.scu.edu/avr/avrlib/ [b]Procyon AVRlib Overview[/b] General AVR Built-In Peripheral Drivers - Byte Buffering (circular)
- Bit Buffering (linear)
- Printf and other formatted print functions
- VT100 Terminal Output
- Command Line Interface
- FAT16/32 File System (support is read-only for now)
- STX/ETX Packet Protocol
- Fixed-Point Math Library (basic operations only)
- Timers (with PWM, interrupt management)
- UART (interrupt driven)
- A/D Converter
- I2C Master/Slave (interrupt and non-intr)
- SPI Interface
- External Interrupts
External Hardware Device Drivers AVR Software-Emulated Devices - Character LCD Modules (HD44780-based)
- I2C EEPROM Memories
- SPI EEPROM Memories
- MMC/SD Card Interface (SPI mode)
- LIS3L02 ST Accelerometer
- IDE/ATA Interface (for hard disks and CF cards)
- Quadrature Encoders
- RC-Servos (up to 8 channels)
- STA013 MP3 Decoder Chip
- GPS Receivers (via serial port)
- NMEA-0813 Protocol
- Trimble TSIP Protocol
- Graphic LCD Modules
- KS0108/HD61202 Controller
- T6963 Controller
- LCD Fonts and Symbols
- I2c Master (Bit-Bang)
- UART (software-based, timer interrupt driven)
- Pulse Output (timer-based, variable frequency)
- Intel-type Memory Bus (Address & Data Buses + nRD,nWR)
Network Support - Device Drivers
- RTL8019 Ethernet
- AX88796 Ethernet
- CS8900 Ethernet
- Prism2 Wireless LAN
- Network Protocols
- Network Stack infrastructure
--------------------
SY AfE
|
|
|
|
|
Jan 29 2006, 17:50
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334

|
Преобразователь *.ebn в *.hex. Хоть таких файлов и не очень много(jtagice,stk500), может кому-нибудь пригодиться. Замечания и предложения слать в личку.
EBN2HEX.rar.txt ( 34.29 килобайт )
Кол-во скачиваний: 22830 файл переименовать в EBN2HEX.rar
--------------------
Всяк хорошая мысля к нам приходит опосля.
|
|
|
|
|
Feb 6 2006, 11:37
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 10-01-06
Из: Старый Оскол
Пользователь №: 12 994

|
haker_fox Как насчет выложить библтотеку для работы с протоколом WAKE? Цитата Есть еще библиотека для работы с протоколом WAKE (http://www.spetspribor.com/support/software/wake/wake.html), если кого заинтересует, могу выложить. Цитата Есть еще библиотека для работы с протоколом WAKE (http://www.spetspribor.com/support/software/wake/wake.html), если кого заинтересует, могу выложить.
|
|
|
|
|
Feb 7 2006, 00:19
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(ЛЕСЯ @ Feb 6 2006, 19:37)  haker_fox Как насчет выложить библтотеку для работы с протоколом WAKE? Цитата Есть еще библиотека для работы с протоколом WAKE (http://www.spetspribor.com/support/software/wake/wake.html), если кого заинтересует, могу выложить. Цитата Есть еще библиотека для работы с протоколом WAKE (http://www.spetspribor.com/support/software/wake/wake.html), если кого заинтересует, могу выложить. Выкладываю... НО, там помимо самой реализации протокола, есть еще и команды, которые мой девайс выполняет по указанию компьютера, на них можно не обращать внимания. Вырезать не стал, дабы нечайно не попортить исходник. Сразу скажу, что в том виде, в котором модуль выложен, он работать не будет, т.к. часть программных счетчиков считается в другом модуле, где обрабатываются прерывания, да и ввел я их сам, для тайм-аутов... В общем исходники только для пояснения общей сути, за более подробным объяснением сюда http://www.spetspribor.com/support/software/wake/wake.html. В крайнем случае, если что, можно в PM спросить.
Прикрепленные файлы
wake.zip ( 7.03 килобайт )
Кол-во скачиваний: 15301
--------------------
Выбор.
|
|
|
|
|
Feb 16 2006, 09:50
|
Участник

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

|
Модуль для работы с текстовым дисплеем 16x2 При всей изученности (если не сказать избитости) темы хочу предложить свое решение. Его особенности: - для использования в своем проекте достаточно переписать функции чтени/записи данных и чтения команд с контроллера индикатора - перекодировка из кодовой таблицы 1251 происходит runtime, так что можно вводить текстовые строки в своей привычной кодировке - предварительный буфер дисплея можно заполнять, используя форматированный вывод sprintf - для записи обработанных данных в контроллер дисплея достаточно вызывать быструю подпрограмму только в одном месте (прерывании таймера с частотой около 34 Гц) - не загружает параллельные задачи (например подсчёт входных импульсов)
|
|
|
|
|
Feb 16 2006, 11:20
|
Участник

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

|
Расчёт CRC16 - на С с оптимизацией по скорости (таблица 512 байт) - на С с оптимизацией по длине - на Pascal/Delphi
Прикрепленные файлы
crc16.zip ( 2.31 килобайт )
Кол-во скачиваний: 15921
|
|
|
|
|
Mar 7 2006, 08:25
|
Участник

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

|
Вылаживаю подпрограмму (Div24.asm) для беззнакового делени 24-х битного числа. Используется хороший алгоритм, работает быстро. Коечто можно упростить.
Прикрепленные файлы
Div24.zip ( 1.56 килобайт )
Кол-во скачиваний: 15937
|
|
|
|
|
Apr 2 2006, 10:27
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
В одном из моих проектов было много устройств I2C и I2C - подобных (АЦП, ЦАП, 24сХХ и тд). Необходима была также клавиатура и дисплей. А ножек контроллера катострофически не хватало. Короче я разработал на at90s2313 устройство I2C Дисплей-клавиатура-динамик-светодиоды. Изделие получилось на редкость удачное. И я его использовал неоднократно. Один экземпляр оставил себе. Использую для отладки. Опишу преимущества: 1) Функционально законченный блок не требующий отладки. (У меня это плата на которой запаяны клавиатура, дисплей, схема управления, I2C память, выходной разъём) 2) Занимает малое число ног основного контроллера. Частично разгружает основной контроллер. 3) Можно выбрать кодовую таблицу символов (DOS/WIN). Таким образом программа основного микроконтроллера становится более наглядна. 4) Имеются команды управления дисплеем, - прямая адресация курсора; очистка дисплея; различные звуковые сигналы. 5) Низкая стоимость микросхем обвязки. 6) Обслуживание клавиатуры опросом и по прерыванию. 7) Простота реализации I2C интерфейса позволяет быстро включить данное устройство в свой проект. Если есть интерес, то я могу опубликовать данный проект.
|
|
|
|
|
Apr 3 2006, 21:41
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Заранее извиняюсь. Всё это начиналось давно. Только появились 2313.  Схема у меня не сохранилась восстановил по памяти и программе. Проект был на avr studio 3.  Короче перекомпильнул поновый. Может огрехи какие спрашивайте. По схеме заметки. 1) От резета BOD. Я его не рисовал. Если возьмёте tiny2313, то он вааще не нужен. 2) Элемента "клава" я не нашёл, - поставил разъём на схеме. Клава стандартная 4х4. 4 верхних на перебор, 4 нижних на опрос. 3) Регистр типа ИР33,37 или ИР22,23. 4) Я ставил кварц 11059, хотя можно и 10М 5) Обычная ЗП-эшка 6) Озу 24сХХ стоят для примера. На плате были, хотя и не всегда запаивались 7) Индикатор любой на 44780 Существует более поздний вариант на mega8. Он без доп элементов. Чуть позже скину прогу для PC для тестирования Чёто не влезло. Высылаю остальное
Прикрепленные файлы
pult2313.sch ( 147.21 килобайт )
Кол-во скачиваний: 16412
pult.rar ( 172.19 килобайт )
Кол-во скачиваний: 16832
|
|
|
|
|
Apr 20 2006, 20:36
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
По просьбам трудящихся выкладываю дополнительно по теме пульт i2c: 1) Схема присоединения к LPT порту PC 2) Библиотека для использования для AVR и 8051 Библиотеки правда не очень.  Я обычно в проект вкладываю. Теперь выдирать пришлось. Возможно чего-нибудь покалечил.  Но вроде там всё просто сами доработаете. Или на мыло пишите.
Сообщение отредактировал SasaVitebsk - Apr 20 2006, 20:37
Прикрепленные файлы
bibl.rar ( 10.35 килобайт )
Кол-во скачиваний: 15205
|
|
|
|
|
May 30 2006, 15:37
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Цитата(prottoss @ May 30 2006, 17:15)  Привет всем! Стартовый исходник для символьных ЖКИ на основе HD44780. Красиво! Молодец. Хорошо постарался! Но рассчитывать задержки вручную? Не лучше ли так: #define XTALL 16.0 #define delay_us(us) __delay_cycles (XTALL * us); #define delay_ms(ms) delay_us (1000 * ms) По моему было бы еще удобнее.
|
|
|
|
|
May 30 2006, 15:50
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(aleksey_g @ May 30 2006, 23:37)  Цитата(prottoss @ May 30 2006, 17:15)  Привет всем! Стартовый исходник для символьных ЖКИ на основе HD44780.
Красиво! Молодец. Хорошо постарался! Спасибо...) Цитата(aleksey_g @ May 30 2006, 23:37)  Но рассчитывать задержки вручную? Не лучше ли так: #define XTALL 16.0 #define delay_us(us) __delay_cycles (XTALL * us); #define delay_ms(ms) delay_us (1000 * ms) По моему было бы еще удобнее. Может быть так и лучше)
--------------------
|
|
|
|
|
Jun 9 2006, 11:32
|
Группа: Новичок
Сообщений: 10
Регистрация: 22-03-05
Пользователь №: 3 592

|
Вот поляк выложил аппаратный TWI для управления LCD (CVAVR) http://lcd.strony.pl/d-104v1.htmПроверял нужные для меня (делал 2 i2c аппаратный и программный) куски кода все работает. А вот взагали http://lcd.strony.pl/ что есть. Хоть и по польски, но понятно.
|
|
|
|
|
Jul 1 2006, 07:47
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Не смог найти готового, поэтому сделал свое.... Бегущая строка для HD44780 на Си. Выполнено в CV_AVR... Файл в формате .html, так как пояснений больше чем собственно кода...
beg_stroka.rar ( 2.6 килобайт )
Кол-во скачиваний: 17269
|
|
|
|
|
Jul 6 2006, 07:00
|

Местный
  
Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254

|
Библиотека и модель в PROTEUSE 6.9. sp4 для подключения HD44780 всего по 3 проводам с использованием сдвигового регистра 74HC164 МК. Компилятор CodeVisionAVR Отбельная благодарность за помощь в понимание и написание программы: 1. rat - описание работы с HD44780 2. otrog - правка кода и правильный загон строк в регистр
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 31 2006, 18:41
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Wladimir_TS @ Aug 26 2006, 10:58)  Не уверен уместно-ли здесь просить какие - либо исходники, но я попробую: Необходима процедура вычисления логарифма с произвольным целым рснованием в диапазоне 2-10. Режим вычислений - с фиксированной точкой. требование - минимальный занимаемый объем. Ну очень надо - может кто ссылки где видел.  Нашёл у себя математику для 8051. Но переписать несложно.
Прикрепленные файлы
MATHLIB.rar ( 10.28 килобайт )
Кол-во скачиваний: 14688
|
|
|
|
|
Oct 8 2006, 17:01
|
Местный
  
Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004

|
Шаблон для быстрого программирования в CVAVR и отладки в VMLAB В шаблоне содержится папка с проектми для компилятора CVAVR и симулятора VMLAB. Можно сразу запустить симуляцию в VMLAB программы выводящей сообщения на ПК и мигающей светодиодами. Можно изменить программу под ваши нужды в компиляторе CVAVR - при этом удобно использовать генератор кода компилятора. После отладки окончательного варианта программы в симуляторе вы можете прошить МК прямо из компилятора CVAVR. Во время работы удобно одновременно запустить и CVAVR и VMLAB.
|
|
|
|
|
Oct 23 2006, 14:23
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 13-10-05
Пользователь №: 9 568

|
А вот приемник ИК пульта от Самсунга (кодировка типа NEC, но со своими особенностями). Работает на АТтини2313, у меня - 11.059 мгц кварц. Собственно, по сорсам все понятно должно быть.
|
|
|
|
|
Nov 21 2006, 00:01
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Свой вариант библиотек LCD44780 и DS1820. Очень понравился по стилю написания вариант работы с HD44780 от protoss, но как мне кажется он не полный. Выкладываю свой. Думаю уважаемый protoss им не воспользуется, а вот начинающие - возможно. Также вариант библиотеки для работы с DS18x20. Возможности LCD44780. Есть вторичный вывод. Вывод символа в Win кодировке, прямая адресация курсора, сплитер и др. Поддерживаются стандартные п/п printf и outs вместе с форматированием. Форматирование расширено что позваляет легко делать меню. Возможности DS18x20. Позволяет подключать несколько датчиков DS1820/18b20/18s20 в любом сочетании. Позволяет динамически определять их колличество и подключать новые. Позволяет работать с ними по 2-ух проводной шине.
Прикрепленные файлы
ds1820.zip ( 4.51 килобайт )
Кол-во скачиваний: 16120
HD44780.zip ( 5.85 килобайт )
Кол-во скачиваний: 15899
|
|
|
|
|
Nov 29 2006, 22:08
|

Частый гость
 
Группа: Свой
Сообщений: 149
Регистрация: 29-11-06
Из: Барнаул
Пользователь №: 22 916

|
Здравствуйте! Я вот тут решил зарегистрироваться и кое чем поделиться, ибо искал это кое что.... долго  А именно - исходник инициализации и работы с LCD МТ-16s2 фирмы МЭЛТ по 4-х проводному интерфейсу. Написано под WinAvr, но я за 5 минут переделал под CVAVR. Выкладываю оригинал (надеюсь автор не будет против). Вся бякость этого LCD состоит в том, что он не совсем аналог HD44780
Сообщение отредактировал Screw - Nov 29 2006, 22:10
|
|
|
|
|
Jan 8 2007, 23:03
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 6-01-07
Пользователь №: 24 153

|
Проект на Pic MASTER-Pic16f628 Slave - Pic12f629 Monitor 2 Wire 7Adr Led Устройство состоит из блока графической индикации 5х8 точек с формирователем 2 проводной линии связи с адресными устройствами. Питание адресников осуществляется по тойже линии связи. Каждый адресник имеет 2 входа замыкаемые на массу. Блок индикации обслуживает 8 адресных устройств. Индикация, наличие адресного устройство на линии, и о замыкании у адресного устройства входных линий на землю. Адресники могут содержать фиксированный адрес 0-7, или вариант адресника с 3 перемычками задающий адрес устройства. Блок индикации является MASTEROM на линиа а адресники SLAVE. Начало обмена- команда сброс для всех адресников, далее пакет из 4 байт. 1 -адрес устройства 2 -код команды (чтение или запись из адресника) 3 -байт данттых 4 -CRC8 контрольная сумма. Мастер посылает пакет адреснику и читает ответ с линии и проверяя CRC пакета, если CRC не совпадает, MASTER повторяет посылку ещё 2 раза. Если, нет то считается что адресника нет. Весь проект с схемами, фотками и файлами -ASM,HEX Мажет пригодится кому нибудь. aralgen@mail.ru
Прикрепленные файлы
arxiv.rar ( 80.49 килобайт )
Кол-во скачиваний: 1662
|
|
|
|
|
Jan 11 2007, 04:56
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Поделюсь своим кодом на Ассме для организации меню на буквенно цифровом дисплее HD4478 16х2.. В программе реализована отправка строк с флеш памяти. При нажатии одной из 4 кнопок происходит прерывание Int_1, затем его обработка (со звуковым сигналом). Куда подключать кнопки и дисплей, ясно из программы, динамик-через усилительный транзистор Расчитано для работы на 4 МГц кварце. Для приминения на других частотах кварца нужно просто поменять значение, заносимое в рег r20 DELAY20MS: wdr; sbros storozhevogo timera (mozhno zapreshat' ego raboty) LDI R20,110; Сюда (20=1МГц, 40=2 и.т.д) d20: dec r20 ... если что неясно, пишите kadrum@narod.ru или ICQ#: 191-851-131  код для HD 4478 здесь
Сообщение отредактировал Шалапут:-) - Jan 11 2007, 05:09
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
|
Jan 16 2007, 20:08
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Может кому будет полезно очень быстрое преобразование двоичного ( 4-х байтного ) числа в двоично-десятичное число . Собственный алгоритм . Взято из рабочей программы ; некогда было окультуривать. Вполне можно перенести на Си . Очень удобно когда есть неоходимость , например , вывода на экран каких либо значений , которые считаются внутри в двоичном виде .
|
|
|
|
|
Jan 21 2007, 01:19
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Часто появляются вопросы об удобном доступе к ножкам порта. Несколько раз выкладывал в разных темах очень удобные (как мне кажется) макросы. Решил выложить здесь наиболее свежую версию, чтобы потом долго не искать. Пользоваться ими так: Код #define LED1 PORTC,2,H // output, active high (led from PC2 to GND) #define LED2 PORTD,3,L // output, active low (led from Vcc to PD3) #define KEY1 PINB,5,L // input, active low (key from PB5 to GND, pull-up resistor) #define KEY2 PINC,7,H // input, active high (key from Vcc to PC7, pull-down resistor)
#include "ascold.h" unsigned char Key1Status; unsigned char Key2Status; void main() { Key1Status = signal(KEY1); Key2Status = signal(KEY2); for(;;) { cpl(LED1); // toggle LED1 if(signal(KEY1)) // if KEY1 pressed, turn on LED2 on(LED2); else // otherwice turn off LED2 off(LED2); } }} Если в результате переразводки вывод поменялся, достаточно изменить лишь одну строчку #define Я использую с компилятором IAR для процессоров AVR, MSP430, AT91SAM7, LPC2xxx, ADuC70xx. Но они должны работать и с любым другим компиляторм.
Прикрепленные файлы
ascold.zip ( 1.15 килобайт )
Кол-во скачиваний: 2506
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 22 2007, 14:42
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Сергей Борщ @ Jan 21 2007, 00:19)  очень удобные (как мне кажется) макросы. Я тоже ими пользуюсь очень давно :-) Только signal() переименовал сразу же в bit_active() (ну и все остальные в bit_on/bit_off для однообразия). После какого-то давнего залёта со своей переменной с именем errno в борландовском С - не рискую применять имена, могущие пересечься с чем-то "очень стандартным".
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 30 2007, 16:34
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 28-05-05
Из: Питер
Пользователь №: 5 495

|
Код (* Вычисление дня недели в приложениях автоматического вычисления дня недели в датах от 1996 года и старше.
Copyright (C) Sergei Frolov, 1998. v1.0 Jan, 4, 1998.
Программа ориентирована на применение в приложениях, написанных на языке ассемблера без использования аппаратного умножения/деления и операций с плавающей запятой. *)
program denned; const YEARS : array[0.. 3] of byte = (0, 2, 3, 4); MONTHS : array[1..12] of byte = (0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5); DAYOFWEEKS : array[0..6] of string = ('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'); var a, b, c, d, e, f, tmp : byte; day, month, year : word;
begin repeat write('Число XX -> '); readln(day); if day = 0 then break; { выход } write('Месяц XX -> '); readln(month); write('Год XXXX -> '); readln(year); tmp := year - 1996; a := tmp and 3; b := (tmp shr 2) + (tmp and $FC); c := MONTHS[month]; if (a = 0) and (month > 2) then inc(c); a := YEARS[a]; e := (a + b + c + day) mod 7; writeln('Результат: ', DAYOFWEEKS[e]); writeln; until false; end.
|
|
|
|
|
Feb 4 2007, 20:30
|

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

|
Сергей БорщЦитата #define LED1 PORTC,2,H // output, active high (led from PC2 to GND) Интересно, как у вас работают программы с комментариями // в #define, или компилятор это отлавливает ?
Сообщение отредактировал umup - Feb 4 2007, 20:31
|
|
|
|
|
Feb 4 2007, 23:16
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(umup @ Feb 4 2007, 19:30)  Сергей БорщЦитата #define LED1 PORTC,2,H // output, active high (led from PC2 to GND)
Интересно, как у вас работают программы с комментариями // в #define, или компилятор это отлавливает ? IAR не жалуется. GCC (WinAVR) тоже. Согласно http://gcc.gnu.org/onlinedocs/cpp/Initial-...tial-processing комментарии заменяются пробелами до обработки #define
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 21 2007, 10:20
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(svlad @ Feb 20 2007, 20:09)  Цитата(Kuzmi4 @ Feb 20 2007, 14:21)  2 svlad - interrupt.h и io.h надо поставить винавр тогда они появяться. Если кому интересно могу выложить декодировку манчестера по INT0 для 8-й меги.
не уж то ни у кого нет WinAVR?  В чем вопрос-то состоял? www.google.ru, искать по ключевому слову WinAVR. Хотя это первое, что нужно делать перед писанием в конференции.
Эскизы прикрепленных изображений
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 24 2007, 00:53
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 13-06-05
Пользователь №: 5 967

|
Шрифт от Нокии 6510 анг/рус для библиотеки www.apetech.de/article.php?artId=1&nnId=10.
Прикрепленные файлы
nokia.rar ( 2.63 килобайт )
Кол-во скачиваний: 1427
|
|
|
|
|
Feb 27 2007, 14:21
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Часто при работе с АЦП приходится делать таблицу пересчёта. Например когда датчик нелинейный или когда точность надо повысить. Кроме того иногда приходится применять те или иные механизмы. Например (как в моём случае) шаговый двигатель со стрелкой. Или простой ШД. В этом случае значение АЦП должно непосредственно указывать на положение стрелки (или механизма). Короче так или иначе, но приходится СОЗДАВАТЬ ТАБЛИЦУ ПЕРЕСЧЁТА.  Иногда она неясна. То есть не поддаётся строгому математическому моделированию. Конечно, наверное здесь поможет знание такого пакета как MATHCAD, но иногда просто устаёшь от непрерывного изучения вспомогательных пакетов. Я не люблю бегло ознакамливаться, а изучать толково - банально не хватает времени. Короче в моём случае, я как правило, сажусь и пишу небольшую вспомогательную программку. Имея исходники, при необходимости модифицирую её под конкретную задачу. Таким образом общее число таких программок перевалило уже сотни за 3. Со временем оказывается, что к некоторым програмкам обращаешься не один раз. (В частности к этой). Поэтому прилагаешь некоторые усилия для оптимизации её и так сказать завершённости. Итак данная программа: 1) по нескольким точкам создаёт таблицу 2) Позволяет её сохранить в виде файла или текста 3) Позволяет её вывести в виде графика (для визуального контроля) 4) Позволяет слегка корректировать 5) Позволяет сгладить с помощью квадратичной интерполяции
|
|
|
|
|
Feb 27 2007, 15:30
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
оки... сча вот порылся , нашёл проэкт.. сча заттачу усе ф-ции - пользуйтесь,разбирайтесь.Хотя мож коряво написаны - но писал давно, работают и ладно... файл который - "файл.Х" то там только объявы чтоб легче было...СОбсно: /***************************************************************************** Types definitions ******************************************************************************/ #define UCHAR unsigned char #define UINT unsigned int #define ULONG unsigned long #define BOOL UCHAR #define FALSE 0 #define TRUE 1
Сообщение отредактировал Kuzmi4 - Feb 27 2007, 15:34
Прикрепленные файлы
pcs1.txt ( 73.3 килобайт )
Кол-во скачиваний: 1601
_________.pdf ( 147.51 килобайт )
Кол-во скачиваний: 4691
|
|
|
|
|
Mar 20 2007, 10:22
|

Местный
  
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476

|
Цитата(Waso @ Dec 19 2005, 17:29)  Предлагаю сюда скидывать (кому не жалко) свои инклюды для работы с периферийными устройствами, предназначенные для работы в IAR. Дело в том, что например для WinAVR такую библиотеку можно найти в сети. CodeVision имеет свою библиотеку. А ИАР этим не богат. Приходится либо писать свое с нуля, либо переделывать то что есть. Гемора в этих двух занятиях поровну. Самому мне правда пока нечего выкинуь. Наоборот, нужны исходники для стандартного текстового ЖКИ-дисплея, клавиатуры 4х4, АЦП, ШИМ и пользовательского интерфейса. Так как с ИАРом (и вообще с Си) только знакомлюсь - дело идет медленно.Вот хочу выложить проэктик на алгоритмбилдере 4.8 . В нём инициалиация дисплея сименс сх65 тип LS020***. При удачной сборке должны быть 3 цветных полосы ,принажатой кнопки должен сработать позификатор и нарисовать в центре квадрат(тест на длинну проводков к дисплею).
--------------------
|
|
|
|
|
Mar 28 2007, 07:11
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 5-12-04
Из: Минск
Пользователь №: 1 324

|
Цитата(haker_fox @ Dec 20 2005, 02:03)  Может быть сюда вообще выкладывать различные подпрограммы, для работы не только с периферией, но и например математику, сортировку, обработку данных и т.п. Шрифты для граф.панели LCD ???  Есть панель WG12864 Интересуют русские шрифты 5х7. Где достать? Чем сделать мультики для неё (редактор графический с промотром созданного?)
|
|
|
|
|
Mar 30 2007, 13:51
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(Kolia @ Mar 30 2007, 13:11)  Додрый день Есть архивчик программ - весит 82 Мега. ссылка пароль::gevv автор архива gevv - http://hyperelektronik.com/здесь можно посмотреть картинки проектовКтонибудь закачал ??? Если есть возможность - пожалуйста переложите куданибудь в удобный хостинг
|
|
|
|
|
Apr 10 2007, 08:28
|

Участник

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599

|
Привет ВСЕМ. Выкладываю рабочий проект для связи по радиоканалу (сс2500) для CVAVR.Может где-то чего нибудь криво так что сами подправите.Использовал библиотеки msp430.
|
|
|
|
|
Apr 10 2007, 15:37
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(VAHOO @ Apr 10 2007, 20:28)  Привет prottoss! хочу с компилировать файл, но не компилируется пишет #error This file should only be compiled with iccavr or aavr with processor option -v1 в чем проблема, у меня IAR v 4.21, помоги пожалуйста! В файле stdafx.h подключен хедер io8515.h. Его лучше всего заменить на ioavr.h вот так Код #include <ioavr.h> Ну и в меню Project->Options->General Options->Target выставить требуемый МК. Enjoy!:-)
--------------------
|
|
|
|
|
Apr 10 2007, 16:32
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Не совсем исходники, но все же: Макросы для тех, кто работает с ассемблером + раскраска комментариев и макросов в ассемблере (AVRStudio) (копировать в .\AVR Tools\AVRStudio\Edit\) (раскраска директив компилятьра, комментариев разными цветами после ;* ;/ ;- ;+ плюс раскраска макросов) Не удалось присоединить файлы. Повторяю.
macros_v1.5.rar ( 743 байт )
Кол-во скачиваний: 1445
AvrStudio_asm.rar ( 1.85 килобайт )
Кол-во скачиваний: 1388
|
|
|
|
|
Apr 13 2007, 23:01
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 13-09-05
Пользователь №: 8 518

|
Класс для работы с CAN контроллера AT90CAN128. C++.
|
|
|
|
|
Apr 14 2007, 12:18
|
Местный
  
Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028

|
Цитата(Nanobyte @ Mar 31 2007, 23:12)  Э-э-э-хх, вот если бы залить по отдельным проектам, а то интересует 3-4 темы, а качать 82 МБ тяжко...  __tp://www.reverseelectronics.com/AVRproject/ тут в "розницу"  по-штучно Выбирай что нравиться и качай  а тут фотки __tp://www.sonsivri.com/forum/index.php?topic=2303.0
|
|
|
|
|
Jul 31 2007, 09:42
|

Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922

|
Еще немного библиотек h__p://www.ember.com/pdf/EM260/HAL Код adc.h Sample A/D converter driver, for multiple users button.h Sample API functions for using push-buttons buzzer.h Sample API functions for playing tunes on a piezo buzzer crc.h Functions that provide access to cyclic redundancy check calculation dev0470.h Functions specific to the dev0470 breakout board ember-types.h Ember data type definitions error-def.h Return code definitions for EmberZNet stack API functions error.h Return codes for Ember API functions and module definitions hal.h Generic set of HAL includes for all platforms iar.h Compiler/platform-specific definitions and typedefs for the IAR AVR C compiler led.h Sample API funtions for controlling LEDs micro.h Functions common across all microcontroller-specific files random.h Functions that provide access to random numbers reserved-ram.h Memory allocations that allow for data sharing between the normally running application and bootloader hal/micro/serial.h Serial hardware abstraction layer interfaces app/util/serial/serial.h High-level serial communication functions spi-protocol.h Example AVR SPI Protocol implementation for interfacing with EM260 spi.h Generic SPI manipulation routines system-timer.h Functions that provide access to the system clock avr-atmega/32/system-timer.h Functions that provide access to the system clock for ATmega32 microcontroller uart.h Prototypes and defines for the hardware-specific UARTs h__p://www.ember.com/pdf/EM250/HAL/
Сообщение отредактировал Serg_greS - Jul 31 2007, 09:47
|
|
|
|
|
Aug 3 2007, 11:50
|

Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922

|
Цитата но как добраться к тем хэдерам в смысле к самим реализациям? а не только прототипам? наверное все остальное в их ИДЕ h__p://www.ember.com/products_zigbee_development_tools_debuggers.html Стек EmberZNet предоставляется пользователям продукции Ember по запросу h__p://www.efo.ru/cgi-bin/go?2508#n21 и бесплатно (at90: Стэк Ембер как всегда даёт бесплатно.) http://electronix.ru/forum/index.php?s=&am...ost&p=95173
Сообщение отредактировал Serg_greS - Aug 3 2007, 12:49
|
|
|
|
|
Aug 16 2007, 11:55
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
пример проекта умножения с плавающей точкой. работает быстрее, чем стандартная Си операция благодаря использованию аппаратного умножителя. Подходит только для серии Mega
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Oct 31 2007, 04:06
|

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

|
Выкладываю портированный мною под ИАР TCP-IP стек LwIP из демо FreeRTOS для отладочной платы AT91SAM7X-EK. Он все еще выдает некоторое количество варнингов, но они связаны с выключенным дебагом. Работает web-сервер, отвечает на пинги. Перед прошивкой нужно задать айпишники в хедере sam7_emac.h. Версия lwIP - 1.1.0. Когда попытался прикрутить более новую - удивился как много оставлено для дописывания ручками в исходниках. Благодарю за помощь в освоении С и IAR местных гуру и особенно Сергей Борщ.
|
|
|
|
|
Nov 6 2007, 17:51
|
deleted
   
Группа: Свой
Сообщений: 555
Регистрация: 28-08-05
Пользователь №: 8 024

|
Цитата(umup @ Nov 6 2007, 15:21)  что-то получается слишком большой размер кода. у меня RTU поместился в 500 байт Flash и 30 ОЗУ Дело еще в том, на сколько код "откатан" в железе. Немного поизучали эту тему, но в последствии выяснилось, что в реализации всего протокола нет необходимости, а возможные коллизии обошли таймаутами. В сети попадлись вопросы в этой связИ, вот еще ветка: http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...;Sp=0&LID=0Если Вы приаттачите свой исходик, то буду признателен.
|
|
|
|
|
Nov 6 2007, 22:43
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Waso @ Oct 31 2007, 06:06)  Выкладываю портированный мною под ИАР TCP-IP стек LwIP А как все начиналось... Цитата(Waso @ Dec 19 2005, 18:29)  Предлагаю сюда скидывать ... Самому мне правда пока нечего выкинуь. Наоборот, нужны исходники для стандартного текстового ЖКИ-дисплея, клавиатуры 4х4, АЦП, ШИМ и пользовательского интерфейса.Пополню копилку. Даже не исходником, а полезным приемом. Навеяно несколькими вопросами в последнее время, когда "все не работает" потому что программа ушла в необъявленный обработчик прерывания. Можно поставить на все неиспользуемые обработчики заглушки, но, во-первых, это не решение, а расчалка и распорка. А во-вторых не всякий флаг прерывания сбрасывается от самого факта входа в обработчик. Т.е. попали в заглушку, вышли из нее, тут же снова попали... Заглушка позволяет локализовать проблему. Но если заглушек несколько, возникает вопрос - в какую из них попадает программа? Хорошо, если есть много свободных ног - можно в каждой заглушке махать своей ногой. Но опять же есть неудобство - искать точки на плате, куда подключиться осциллографом, и перебирать их щупом. Идея в том, чтобы использовать одну ногу, а конкретное место программы, где нога шевелится, определять по скважности генерируемого сигнала: Код ISR(ADC_vect) { for(;;) { on(TEST); _nop(); _nop(); _nop(); off(TEST) } } ISR(UDRE_vect) { for(;;) { _nop(); on(TEST); _nop(); _nop(); off(TEST) } } ...... ISR(UDRE_vect) { for(;;) { _nop(); _nop(); on(TEST); _nop(); off(TEST) } } ....... ISR(TIMER2_COMP_vect) { for(;;) { _nop(); _nop(); _nop(); on(TEST); off(TEST) } } Отсчитать скважность можно буквально по клеткам на экране. P.S. Тема получилась очень полезная и давно переросла подфорум AVR. Не пора ли ее переместить куда-то в более общее место?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 15 2007, 06:41
|
Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042

|
Мои 0,5 копейки: Реализация форматированного преобразования int в ASCII-строку. Использован алгоритм, предложенный =AVR='ом: Код void ltoa_fmt(long val, s_char length, u_char *buff) { long ltemp; int itemp; s_char binc,atemp; u_char *ptr1, *ptr2;
ptr1 = buff;
if (val<0) { val = -val; *buff++ = '-'; }
atemp='0'; ltemp=1000000; while(val >= ltemp) { atemp++; val-=ltemp; }; if(atemp != '0') *buff++=atemp; atemp='0'; ltemp=100000; while(val >= ltemp) { atemp++; val-=ltemp; }; if(atemp != '0') *buff++=atemp; atemp='0'; itemp=10000; while(val >= itemp) { atemp++; val-=itemp; }; if(atemp != '0') *buff++=atemp; atemp='0'; itemp=1000; while(val >= itemp) { atemp++; val-=itemp; }; if(atemp != '0') *buff++=atemp; atemp='0'; itemp=100; while(val >= itemp) { atemp++; val-=itemp; }; if(atemp != '0') *buff++=atemp; atemp='0'; binc=(char)val; while(binc >= 10) { atemp++; binc-=10; }; if(atemp != '0') *buff++=atemp; binc += '0'; *buff=binc;
atemp = buff - ptr1 + 1; ptr2 = ptr1 + length-1; while(atemp--) *ptr2-- = *buff--; atemp = ptr2 - ptr1 + 1; while(atemp--) *ptr2-- = ' '; }
|
|
|
|
|
Nov 15 2007, 10:35
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 7 2007, 02:58
|
Группа: Новичок
Сообщений: 2
Регистрация: 7-12-07
Из: Братск
Пользователь №: 33 051

|
Подсчет CRC для DALLAS 1Wire устройств.Работает очень быстро.
unsigned char crc_ib(unsigned char __crc,unsigned char data) { unsigned char temp; temp=__crc^data; __crc=0; if (temp&(1<<7)){__crc^=0x8C;} if (temp&(1<<6)){__crc^=0x46;} if (temp&(1<<5)){__crc^=0x23;} if (temp&(1<<4)){__crc^=0x9D;} if (temp&(1<<3)){__crc^=0xC2;} if (temp&(1<<2)){__crc^=0x61;} if (temp&(1<<1)){__crc^=0xBC;} if (temp&(1<<0)){__crc^=0x5E;} return __crc; }
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|