Доброго времени суток всем.
Вопрос конечно нужно было задать в обучалке, но боюсь меня там не услышат, по этому прошу простить меня и помоч
Вопрос в следующем, пришел тот злащасный день когда мне понадобилась работа с не целыми числами типа 1,5 в ассемблере, ести ли какие либо стандартные варианты работы с такими числами или нужно чегото мудрить, если мудрить то как???
Может у кого есть заготовки для работы с такими числами.
Заранее спасибо.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Я бы начал с выяснения, ассемблер КАКОГО таракана рассматривается. PIC, Atmel... да их же много. Вот в ассемблере IBM PC вполне можно работать с IEEE-шной плавучкой и командами сопроцессора .
Второй вопрос - в каком диапазоне нужны числа и с какой точностью. По секрету: иногда помогаат ужасный прием: просто перейти в другой масштаб. Нужно "полтора"? Пиши 15 или 150... или 1500... Держи делитель в уме и не забудь скорректировать масштаб при выводе числа куда надо.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Помогите пожалуйста в ассемблере. Нужно запустить 16 битный таймер, и в определенный момент его считать и сбросить. (ATTiny2313) Я смотрел datasheet и несколько переведенных статей. Мне нужны только CS12, CS11 и CS10 (001)-делитель частоты. А что делать с остальными битами настройки? В ноль их всех? И надо ли их вообще устанавливать если они мне не нужны?
Как устанавливать параметры таймера?
Так?
ldi r17,0b00000001
out TCCR1B,r17
Чтение и установка в даташите вроде понятно написано (с примером)
Как таймер запустить? Или он запускается автоматически? (вместе с МК)
Да я нашел его. Нужная вещь. Но это три бита из байта TCCR1B а остальные биты как ставить? Какие настройки нужно ОБЯЗАТЕЛЬНО настроить у таймера? Как насчет остальных вопросов?
Здравствуйте! Помогите разобраться пожалуйста? Я хочу чтоб контроллер установил порт В в высокий уровень и через 2 сек в низкий уровень и на этом всё прекратилось! А получается что он постоянно мигает будто программа запускается снова и снова Вот сам код:
Код:
;подключаем файл описания регистров .include "c:/wavrasm/include/tiny2313.inc"
;задаем имена регистрам для удобства .def temp=r17 .def temp1=r18 .def temp2=r19
;присваиваем значения temp и temp1 ldi temp,0xff ldi temp1,0x00
Спасибо Mamonth за идею! Можно действительно так поступить
Код:
main: rjmp main
Но всётаки с чем простите связана эта аномалия выполнения программы циклически? Ведь в моём коде нет перехода на начало!
Конечно мы обманем и зациклим её в этом месте но хотелось бы всетаки с этим разобраться. Я уже и компиляторы разные попробовал - не в них дело!
_________________ Век живи! - Век учись!
ICQ-15B87330h
; объявления констант, переменных и т.п. .org 0 rjmp Start ; переход на начало основного участка программы ; тут размещаются векторы прерываний rjmp Interrupt1 ; какой-то вектор прерываний
Start: ; тут начинается инициализация стека ; потом все подготовительные операции ; настройка портов, таймеров и т.п. MainLoop: ; тут начинается участок основного цикла, ; т.е. тот код, который непрерывно циклически выполняется ; отсюда можно вызывать вспомогательные подпрограммы rcall Delay
rjmp MainLoop ; переход к началу цикла ; если не надо зацикливаться, то надо как-то остановить выполнение кода в этой точке, например так: rjmp PC ; предыдущий rjmp не нужен, разумеется
; тут начинаются вспомогательные подпрограммы Delay: ; подпрограмма задержки ret
OtherProc: ; еще какая-то подпрограмма ret
Interrupt1: ; обработчик какого-то прерывания reti
; и так далее
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
RESET: rjmp START reti ;начало проги START: ;настройка портов ldi temp,0xff ldi temp1,0b01100000 out ddrb,temp ;port b выход out ddrd,temp1 ;port d 5 и 6 ножки выходы а остальные входы ldi temp,0x00 ldi temp1,0x00 ;порты настроены!!!
;создадим команды для дисплея ldi clear_display ,0b00000001 ;записывать в порт b ldi return_home ,0b00000010 ;записывать в порт b ldi display_on ,0b00001100 ;записывать в порт b ldi display_off ,0b00001000 ;записывать в порт b ldi function_set ,0b00110100 ;записывать в порт b ldi write_data ,0b00100000 ;записывать в порт D ldi write_command ,0b00000000 ;записывать в порт D ;команды созданы
;инициализация дисплея out portd,write_command ; переводим дисплей в режим приема команд out portb,function_set ; устанавливаем 8 битный интерфейс rcall E ; строб - (ВОТ ОТСЮДА МЫ ПЕРЕХОДИМ НА Е: И ЭТИМ ВСЁ ЗАКАНЧИВАЕТСЯ :( ...) out portb,display_on ; включаем дисплей rcall E ; строб out portb,clear_display ; очищаем дисплей и обнуляем видеопамять rcall E ; строб
E: ldi temp,0b00100000 out portd,temp nop ldi temp1,0b00000000 out portd,temp1 ret ;(здесь по идее должна прога Е: закончиться и перейти на строчку "out portb,display_on" ,но этого не происходит)
СПАСИБО!!!
_________________ Век живи! - Век учись!
ICQ-15B87330h
Как я смотрю многие совсем совсем начинающие не понимают про векторы прерываний и даже если их не используют делают какие то не понятные прыжки в самом начале. Зачем? Если прерывания не используются, то можно начинать прямо с нулевого адреса писать программу, вот так например:
Как я смотрю многие совсем совсем начинающие не понимают про векторы прерываний и даже если их не используют делают какие то не понятные прыжки в самом начале. Зачем? Если прерывания не используются, то можно начинать прямо с нулевого адреса писать программу
А попробуйте в VMLAB напишите программу как сказали выше? _Ошибку выдаст! Вектор RESET обязательный!
Люди, Будьте добры!
Расскажите пожалуйста про инициализацию стека?
Я читал что он на аппаратном уровне! Как его использовать?
_________________ Век живи! - Век учись!
ICQ-15B87330h
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 58
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения