С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
В клавиатуре мс7004 его реализовали, не вижу проблем скопировать от туда
если программный последовательный канал с определенными ограничениями подходит, то почему бы и нет.
А вот и предварительная платка ардуины 70х
![]()
Denn(03.05.2023)
Зимой тоже баловался с ВЕ39. Получились как всегда часики.
Камень - КР1816ВЕ39, защелка 580ИР82, флеха AT28C64 и ВВ55 в качестве PIO. Входящее напряжение 12 вольт, обычная кренка для 5в на логику и повышайка DC/DC на 555 таймере до +180в для ИНок.
Рядом с камнем там еще i2c PCF8563 (RealTimeClock), где-то сбоку 1-wire DS18B20 (температура). Срет отладочную инфу в UART, а оперативную инфу - в i2c 16x02 дисплей:
В это время в UART летит примерно что-то такое:
Ну и всё вместе с ИН-1, статика:
Камень прикольный. Порадовало что у него нет команды вычитания (оно делается через комплементарное сложение). И он настоящий 8-битный, без всяких там логических пар 16-битных регистров, типа как в том же 8051 или Z80 или 8088. От 8051 он кстати сильно отличается, что бы кто не говорил. В 8051 есть такие жирные команды как умножение и деление, а так же как-бы логическая 16 битная пара регистров AB, поэтому там взять температуру с DS18B20 и преобразовать в человеко-читаемый (BCD) вид - дело пары-тройки команд. Здесь же мне нужно было дробную часть умножить на 10, пришлось крутить влево по нескольку раз, да все это еще с расширением в 16-битное значение, а значит крутить по два раза на каждый полу-байт, типа так как-то:
Вообщем математику, отличную от 8-битной, на нем реализовывать очень весело, гораздо веселее 8051 камня. Но мне нравится. Этакий брайнфак - размять мозги вечерочком. Рекомендую )
CodeMaster(03.05.2023), Denn(03.05.2023), max232cpe(03.05.2023), RCgoff(03.05.2023)
Я делал термометр
https://github.com/rcgoff/therm8048
Запрограммирован интерфейс 1wire с DS18B20 (немного переусложнен, можно было бы читать при инициализации presence pulse только один раз, я читаю два раза)
Запрограммирован двухпроводной интерфейс с со стандартным текстовым ЖКИ на HD44780 по схеме наподобие этой
Для строба сдвигового регистра использован выход строба порта-расширителя, так что на весь функционал задействовано только 2 линии портов МК: P1.0 под DS18B20 и P2.1 под данные ЖКИ.
Интересно бы на код посмотреть! И какого он объема вышел
- - - Добавлено - - -
А не короче было сделать что-то вроде:
Код:;умножение числа в аккумуляторе на 10 ;на выходе - 16-бит число в r4 и a mov r2,a mov r3,#9 mov r4,#0 loop: add a,r2 jnc skip inc r4 skip: djnz r3,loop
Последний раз редактировалось RCgoff; 04.05.2023 в 11:26.
32Кб отборного *****кода на асме. В скомпиленном виде 1974 байта. Ну если и вправду интересно - пожалуйста, в прикрепленном файле, но там реально *****код и уже через неделю мне самому в нем ничего не понять.
Да может и короче, а может я уже и переделал чтение температуры по сравнению со скриншотом выше -) Дела давно минувшие, я ж не зря говорю что через неделю уже с трудом вообще можно понять там что к чему. Сделал, работают, ну и все, забыли.
Но помню лишь одно - об какой-либо оптимизации и речи не шло, так как ВЕ39 все-таки во-первых в два раза быстрее чем ВЕ35, и поэтому сколько там миллисекунд (или даже секунд) будет вычисляться температура, или любое другое действие - абсолютно все равно, так как режимы отображения ВРЕМЯ или ТЕМПЕРАТУРА меняются раз в минуту примерно. А все остальное время проц практически сидит и курит бамбук - ну кнопачке там опрашивает, в таймер выпадает для счета миллисекунд и тд.
RCgoff(03.05.2023)
Заимствовал Ваш код вычисления CRC для датчика DS18B20. При этом сократил его по длине на 15 байт.
Было:
Стало:Код:crc8dallas: mov r2,#0 mov r7,#8 ; scrachpad len cntr mov r0,#scrach rr_rot: xch a,r2 xrl a,@r0 xch a,r2 mov r6,#8 ; for (i = 0; i < 8; i++) rr_inner: mov a,r2 anl a,#1 jz rr_shr xch a,r2 clr c rrc a xrl a,#08Ch xch a,r2 jmp rr_next rr_shr: xch a,r2 clr c rrc a xch a,r2 rr_next: djnz r6,rr_inner inc r0 djnz r7,rr_rot xch a,r2 ret
Возможно, кому-то это пригодится.Код:crc8dallas: clr a mov r7,#8 ; scratchpad len counter mov r0,#scratch crc_nxbyte: xrl a,@r0 ;----------one byte loop mov r6,#8 ; for (i = 0; i < 8; i++) crc_inner: clr c rrc a jnc crc_nxbit ;jump if former acc.0=0 (no XOR) xrl a,#08Ch ;1000.1100 - polynomial coeffs in inverted order crc_nxbit: djnz r6,crc_inner ;----------end of one byte loop, r0:=byte-CRC inc r0 djnz r7,crc_nxbyte ret
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)