Перейти к содержанию

Uart / Usart На Ассемблере


Юстас

Рекомендуемые сообщения

Все верно. Загрузить в РОН и обработать. Только in "не дотянется" (как и out) до адреса 0хC0. Тут надо применить lds r16, UCSR0A. И не забыть push r16 и pop r16, т.к. его значение будет меняться.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 218
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

shads, видел ваши коменты на радиокоте. Ну нет у меня пока желания переходить на СИ :) . С ассемблером разберусь, а там видно будет.

Ды эт я так... к слову... :)...

Я и сам пока с асмом не разобрался, никаких Си не признавал...

Кстати вот тут простенькл описано про асмовые команды:

http://www.nikolaew.org/avr_old/u3.htm

http://www.nikolaew.org/avr_old/u4.htm

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Наверное так

/* ATMega48_USART_TX.asm
* Created: 31.03.2014 9:48:21
* Author: Admin*/
;============================================
;***************ПЕРЕМЕННЫЕ*******************
;============================================
.def temp = r16
.def byte = r17
.def flag = r19
;=============================================
;****************ПРЕРЫВАНИЯ*******************
;=============================================
.org $000
rjmp RESET ; Reset Handler
.org $00B
rjmp TIM1_COMPA
.org $012
reti ; USART RX Complete Handler
.org $013
reti ; UDR Empty Handler
.org $014
reti ; USART TX Complete Handle
;==============================================
;***********ОБРАБОТЧИКИ ПРЕРЫВАНИЙ*************
;==============================================
TIM1_COMPA:
ldi flag, 1 ;прошло 65мС, выставим флаг
reti
;==============================================
;***************ИНИЦИАЛИЗАЦИЯ*****************
;==============================================
RESET:
;<<******СТЕК******>>
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
;<<***КОМПОРАТОР***>>
ldi temp, 1<<ACD
out ACSR, temp ;выключаем его нафиг
;<<******ПОРТЫ*****>>
ldi temp, 0b00000001
out DDRD, temp
ldi temp, 0b11111110
out PORTD, temp
clr temp
out DDRB, temp
out DDRC, temp
ser temp
out PORTB, temp
out PORTC, temp
;<<*****ТАЙМЕР1****>>
ldi temp, 128 ;период меньше 65мС
sts OCR1AH, temp
clr temp ;
sts OCR1AL, temp
lds temp, 0b00001011 ;предделитель 64 сброс по совпадению
sts TCCR1B, temp
lds temp, 0b00010000 ;разрешим прерывание Т1 по совпадению OCR1
sts TIMSK1, temp

;============СКОРОСТЬ ПЕРЕДАЧИ===========
lds temp, 103 ; настраиваем скорость на 9600 при 16МГц
sts UBRR0L, temp
;==============САМ USART================
;разрешаем приём/передачу
ldi temp, 1<<TXEN0
sts UCSR0B, temp
ldi temp, (1<<UMSEL01)|(1<<USBS0)|(3<<UCSZ00) ; 8 бит данных, 2стоп-бита
sts UCSR0C, temp
clr flag
sei
;============основной цикл==============
CIKLE:
rcall BUTTON ;переходим в подпрограмму опроса кнопок
rjmp CIKLE
;=============ОПРОС КНОПОК==============
BUTTON:
in temp, PINB
cpi temp, 0b11111110 ; PINA_0
breq KOM1
cpi temp, 0b11111101 ; PINA_1
breq KOM2
cpi temp, 0b11111011 ; PINA_2
breq MOTOR_LEFT
cpi temp, 0b11110111 ; PINA_3
breq MOTOR_RIHT
ret
;=======ПОДПРОГРАММЫ КОМАНД ДЛЯ ПЕРЕДАЧИ=========
KOM1:
ldi byte, 0b01000010
rcall UART_TX
ret
KOM2:
ldi byte, 0b01111110
rcall UART_TX
ret
MOTOR_LEFT:
ldi byte, 0b00000110
rcall UART_TX
ret
MOTOR_RIHT:
ldi byte, 0b00001110
rcall UART_TX
ret
;======передача байта по UART================
UART_TX:
push r16
lds r16, UCSR0A
sbrs r16, 5 ; проверяем флаг завершения передачи
rjmp UART_TX ; крутимся в цикле пока флаг не поднимится иначе-
sts UDR0,byte ; -скармливаем сдвиговому регистру наш байт для передачи
clr flag ; сбрасываем флаг
rcall XXX ; уходим в подпрограмму ожидания
pop r16
ret ; возвращаемся к месту перехода в подпрограмму
;=========подпрограмма ожидания==========
XXX:
tst flag ; проверяем флаг
breq XXX ; если не поднят, крутимся в цикле и ждём
ret

А мне нравится ковыряться с Ассмом, находя оригинальные схемные и программные решения, увеличивая производительность и работоспособность МК, которые Си-шники "списывают" в хлам, когда их hex-ы не влезают в память контроллера. И главное - никакой зависимости от сторонних библиотек. Полная свобода действий.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Геннадий, вот теперь без ошибок. А то я уже психую :D . Целую кучи инфы в интернете поднял, так и не нашёл ничего дельного. Я тоже ассемблер полюбил за его понятность, скорость и относительную волю в действиях :D

