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

Преобразование Знакового Числа Из Дополнительного Кода В Прямой


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

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

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

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

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

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

А куда ведёт

JMP $

?

Нет, всё не так.

MOVC A, @A+DPTR
CJNE A, #1Bh, write_char
JMP $
write_char:
mov R0,A
mov A,@R0
MOV SBUF, A

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

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

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

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

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

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

А куда ведёт

JMP $

?

Ну это бесконечный цикл, надо будет его заменить меткой, чтобы перейти на выход после того, как температура выведется в терминал. Правильно? :) А вот мне еще нужно сделать временную задержку в 30 секунд. Это получается мне надо включать второй таймер надо будет и в него забивать задержку эту?

если у меня вот такая строка которую я передаю

txt: DB 047h,04Dh,04Ch,04Bh,04Ah,049h,048h, 1Bh

то почему мы пишем mov A, @r0 ? у нас же там нули везде. И в акк постоянно 0 загружается а не мои числа :)

Вот полная прога, которую хочу в протеус загрузить. Но тут косяк с этим регистром r0 и еще вопрос такой. Нужно аппаратно сбрасывать флаг TI постоянно?

CALCBUFL		 DATA 044h   ;младший байт двоично-десятичного
CALCBUFM		 DATA 045h   ;средний байт двоично-десятичного
CALCBUFH		 DATA 046h   ;старший байт двоично-десятичного
CALCBUFZN   DATA 047h   ;знак
mov CALCBUFL,#23
mov CALCBUFM,#35
mov CALCBUFH,#11
mov CALCBUFZN,#2
;загружаем знак
mov A, CALCBUFZN
add A,#2Bh	   ;число знака	 
mov 047h,A
;загружаем младший байт
mov A, CALCBUFL
ANL A,#00001111B
add A,#30h	    ;работаем с младшей тетрадой		 
mov 048h,A 
mov A, CALCBUFL  
ANL A,#11110000B   ;работаем со старшей тетрадой 
swap A
add A,#30h
mov 049h,A
;загружаем средний байт
mov A, CALCBUFM
ANL A,#00001111B   ;работаем с младшей тетрадой
add A,#30h	   
mov 04Ah,A	
mov A, CALCBUFM  
ANL A,#11110000B ;работаем со старшей тетрадой
swap A
add A,#30h
mov 04Bh,A
;загружаем старший байт
mov A, CALCBUFH
ANL A,#00001111B ;работаем с младшей тетрадой
add A,#30h	   
mov 04Ch,A	
mov A, CALCBUFH  
ANL A,#11110000B ;работаем со старшей тетрадой
swap A
add A,#30h
mov 04Dh,A
;подпрограмма отправки строки в терминал
JMP start
start:
MOV SCON, #50h
MOV TH1, #0FDh
ORL TMOD, #20h
SETB TR1
MOV DPTR, #txt
again:
CLR TI
CLR A
MOVC A, @A+DPTR
mov R0,A
mov A,@R0
CJNE A, #1Bh, write_char
JMP loop
write_char:
mov R0,A
mov A,@R0
MOV SBUF, A
JNB TI, $
INC DPTR
SJMP again
txt: DB 047h,04Dh,04Ch,04Bh,04Ah,049h,048h, 1Bh
loop:
END

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

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

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

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

если у меня вот такая строка которую я передаю

txt: DB 047h,04Dh,04Ch,04Bh,04Ah,049h,048h, 1Bh

то почему мы пишем mov A, @r0 ? у нас же там нули везде. И в акк постоянно 0 загружается а не мои числа :)

txt - это адрес таблицы, с адресами ваших данных. Командой

MOVC A, @A+DPTR

вы заносите в А один из адресов. По этому адресу хранится нужное для передачи число. Вот оно и выбирается командой

mov R0,A
mov A,@R0

Она нужна один раз, я же исправил выше.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

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

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

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

Ну, так это уже хорошо! :)

Вы убрали лишние

mov R0,A
mov A,@R0

?

И добавьте перенос строки после вывода последнего разряда данных.

Изменено пользователем Григорий Т.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

Так, у вас программа работает абсолютно правильно. Просто, терминат принимает каждый символ с единицей в старшем разряде. Нужно согласовать разрядность передачи данных и длину старт-стопов. Если убрать этот бит, то получится -0;2317, что соответствует тому, что вы задали в начале программы.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

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

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

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

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

Нужно согласовать разрядность передачи данных и длину старт-стопов.

Кстати, зачем вам 6-ти разрядные значения, ведь температура максимум 3-х разрядная.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

так а как мне на экран выводить? После перевода в ASCII у меня сохранилось в ОЗУ 3 байта, разбитые на старшую и младшую тетрады + знак. Что мне тогда из всего этого загружать в терминал?

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

