Ви використовуєте застарілий браузер. Цей та інші сайти можуть відображатися в ньому некоректно. Необхідно оновити браузер або спробувати використовувати https://www.google.com/chrome/
Прошу помощи в написании программы под МК Intel 8051
🟡 21:35 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
Пасиб! У меня, возможно, скоро, будет большой проект на кристалле, у которого ядро на 8051.. Увы.. Морально себя подготавливаю на морально устаревшее..
Не вижу направления сдвига. В условии хоть сказано? Я, честно говоря, и с границей не понял.
Обе единицы сдвигаются в одну сторону, или левая влево, а правая вправо. Спросит ведь препод, как в другую сторону повернуть
Насколько я поняла, левая влево, а правая -- вправо. Но непонятно, их нужно сдвигать обе на 1 разряд одновременно или же по очереди, сдвинув их в крайних разряд по очереди. Ну что ж, все равно надо делать задание. Так что будем пытаться. Всем спасибо за помощь
Пасиб! У меня, возможно, скоро, будет большой проект на кристалле, у которого ядро на 8051.. Увы.. Морально себя подготавливаю на морально устаревшее..
Главное с мнемоникой адресации разобраться, остальное приложится
mov A,Rr - загрузка из регистра
mov A,@Rr - загрузка по индексу
mov A,direct - загрузка с прямого адреса
mov A,#data - загрузка непосредственно из тела команды
В любом случае число справа - 8бит. Потерял собачку или хеш - сиди думай хоть весь день. Компилятору по барабану что компилить =)
Ну и не забывать, что регистров четыре банка, тактовая частота делится на 12, а условные переходы +- 127 адресов.
----------------------------------------
Набросал вот такой экспромт. Наверняка с ошибками, да и синтаксис не подойдет к имеющимся компиляторам
Две особенности:
-числа не сдвигаются, а берутся из таблицы. Это дает бОльшую универсальность. Можно легко менять направление сдвига (меняя числа по метке patterns),
и число шагов (константа shift_number).
-опрос входа P3.6 самый примитивный, без подавления дребезга. Пока 0 - числа выводятся, 4ак только 1 - таймер останавливается. Отсчет времени начинается с начала при каждом событии на входе (вызывается timer0_int)
dseg
;Вычисление периода прерываний таймера 5мС (5000 мкС) для генератора 10МГц
;65536-5000E-6/[(1/10E6)*12]=65536-4166.(6)~=65536-4167=61369=EFB9h
;можно добавить компенсацию времени оклика на прерывание, но это уже тонкости
;если изучалось - стоит сделать. нет - ненужно "умничать". можно при защите упомянуть, что есть вот такой недостаток
;----------------------------------------
;уже готовые числа (маски) для непосредственного вывода в порт
patterns:
db 10000001b
db 01000010b
db 00100100b
db 00011000b
;----------------------------------------
;----------------------------------------
;инициализация таймера0, режим - 16бит таймер
timer0_int:
mov TL0,#time_base_low
mov TH0,#time_base_high
call do_shift
reti
;----------------------------------------
;----------------------------------------
;старт программы: инициализация счетчика сдвигов, вывод в порт первого числа и разрешение прерываний
init:
setb P3.6
mov step_counter,#step_number
call do_shift
mov IE,#10000010b
main:
;простой опрос входа P3.6 (без подавления дребезга) если вход =0 запускается таймер и ожидается переход в 1
;если 1 - таймер останавливается и ожидается переход в 0
check_input:
А, еще, девушка вряд ли написала бы слово "кварц" =) Если только оно не написано в задании.
Но это ерунда. Размялся немного. Может и мне придется стариной тряхнуть.
;Вычисление периода прерываний таймера 5мС (5000 мкС) для генератора 10МГц
;65536-5000E-6/[(1/10E6)*12]=65536-4166.(6)~=65536-4167=61369=EFB9h
;можно добавить компенсацию времени оклика на прерывание, но это уже тонкости
;если изучалось - стоит сделать. нет - ненужно "умничать". можно при защите упомянуть, что есть вот такой недостаток
;----------------------------------------
;уже готовые числа (маски) для непосредственного вывода в порт
patterns:
db 10000001b
db 01000010b
db 00100100b
db 00011000b
;----------------------------------------
org 0030h
;----------------------------------------
;инициализация таймера0, режим - 16бит таймер
timer0_int:
mov TL0,#time_base_low
mov TH0,#time_base_high
call do_shift
reti
;----------------------------------------
;----------------------------------------
;старт программы: инициализация счетчика сдвигов, вывод в порт первого числа и разрешение прерываний
init:
setb P3.6
mov shift_counter,#shift_number
call do_shift
mov IE,#10000010b
main:
;простой опрос входа P3.6 (без подавления дребезга) если вход =0 запускается таймер и ожидается переход в 1
;если 1 - таймер останавливается и ожидается переход в 0
check_input:
Надо было рисовать схему на Протеусе, а потом Кекс туда подсунуть. Но лениво - ограничился поправить исходник. Впрочем небезрезультатно -
многое чего из х51 вспомнил.
А чего - начал (если по МК на МЦС48), и уже в 96 под 1816ВЕ31 дизассемблир и ассемблир вручную вовсю. С 98 у мну наконец появилсо свой компухтер, проц кирюха ПР233, 32метра памяти, и 4-х гиговый винт. Немало по тем временам
Кстати - больше смотрел на распределение памяти, и чтоб паттерны не налезли на зону следующего преравания орг 0030ш то мой