Да, я уже прочитал, просто пока пост писал вы уже ответили :D

shads, вот спасибо за ссылки! Хорооошие ссылочки :spiteful:

Ссылка на комментарий
Поделиться на другие сайты

Геннадий, ваш вариант, надо поправить вот так: (ато программа может вылетать из-за неконтролируемых пушей :)... )

;======передача байта по UART================
UART_TX:
push r16
UART_TX1:
lds r16, UCSR0A
sbrs r16, 5 ; проверяем флаг завершения передачи
rjmp UART_TX1 ; крутимся в цикле пока флаг не поднимится иначе-
sts UDR0,byte ; -скармливаем сдвиговому регистру наш байт для передачи
clr flag ; сбрасываем флаг
rcall XXX ; уходим в подпрограмму ожидания
pop r16
ret ; возвращаемся к месту перехода в подпрограмму

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

shads,

все верно, мой косяк.

...можно не заморачиваться, свободных регистров ещё много, можно и отдельный регистр за дефайнить...

Это пока много. А заморачиваться с этим, надо взять за правило. Будут ситуации, когда регистров станет в обрез.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

А мне нравится ковыряться с Ассмом, находя оригинальные схемные и программные решения, увеличивая производительность и работоспособность МК, которые Си-шники "списывают" в хлам, когда их hex-ы не влезают в память контроллера.
Геннадий, точно так же можно ковырятся и с Си... при определенных знаниях и опыте (в принципе в асме без них - тоже никуда...), Си-шный код не на много больше получается...

Да и тупо "списывают" код - только лентяи...

И главное - никакой зависимости от сторонних библиотек. Полная свобода действий.
Геннадий, хотите верьте, хотите нет... но я до сих пор НИ ОДНОЙ СТОРОННЕЙ ЛИБЫ не использовал :)..... Все своими ручками пишу :).....

Хотя на Си, библиотеки - это одно из огромных преимуществ перед асмом... Но я тоже привык чтобы все было под контролем :)...

Ссылка на комментарий
Поделиться на другие сайты

Будет время, поизучаю Си (остались некоторые навыки в памяти, еще с IBM). Надо же развиваться дальше. Тем более под новые МК Ассм трудно найти, а хотелось и их освоить в полной мере.

Си-шный код не на много больше получается...

Пока удавалось, после вскрытия (дизассемблирования) кода, укоротить его в 5 раз (при той же функциональности программы и даже с некоторой доработкой).

Ссылка на комментарий
Поделиться на другие сайты

А это зависит от компилятора. Допустим CVAVR начинает размещение с РОНов, когда тот-же GCC и IAR сразу пихают все переменные в ОЗУ, оставляя право на использование РОНов за собой. И потому, есть тормоз только во времени записи в ОЗУ и из ее извлечения.

Ссылка на комментарий
Поделиться на другие сайты

Пока удавалось, после вскрытия (дизассемблирования) кода, укоротить его в 5 раз (при той же функциональности программы и даже с некоторой доработкой).

Это яркий пример неумелого использования написания на Си...

Для этого могут быть много причин...

те же сторонние библиотеки, которые неизвестно как устроены...

использование арифметики с плавающей точкой (вот примерчик http://forum.easyele...поменял#p231951 ),

те же неэффективные алгоритмы...

те же... в общем еще много чего :).....

Я когда взялся за Си, сделал первое сове творение... ну и конечно же сразу сравнил размер вариантов на асме и на Си, разница оказалась в два раза: http://asis-kbr.ru/f....php?f=11&t=122

Но гуру на коте тут же обратили внимание на то, что это ненормально..... http://radiokot.ru/f...олтора#p1381049

Да и то, маленький размер на асме обусловлен тем, что я все переменные уместил в РОН-ах... но так можно делать только в небольших программах... а как только программа становится более менее серьезной, то и на асме переменные придется размещать в памяти... и тут разница между асмом и Си - станет совсем незначительной....

Правда есть одно НО... - на асме нас ждет несоизмеримо больше геморроя :).....

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

А мне нравится ковыряться с Ассмом, находя оригинальные схемные и программные решения, увеличивая производительность и работоспособность МК
У меня кстати тоже иногда ностальгия разигрывается :)... Хотя на асме уже почти не пишу, но иогда все таки заносит где то приложится :)...

Вот например чел (тоже ассматик... :) ) говорит что ооптимизировал... http://radiokot.ru/forum/viewtopic.php?p=1888519#p1888519

Ну мне интересно стало... в итоге у меня еще на 44 байта получилось ужать... http://radiokot.ru/forum/viewtopic.php?p=1926959#p1926959

Так что я в душе пока что тоже ассматик :).....

Ссылка на комментарий
Поделиться на другие сайты

Приятно видеть единомышленников. :)

Могу подсказать еще кусочек оптимизации. Конструкции типа:

