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

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


Юстас

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

Народ, а что мешает передать байт в порт, вот таким образом и главное, что не надо ломать голову над USART'ом, 1wire и т.д.

Привожу код, с задержками и прочими условиями для передачи ещё определяюсь. Это только принцип передачи. Код полность функционален, написал в атмел студио 6.

.cseg

.org 0

.def shift = r17

ldi shift, 8

.def byte = r16

ldi byte, 0b10001100 ; типа байт для передачи

rjmp PEREDATHA

; процедура передачи байта

PEREDATHA:

sbrs byte, 0 ; пропускаем следующую команду, если младший бит регистра "byte"= 1

cbi PORTB, 0 ; устанавливаем младший бит "PORTB" в 0

sbrc byte, 0 ; пропускаем следующую команду, если младший бит регистра "byte"= 0

sbi PORTB, 0 ; устанавливаем младший бит "PORTB" в 1

ror byte ; сдвигаем регистр "byte" вправо

dec shift ; вычитаем 8-1

cpi shift, 0 ; сравниваем 8 с 0

brne PEREDATHA ; если не 0, то возвращаемся на метку "PEREDATHA:"

rjmp STOP ;

; процедура очистки регистра

STOP:

cbi PORTB, 0; сбрасываем младший бит

rjmp STOP ; пока думаю, что дальше :-))

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

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

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

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

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

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

Ну и...

В данном виде не функционален, т.к. если младшие биты = 0, то невозможно определить начало передачи...

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

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

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

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

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

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

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

Я же написал, это только процедура передачи, остальное я ещё придумаю и со стартовыми, и со стоповыми битами, и задержки высчитаю.

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

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

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

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

С какой целью это делалось, чем не устраивают стандартные интерфейсы? Вроде как и поддерживаются аппаратно (то есть не тратят время ядра) и занимают 1-4 линии, и какая-никакая защита от сбоев.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

COKPOWEHEU, просто пытался вникнуть хотябы в инициализацию UART, весь мозг вынес, а толку чуть. А уж про полноценное использование стандартных интерфейсов, вооще слов нет :-) Вот и решил сам придумать. Ассемблер начал изучать буквально 2-3 месяца назад.

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

Я же написал, это только процедура передачи, остальное я ещё придумаю и со стартовыми, и со стоповыми битами, и задержки высчитаю.

Так а чего придумывать то... Проще UART-а все равно не придумать... Просто посмотрите как он устроен да и точь в точь реализуйте...

Плюс такого варианта только в том, что можно воткнуть в контроллер не имеющий железного UART-а...

Я как то в tiny13 так и делал... но там тоже есть недостатки - tiny13 не работает от кварца, а UART очень требователен к стабильности частоты........

Я у себя так делал:

;------------------------------------------------------------------------------
;функция вывода байта данных в COM порт на скорости 9600
;байт данных перед вызовом поместить в регистр A
ComOutA:cli
 push b	 
 cbi  portb,0    ;формирование старт бита
 rcall ComPs    ;задержка 104 mks
;формирование 8-ми бит данных
 ldi  b,8	 ;счетчик бит
ComOt1: sbrc a,0	 ;выводимый бит
 rjmp ComOt2
 clc
 cbi  portb,0
 rjmp ComOt3
ComOt2: sec
 sbi  portb,0
ComOt3: ror  a	 ;прокрутка байта
 rcall ComPs    ;задержка 104 mks
 dec  b
 brne ComOt1;формирование стоп бита
 sbi  portb,0   
 rcall ComPs    ;задержка 104 mks
 pop  b
 sei
 ret

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

shads, эх легко сказать, да трудно сделать. Вообще, цель такая: на порту Х, будут висеть кнопки, каждая со своим 8-бит. кодом, + ещё энкодер. При манипуляции этим портом, в радиоэфир будут отправлятся пакеты с байтами, содержащих закодированную команду к другому МК. Другой МК сверяет эти команды со своими имеющимися на борту, если код идентичен, выполняет.

Я у себя так делал:

;------------------------------------------------------------------------------
;функция вывода байта данных в COM порт на скорости 9600
;байт данных перед вызовом поместить в регистр A
ComOutA:cli
push b	
cbi portb,0 ;формирование старт бита
rcall ComPs ;задержка 104 mks
;формирование 8-ми бит данных
ldi b,8	 ;счетчик бит
ComOt1: sbrc a,0	 ;выводимый бит
rjmp ComOt2
clc
cbi portb,0
rjmp ComOt3
ComOt2: sec
sbi portb,0
ComOt3: ror a	 ;прокрутка байта
rcall ComPs ;задержка 104 mks
dec b
brne ComOt1;формирование стоп бита
sbi portb,0
rcall ComPs ;задержка 104 mks
pop b
sei
ret

Почти как братья близнецы, похоже :-)

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

Передача по UART даже программная - штука несложная, с приемом интереснее. Я делал для ATmega8, на таймере, нужно было 2 порта а аппаратный-то всего 1.

Юстас, так и не понял, что требуется.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

