42 сообщения в этой теме

Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. 

Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716.

Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров.

Составить двоичный и шестнадцатеричный код каждой команды.

Изменено пользователем Elite_Knight
ошибка

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
SDD39    128

https://www.mikroe.com/mikroc/#8051

Я сам пока изучаю Си и на компьютер уже написал несколько программ. 

Мне кажется что для мк программа выглядеть будет так.

#include <8051.h>

int main (void){
    register int r6=0x54, r7=0x87;
    r7 &= r6 ;
return (0);    
}

А микро си уже покажет коды и в ассемблере и машинных кодах.

Изменено пользователем SDD39

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
28 минут назад, Elite_Knight сказал:

с чего начать решение вопроса

Нужно было с посещения лекций!

Бери систему команд, алгоритм описан, осталось взять нужные и выстроить программу. Она займет пять-семь строк.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128

Честно говоря микроси  интересненько всё делает.

Вот эту команду    r7 &= r6 ; , вместо того чтоб сделать по честному ,

вычисляет значение 4 где то в препроцессоре , А зарем перегоняер его через 27 регистр в 7.

Это у него в порядке вешей , такие фокусы?

 

1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
musa56    138
55 минут назад, SDD39 сказал:

Это у него в порядке вешей , такие фокусы?

А что вы хотите. Вы пишете программу на "С" а компилятор пытается команды "С" выполнить используя асемблер. К программированию на асемблере это отношения не имеет. На Асемблере вы оперируете регистрами напрямую и программа использует коды Асемблера вашего процесора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128
2 часа назад, musa56 сказал:

К программированию на асемблере это отношения не имеет.

 

Попробовал облегчить задачу сменив верхние  регистры , на полнофункциональные 16 и 17.

Код стал проще . Но всё равно та же песня с &= 

1.png

А  вкдь по идее , вместо  LDI  R17, 4  

Ему и надо то всего лишь прописать     AND R17 , R16 

Что не требует вообще ни каких усилий и даже высисления значения 4.

Изменено пользователем SDD39

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, o_l_e_g сказал:

Нужно было с посещения лекций!

Ждал вот такой комментарий. Можно по сути отвечать. Если есть кто-то знающийся в Ассемблере напишите как оно должно выглядеть структурно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128
2 часа назад, Elite_Knight сказал:

Можно по сути отвечать.

А по сути ,ваша задача не реализуема. По скольку у этого процессора есть только два регистра . Регистр А - аккумулятор и вспомогательный регистр В. 

Цитата

Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:

регистров аккумулятора, регистров временного хранения TMP1 и TMP2,

ПЗУ констант,

сумматора,

дополнительного регистра (регистра В),

аккумулятора (ACC),

регистра состояния программ (PSW).

Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.

ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.

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

Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.

Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига

http://www.computer-museum.ru/technlgy/proclect/mcs51/mcs_51.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, солар сказал:

Могу написать.

Отлично, и все же знаний у меня не прибавится. Подскажите пожалуйста тогда с чего это все начинается. Там что-то сперва заносим в аккумулятор? Используем именно здесь команду ANL? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128

Я не знаю где вы физически возьмёте регистры 6 и 7 . Но выглядит так.

Значение регмстра 7 помещаете в аккумулятор .

значение регистра 6 в регистр В

Проводите операцию И между А и В 

Ну и перемещаете аккумулятор в регистр 7 .

Да в начале надо еще число 0х54 записать в аккумуятор , 

затем поместить значение в регистр 6 

то же самое со вторым числом

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
24 минуты назад, SDD39 сказал:

только два регистра

Гораздо больше.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128
2 часа назад, o_l_e_g сказал:

Гораздо больше.

Разве у него ядро не Z80 го?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
1 минуту назад, SDD39 сказал:

Z80 го?

нет.
 

pam_dann.gif

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638

У них, даже архитектура разная Фон Нейман и Гарвард.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128