CicleBig:  
  lpm							 ;читаем бит типа упаковки и количество упакованных байтов
  mov	 RepeatCounter, r0	   ;Счетчик повторов/неповторов.
  ldi	 Temp,  1
  add	 ZL,    Temp			 ;Следущий байт - байт данных
  adc	 ZH,    MIN

и

CicleRead:
  lpm							 ;читаем байт данных
  ldi	 Temp,	 1
  add	 ZL,	   Temp			
  adc	 ZH,	   MIN

можно заменить на:

CicleBig: 
  lpm	 RepeatCounter, Z+   ;читаем бит типа упаковки и количество упакованных байтов c постинкрементом
; тогда отпадает необходимость приращивать счетчик адреса вручную

и

CicleRead:
  lpm   data, Z+	 ;читаем байт данных
;загрузка данных в конкретный регистр с постинкрементом, не требует последующих MOV Rd, R0 и ADIW Z, 1

Либо:

  ldi	 Temp,  1
  add	 ZL,    Temp			 ;Следущий байт - байт данных
  adc	 ZH,    MIN

меняется на:

adiw   r30, 1

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Актуальная потребность) Тоже развлекался подобным способом, только с немного другим ибп. Хотел перевести его на железофосфат, но он до конца не заряжал батарею. Блок зарядки у него не калибровался, и по моему с микроконтроллером. В итоге оставил свинец. Когда то он тянул серверную на 4х батарейках по 200а/ч. Серверную он вытянул за ночь, а вот из за отсутствия охлаждегия все пошло в разнос. В итоге все закончилось полной заменой силовой комплектухи и устранением лишних отверстий в плате. Но картошку хватило сварить и даже немного поработать, зимой на железофосфате 4 часа отапливал тепловентилятором балкон)). Дешевле чем из розетки днем)) А для ленивых( ну или если в лом или нет достойного донора) можно взять инвертор от SVC он довольно не дорогой и мощный, при этом может работать с авто батарейками, зарядный ток до 10А. Я на нем гоняю насосы котла и кондиционер в шкафу, иногда еще станок.  
    • @Александр2, это у тебя в голове что-то с чем-то вступает в противоречие.  Я знаю, что ты ярый поклонник Ланзара. Поэтому пояснение для тебя того, почему симметричная на бумаге/на экране монитора схема, и спаянная на реальной плате с реальными комплектующими в отличии от неё за редким исключением вместо 0 на выходе зачастую имеет сдвиг напряжения величиной в +/- километр, думается мне излишняя трата времени.    
    • Верно подмечено. Вот их-то, КТ602ВМ и BD139 в ТО-126 в 1969-ом как раз-таки и не было. Не только у J. L. Hood-а, их вообще ещё не существовало. К тому же КТ602БМ  в корпусе КТ-27-2 (как и BD139 в TO-126) и КТ602А в корпусе КТЮ-3-9 - это совсем не близнецы-братья. Технология изготовления совершенно разная, а она при работе транзисторов динамическом режиме, как в случае с JLH-69, играет далеко не последнюю роль. Просто юноша в силу своего быстрого и раннего развития об этом ничего не знает. 
    • Садится разбираться в алгоритме работы и на микроконтроллере делать замену.  Попробуйте прогреть микросхему на зажигалке, когда-то читал о таком способе восстановления процессора от телевизора. Шансов мало, но вам нечего терять, а потом в панельку.
    • Я хочу попробовать разные способы победить эти шумы. Для начала собрать фильтр для блока питания. Корпус с блютуз антенной я пробовал убрать, ничего не изменилось, если фильтр для блока питания тоже не поможет, значит дело в самом усилителе. В Aiyima A3001, который выдает шум гораздо тише, на выходе стоят электролитические конденсаторы и фильтры, можно попробовать сделать также и на Aiyima A09, может таким образом удастся снизить шумы. Если нет, то буду искать еще варианты. Кроме шумов еще надо разобраться с щелчками в колонки при включении и выключении Brzhifi. Aiyima A09 выдает щелчок только при выключении сетевого фильтра, и слабый. А вот Brzhifi щелкает так, что аж диффузоры в колонках двигаются. Схема питания у них отличается, Brzhifi остается в режиме ожидания и питание не отключается, я хочу переделать его так, чтобы оно отключалось, как на Aiyima A09. Может там что сдохло. а может он так спроектирован. Либо что то делать с контроллером питания, либо найти в схеме где можно врезать выключатель и впихнуть его.
    • @CrazyDog34RU Понять, что изначально были неправы, и питание в вашей проблеме не виновато, например?
    • Неожиданный вопрос... При измерениях в любой точке вот этой части схемы "масса" осциллографа вот тут: При измерениях вот в этой части схемы - вот тут: У этой части схемы - вот в этой точке: Подключать "массу" к одной части схемы, а смотреть точки в другой - нельзя. Все эти три "общие" точки - совершенно разные точки. Между ними может быть вполне ощутимое напряжение. Вот тут это хорошо видно:
×
×
  • Создать...