shads, эх легко сказать, да трудно сделать.
Ну ясное дело... особенно когда только пару месяцев как прграммируеш... тут терпение очень пригодится :).....
Вообще, цель такая: на порту Х, будут висеть кнопки, каждая со своим 8-бит. кодом, + ещё энкодер. При манипуляции этим портом, в радиоэфир будут отправлятся пакеты с байтами, содержащих закодированную команду к другому МК. Другой МК сверяет эти команды со своими имеющимися на борту, если код идентичен, выполняет.
О-о... тут все очень не просто......

Я думаю что с ходу (быстро) вам это осилить не получится... Дело в том что через эфир посылки надо передавать особым образом... просто посылая байты данных - вас ждет разочарование...

Гля чего я настрочил как раз для этой цели.... там все очень не просто (я имею ввиду надежную радио передачу)...

http://asis-kbr.ru/forum/viewtopic.php?f=13&t=188

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

shads, а можно на ваши полные ассемблерные исходники передачи и приёма глянуть.

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

Именно тот вариант на асме - я не могу показать...

Могу переделать на асм то что ты видел на Си... Но... честно говоря тоже не горю желанием :)... (как перешел на Си - пропало всякое желание напрягатся...)

Я могу тебе помочь в реализации твоей задачи на Си... в принципе уже все есть почти готовое... минимум времени и твоя задача - решена... (если что - из собственного опыта - на Си задачи решаются в десятки раз быстрее! (естественно - если есть опыт!... если опыта нет в си - в десятки раз медленнее :)...))

И это решение, по надежности работы - не будет уступать фирменным решениям...

Заодно и ты сам в Си въедеш немного :)... что будет не понятно - помогу растолковать...

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

shads, в СИ я чуток тоже соображаю, в планах конечно же работать на СИ в связке с ассемблером. Считаю что СИ + Асма, это наиболее совершенный инструмент. Я скачал СИшные исходники, сижу разбираюсь. А в протеусе ваше решение меня порадовало, так что пока я отвлекусь от асмы в пользу СИ. Спасибо за помощь :thank_you2: , что будет не понятно спрошу :)

А вот и первый вопрос: мой атмел студио ругается на эту строчку, по ходу у вас написанна своя библиотека на этот заголовочный файл или я чего-то не понимаю.

вот сама строчка:

#include "manchester_transmit_lib.h"

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

в планах конечно же работать на СИ в связке с ассемблером. Считаю что СИ + Асма, это наиболее совершенный инструмент.

Ну я тоже так считал... один раз даже пришлось реализовать такой вариант http://asis-kbr.ru/forum/viewtopic.php?f=11&t=162

Но - "пришлось" - только потому что у тини13 один таймер, и по другому не получалось... но вот на мегах - уже такая необходимость отпала, и все прекрасно решилось на Си...

В общем с тех пор ни разу не сталкивался с необходимостью совмещать асм и си...

В принципе я уже убедился, что Си - очень классная штука, с появлением опыта - можно писать практически такой же эффективный код, как и на асме...

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

Я повторю свой вопросик, видимо прошёл мимо кассы :D

Мой атмел студио ругается на эту строчку, по ходу у вас написанна своя библиотека на этот заголовочный файл или я чего-то не понимаю.

вот сама строчка:

#include "manchester_transmit_lib.h"

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

а у вас какая студия?

Ага... увидел - studio6...

Ща я у себя установлю и проверю, ато сейчас у меня 4.18

Кстати... я сам недавно только на Си перешел... и до сих пор не разобрался с правильным подключением библиотек... пока просто цепляю h файлы и прямо в них все пишу... так тоже можно...

(но это конечно не верно... нужно цеплять пару xxx.c и xxx.h но я пока не полностью разобрался в нюансах)

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

Ага, спасибо уже скачал. У меня где-то на компе был справочник по СИ, но тропка к нему по ходу заросла, не найти :D

Вот, нарыл что-то, тут азы может кому пригодится . http://phreakerclub.com/avr-uchebnik

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

Тоже ничего справочник :).....

Жуть как долго 6-ка ставится... уже пол часа наверное... и еще не все :crazy:

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

shads, согласен штуковина жирноватая, но полезная :D отлаживать программу в связке с протеусом одно удовольствие. Кстати помнится я 6 весь день качал, скорость была ниже плинтуса, устанавливал уже на следующий день.

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

Уехать пришлось на целый день...

Перевел в общем на шестую студию, и даже по моему научился цеплять библиотеку по нормальному, двумя файлами C и H...

Justas_manchester_example.7z

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

Библиотека состоит из 2-х файлов - xxx.c и xxx.h

Оба файла нужно подключить к проекту в самой студии

В нашем случае в окошке "solution explorer" нажимаш правю кнопку мыши и щелкаеш "add", потом "existing item"...

таким образом подключаем "manchester_receiver_lib.c" и "manchester_receiver_lib.h"

(предварительно поместив их в папку проекта)

И еще, файл "manchester_receiver_lib.h" нужно подключать в главном сишном файле, т.е. там где функция main...

Т.е. в нашем случае это делается так: #include "manchester_receiver_lib.h".

Кстати, сегодня вечерком сделаю одну общую библиотеку, в которой будет все и прием и передача...

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

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

Ого, одна общая библиотека, с разгруженным ядром это будет круто! А библиотеку можно будет заюзать только для ATmega8 или же это будет полноценная библиотека для всего семейства? Просто с таймерами везде по своему, пардон если спросил глупость :)

И большое спасибо за пояснения :-)

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...