Самый старший байт выбросить, а из среднего выводить только младшую тетраду.

Ещё до перевода в ASCII.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

Вы знаете, мне это знакомо.

Помог как-то парнишке. Он, молодец, сам учиться. Только мелкие вопросы по теме задвал. И задает. Сам все делает. А еще,.. я удивлся.

Борец, из южных республик, И радиотехника!!!

Толковый парень!

" СХЕМУДАЙ", - нет!

Извините, мне кажется, у Вас тоже "ностальжи" . Иначе как бы Вы ...

:)

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

Дедуш, все получилось :D Поменял скорость передачи в терминале и убрал 3 первых байта. Только вот температура бежит и бежит. Как бы теперь так сделать, чтобы одно число показала и все?

post-180778-0-45528500-1401002417_thumb.jpg

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

Ну, хоть мозгом начал работать.

В чем я собственно, сомневаюссь.

Ну, не дано хлопчику программулечки писать!

Не его это!

Pragmatik91, учитесь улицу мести. Думаю, под силу.

Уж, извините за откровенность. :)

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

Ну, хоть мозгом начал работать.

В чем я собственно, сомневаюссь.

Ну, не дано хлопчику программулечки писать!

Не его это!

Pragmatik91, учитесь улицу мести. Думаю, под силу.

Уж, извините за откровенность. :)

Я научился это делать еще в армии :) Вы знаете, что у нашего поколения нет будущего. У нас нет никакого желания и склонности к обучению, в моей группе из 10 человек только один выполнил эту курсовую. И я пытаюсь во всем разобраться, не без вашей помощи. Я похож на ребенка, который еще не стал на ноги в области схемотехники и программирования :) Но мне нравится разбираться в этих вещах, нравится узнавать что-то новое, и я обязательно научусь всему, пускай не сразу. Ведь главное - это желание и стремление человека к познанию. Но придется быть терпеливым. И я готов к этому всему. Я готов развиваться в этой области, познавать новое для себя. И я благодарен тем людям, которые помогают мне встать на ноги, вылезти из пеленок :) Благодаря вашему форуму я уже многое постиг, чего сам бы в жизни не сделал :) Поэтому прошу, не нужно указывать, чем мне в жизни заниматься :) Я уже выбрал свой Путь и двигаюсь по нему, пусть и медленно. Кто знает, может быть мне суждено стать таким же отцом электроники, как Вы :) Мое почтение :buba:

Помог как-то парнишке. Он, молодец, сам учиться.

Я же не говорю вам про правильность написания данного слова, хотя оно мне и режет глаз :) Потому что отношусь здесь ко всем с уважением и знаю, что здесь почти все умнее меня :) Иначе я бы к вам за помощью не обращался :)

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

-Pragmatik91, видете-ли.

То, что я усмотрел в данной теме - это Григорий Т. , наверное, как и я, помогли Вам хоть в чем-то.

Нынче, я так вижу, Вы сели на плечи.

Григорий Т., я не знаю, как отнестись к данному респондненту, но лично мое мнение - пусть пока сам порешает. А то мягкими словами и запросами решает суть своего дилома.

Туда их, в качель!

:diablo:

А тупизм -выше крыши! Я, тупой в программировании, и то больше понимаю. :(

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

Если вам не хватает терпения на таких людей, как я, то зачем тогда все это писать? :) Я и сам знаю, что я неопытен в этой сфере деятельности, но это не повод смешивать меня с остальными глупыми людьми. Может с вашей точки зрения вам все и понятно, а для меня это - темный лес. Торжество разума в том и состоит, чтобы уживаться с людьми, не имеющими его. (С) Вольтер вот в чем вся суть :)

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

Как бы теперь так сделать, чтобы одно число показала и все?

Вам её нужно зациклить через 30 сек. Можно на тех же таймерах сделать задержку, пока они не используются, можно программно.

mvkarp, если он только начал программировать , а похоже что так оно и есть, то всё понятно. Лучше бы раньше, но без соответствующих условий это не просто. Я, например, своего с восьмого класса учил программировать. Так он спокойно окончил ВМК МГУ и продолжает там-же в аспирантуре. Главное - пнуть в нужном направлении :)

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

Вам её нужно зациклить через 30 сек. Можно на тех же таймерах сделать задержку, пока они не используются, можно программно.

Так в том то все и дело, что они у меня используются. Они считают импульсы с термодатчика.