За то принцип работы через аккумулятор  один и тот же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
Только что, SDD39 сказал:

через аккумулятор

Опять нет. Спокойненько пишем ANL R6,R7 
 

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


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128
2 часа назад, o_l_e_g сказал:

койненько пишем ANL R6,R7 

По этой ссылке получается что можем http://www.gaw.ru/html.cgi/txt/doc/micros/mcs51/arh/mem.htm

А по этой не можем http://www.computer-museum.ru/technlgy/proclect/mcs51/mcs_51.htm

И чему верить ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
9 минут назад, SDD39 сказал:

И чему верить ?

Компилятору!
 

Сори, один операнд, всё же должен быть А.  Правильно ANL A, R7
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128
2 часа назад, o_l_e_g сказал:

Компилятору!

Так я же его и предлагал в самом первом посту.)))

Поделиться сообщением


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

Джентельмены, я конечно рад что вы нашли общий язык, и при этом не тяните кота за хвост -- скажите код раз все ясно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638
2 минуты назад, Elite_Knight сказал:

скажите код раз

А ключи от квартиры? :)
 

Сам то, хоть попытайся!
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    128

Через аккумулятор надо

MOV  A  , 36H

MOV R6 , A

MOV A  , 57

ANL A , R6

MOV R7 , A

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Гость Влад
      Автор: Гость Влад

       
    • Автор: Ruslan95
      Помогите решить задачу. В в условии дано параметры транзистора h11e, h21e, h22e и Rk, R,  C. Нужно найти возбудится ли автогенератор

    • Автор: SergeyKa
      и так имеется микроконтроллер Atmega8 с тактовой частотой внешнего кварцевого резонатора 16 МГц
      допустим мы имеем переменную PLUS с бесконечным возможным числом.
      while(1) { plus++; } какое будет значение переменной PLUS за 1 микросекунду.
    • Автор: Speed Fighter
      Здарова, инженеры. 
      Не подсобите студню с заданием? 
      Задание, если кому интересно:
      Я подчитнул некоторую теорию, про индикацию, матричную клавиатуру и её опрос. Но вот возникли след. вопросы/трудности:
      1. В случае использования только двух кнопок, целесообразно ли подключать кнопку непосредственно к выводу микроконтроллера? Насколько сильно это упростит решение задачи?
      2. Можно ли где-то посмотреть пример реализации таких клавиатур именно на PIC18? (Уж очень у меня не хватает практики по программированию устройств, всегда на уровне любителя работал на крестах и ему подобных языках для решения мелких проблем и забав)
      3. Можно ли где-то смоделировать моё творение, т.е. посмотреть работоспособность? (MPLAB, proteus, xlinx)
      4. На чем в данном случае рациональнее "кодить" - язык ассемблера или сишка?
      Есть некоторый алгоритм для обработки дребезка контактов:
      https://pp.userapi.com/c840123/v840123038/23a0/IjXofwjEmuc.jpg
      Есть некоторая схемка, которую я в инете откопал:
      https://pp.userapi.com/c840123/v840123038/23a7/-rD4tgCfvLs.jpg
      Так же нашел небольшой код на просторах интернета (увы, он для AVR) :
       
      Благодарю за каждый пендель в нужном направлении, тема-то хорошая.
       
    • Автор: Александр Дрей
      Помогите со скетчем для инкубатора имеется ардуино уно lcd keypad shiled датчик 
      dht22 блок на 4 реле часы ds1302 планируется измерение температуры коррекция работы нагревателя через реле вывод температуры на дисплей измерение влажности коррекция через реле вывод на дисплей переворот лотка по времени через реле вентиляция по времени через реле отображение времяни инкубации дни часы и авварийный сигнал при превышении температуры если можно с коментариями в скетче
      Сам я нуб в программировании пытался копировать и вставлять скейтч с интернета а он даже не проходит проверку в среде ардуино пишет ошибку