TMPIN bit P1.0 ;порт связи с датчиком
T1H data 40h   ;определение места хранения старшего байта T1
T1L data 41h   ;определение места хранения младшего байта T1
T2H data 42h   ;определение места хранения старшего байта T2
T2L data 43h   ;определение места хранения младшего байта T2
mov TH0,#0	  ;обнуление таймера 0
mov TL0,#0	  ;обнуление таймера 0
mov TH1,#0	  ;обнуление таймера 1
mov TL1,#0	  ;обнуление таймера 1
WAIT_LO:
jb	    TMPIN,WAIT_LO ;ожидание низкого уровня сигнала
mov	  TMOD,#11h		 ;задание 16-разрядного режима работы таймеров
WAIT_HI:
jnb	  TMPIN,WAIT_HI  ;Ожидание высокого уровня
setb  TR0		  ;Включение таймера таймер 0 (Т1)
WAITTIMER0:
jb   TMPIN,WAITTIMER0 ;Ожидание низкого уровня
clr  TR0						  ;Выключение таймера 0
setb  TR1				  ;Включение таймера 1(Т2)
WAITTIMER1:
jnb  TMPIN,WAITTIMER1 ;Ожидание высокого уровня
clr  TR1				   ;Выключение таймера 1
mov A,#0H						  ;Сброс настроек таймеров
mov TMOD,A
ret
end

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • предрегулятор то ? что то было тут даже, на 494. Только потерял) жаль по питанию 140уд7 не дотягивают, а то как раз в нужном корпусе)    
    • Это конечно "хорошо", но что это доказывает? Уровень знаний и умений это не показывает, но заставляет задуматься... А по "первому вопросу", у меня два уточнения: А какая у вас схема управления реленачиная с с управляющего сигнала? А у вас оба реле на DC, или где-то, но встречается AC, AC/DC?
    • Решил сюда же написать т.к. тема похожа. Есть видеомагнитафон Sony slv x821, при включении в сеть горит стенбай, а также светодиоды на ручке перемотки назад и hi -speed rewind, при нажатии кнопки включения аппарат не включается, дисплей не светится. Проверял напряжения на блоке питания 6в, +-13в имеются, а дальше после линейных стабилизаторов нет, т.к. они как я понимаю запускаются с процессора судя по схеме. Вопрос что могло сдохнуть, я склоняюсь думать на процессор, история аппарата неизвестна, возможно был залит, имеет ли смысл с ним возится?
    • Спасибо.  Всё понял. А вот предупреждения за выход предела питания не в одной инструкции не встречал. Спасибо.
    • Правильно, 1в это еще понятно.  И то, слишком большая разница входного и выходного напряжения получается, нерационально. Поэтому в свой лабораторник я запихнул сразу несколько блоков питания с отдельными выключателями (благо место позволяло - корпус от маленького компа-кубика Acer ). 1. этот линейник (ставил два D1047 в параллель + выравнивающие резисторы). Кстати, сразу рекомендую поменять родные переменники что шли в наборе на многооборотные, для более плавной регулировки. Трансформатор-бублик со средним выводом 2х23в, обдув родным громадным вентилятором что был в корпусе компа. И того 3А без напряга (при выходном напряжении 12в), больше просто не тянет трансформатор. В качестве выпрямителя ставил двойной диод Шоттки прикрученый к металлическому корпусу, холодный. Входную емкость увеличил до 4х2200мкФ. 2. Отдельный Импульсник нв 8А со своим отдельным питанием (реально тестировал на 4А). 3. Двухполярник +/- 12v  для ОУ со своим трансформатором. Для экспериментов с ОУ. 4. Отдельная зарядка 5в 2а с USB выходом (использовал родное гнездо корпуса).  Отдельные вольтамперметры для блоков. И еще есть место, можно еще что-то добавить.  Поэтому кому нужны большие токи особенно при малых напряжениях на выходе - оставляйте место в корпусе для импульсного стабилизатора, и даже можно использовать один и тот же трансформатор. Это лучше чем требовать от линейного блока питания лишние амперы, тем более без дополнительного вентилятора обдува. Кстати, в китайском наборе идет стабилизатор 24в для вентилятора, но большинство комповых вентиляторов либо 12в. Мне для этого все равно пришлось питать вентилятор отдельно.
    • Понятно теперь, буду настраивать.  Одна непонятка ещё. На фильтре присутствует переключатель фазы, сколько раз этот тумблер не щёлкал, разницы особой не заметил. Только бас из одного угла перемещался в другой и всё   Вот вопрос: как на выходе усилителя определить фазу (+/-)? Не у колонок, а именно у выхода усилителя, т.к. к нему подключён ещё один фильтр 2 порядка и скорее всего «+» с «-» возможно поменялись. Хочу подключить всё в правильной полярности и не дро#ить этот переключатель фазы. 
  • Похожий контент

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