Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Пт окт 26, 2012 13:34:22
Откуда: Украина, Черновицкая обл.

Сообщение CherepVM »

Да, это просто цикл ожидания или отрабатывание паузы.
Вот, набросал небольшой примерчик по обработке одной кнопки, которая находится на P1.0 и при нажатии P1.0="0".

Код: Выделить всё

;========================;
retWaitP: jb   P1.0,$        ;ждём нажатия кнопки...
;... кнопка нажата, делаем проверку достоверности нажатия через 1ms три или более раза
;.... таким образом уходим от дребезга контактов..........
          call pause         ; пауза не менее 1ms
          jb   P1.0,retWaitP ;если дребезг, то опять ждём...
          call pause         ; 1ms
          jb   P1.0,retWaitP ;
          call pause         ; 1ms
          jb   P1.0,retWaitP ;
;...........;
;....... кнопка нажата, что-то делаем или
;....... ждём когда кнопка будет отжата и 
;....... потом будем что-то делать
;...........;
retWaitN: jnb  P1.0,$        ;ждём когда кнопка будет отпущена...
          call pause         ; 1ms
          jnb  P1.0,retWaitN ;если дребезг, то опять ждём...
          call pause         ; 1ms
          jnb  P1.0,retWaitN ;
          call pause         ; 1ms
          jnb  P1.0,retWaitN ;
;...........;
;....... кнопка отпущена, что-то делаем.........;
;========================;
Это с одной кнопкой..., у вас группа кнопок, обработка будет более ветеевато, но по такомуже принципу.
Контактная информация:
Реклама
Родился
Сообщения: 6
Зарегистрирован: Пт ноя 23, 2012 18:51:47

Сообщение Selot »

Спасибо. Попробовал - работает, но только когда одна кнопка... Сделал такой обработчик на две кнопки, запустил моделирование в протеусе и увидел следущее: когда сперва нажимаю кнопку "1", она выводится на индикатор, но когда еще раз нажимаю на нее - ничего не происходит, потом нажимаю "2" - на второй индикатор выводится двойка, при следущем нажатии только "1" выводится на третий индикатор. Вобщем, как я понял, 2 раза подряд одна и та же цифра не выводится. И двойка первая тоже не выводится, только единица. К обработчику дребезга пытался обращался и как к подпрограмме, и как к метке.

Отбой тревоги :) Кажется разобрался. Премного благодарен товарищу CherepVM :beer:
Реклама
Открыл глаза
Сообщения: 51
Зарегистрирован: Пт фев 12, 2010 19:42:35
Откуда: Брест

Сообщение dimapo »

Коты, кто силен в адресации на ASMе подскажите!
Тема – тест ОЗУ микропроцессорной системы (на х88). Курсовой. Алгоритм теста – попарное считывание по диагонали. Алгоритм приведен ниже.
По алгоритму: ASR –адрес контролируемая ячейка памяти, AIJ – остальные ячейки памяти. S, I номера строки, R, J номера столбцов. L и M конечные номера ячеек строки и столбца соответственно.
В контролируемую ячейку ASR записывается 0, в остальные ячейки 1. Затем происходит считывание ячеек и контролируется правильность записи.
Микросхема ROM известна ( КР556РТ16. 64К(8Кх8))

Теперь вопрос:
1. Каким образом обращаться к ячейке памяти? Как матрица? или используя базово -индексную адресацию.? Как это прописать, учитывая что нужно смещаться и по строкам и по столбцам.

Где-то видел
;------ввод массива-----
mov si,0 ;j
mov bx,0 ;i
mov cx,10

forI:
push cx
mov cx,10
mov si,0

forJ:
mov ah,1h
int 21h

mov array[bx][si],al

mov ah,2h
mov dl,' '
int 21h

inc si
loop forJ

Может так - mov array[bx][si],al ????
Вложения
алгоритм.jpg
(219.93 КБ) 357 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Попробуйте так:
mov [array+ bx + si], al
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 5334
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

Ага, только вот тема то называется "Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..", а обсуждение получается MCS-86/88 . Надо бы перенести предыдущие два поста в соответствующую тему, а этот мой пост стереть, он станет ненужным после переноса.

К тому же если :
Тема – тест ОЗУ микропроцессорной системы (на х88). Курсовой. Алгоритм теста – попарное считывание по диагонали. Алгоритм приведен ниже.
, то каким боком к этому относится ПЗУ-шка :
Микросхема ROM известна ( КР556РТ16. 64К(8Кх8))
?
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Реклама
Открыл глаза
Сообщения: 51
Зарегистрирован: Пт фев 12, 2010 19:42:35
Откуда: Брест

Сообщение dimapo »

По ASM собственно больше и писать некуда. Проехали.

Подскажите пожалуйста .
к ячейке массива я обращаюсь используя строчку mov array[bx][si],al.
вх - строки, si- столбцы, условно говоря. Кусок программы 2-мя постами выше.

Можно ли использовать другую пару регистров и при этом использовать их одновременно.

Например mov array[bx][si],al
а когда надо mov array[dx][cx],al
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Насколько я помню, в оригинальном 8086 можно использовать регистровые пары bx+si/di или bp+si/di.
Открыл глаза
Сообщения: 51
Зарегистрирован: Пт фев 12, 2010 19:42:35
Откуда: Брест

Сообщение dimapo »

А я обыскался уже, гто то же видел вторую регистровую пару bp+di.

Ну пускай и так .
Но можно ли ими пользоваться одновременно?
Там всего лишь хранятся значения номера строки или столбца.
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Не понял откуда возник такой вопрос, т.е. почему имеется сомнение что нельзя. Это-же независимые регистры. В конце концов, почему просто не попробуете скомпилировать код, где они все участвуют. Ответ быстрее получите, чем ждать здесь.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Сб апр 02, 2011 04:05:00

Сообщение dimaib »

Здравствуйте друзья! Поправьте если не туда написал=)
Начал изучать МК с 8051 серии. Встал вопрос с программатором, но в моем ноуте (Dell 500) конечно же неодного намека на COM и LPT. Решил собрать распространенный USBASP. После сборки все заработало все хорошо... но не тут то было софт (AVRDUDEPROG) который идет с этим программатором не поддерживает 89s серию. Нашел как переделать программатор для 8051 - http://www.circuitvalley.com/2011/06/us ... ammer.html - но не понятно каким софтом они пользуются.
Может вы подскажете что то? поможете советом!=)
Спасибо!
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Там в инструкции в Step 6 рекомендуется использовать ProgISP software
http://www.avrfreaks.net/index.php?modu ... tem_id=803
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Сб апр 02, 2011 04:05:00

Сообщение dimaib »

Благодарю вас серрр!=)
Встал на лапы
Сообщения: 82
Зарегистрирован: Пт янв 02, 2009 19:28:44
Откуда: Москва

Сообщение Westbam »

Всем привет.

В этих мк я полный ламер :)

Есть устройство на AT89S52, с мк очень было бы не плохо вытащить прошивку, но
подозреваю контроллер залочен.
Я собрал прогер по ссылке(в полной работоспособности его я не уверен):
http://dybkowski.net/content/en/node/15
При помощи его мне удалось считать прошивку и настройки фьюзов.
Как понял прошивка так и не считалась.
Кто спец по этим контроллерам посмотрите прошивку и скрин проги, мне
нужно быть точно уверенным что камень залочен.

http://zalil.ru/34320919
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

В хексе одни FF-ки. Ничего путного не считалось.
Друг Кота
Аватара пользователя
Сообщения: 15608
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

У AT89S52 нетуть фьюзов (разве что защита от чтения зловредными кошенятами).
Для вышеуказанной оболочки используется стандартное железо STK200m (см.схему тут: http://www.lancos.com/prog.html ).
Если установлена защита от чтения слямзить программу неудастся.
Да и гораздо проще ее заново написать... 8)
p.s.
спасибки за ссылку - у меня старая версия оболочки была - там значительно поновее выложена :beer:
Кстати этот софтинко (isp programmer) превосходно уживается с платами-расширителями PCI-LPT (NetMOs PCI Parallel Port в частности) - так что на стационарных ПК особого вопроса с LPT не возникает! 8)
Встал на лапы
Сообщения: 82
Зарегистрирован: Пт янв 02, 2009 19:28:44
Откуда: Москва

Сообщение Westbam »

Так и знал что облом, теперь я в этом почти уверен :)
Рад что вам пришлась по душе новая версия проги.
Чем схема по ссылке что я дал хуже STK200? как я понял она только оч упрощена.
По подробнее про фьюзы защиты, они инвертированы как AVR? Если все фьюзы
запрограммированы, писать данные во флеш контроллера можно?
Не всегда бывает проще заново написать прошивку, увы не всегда.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15608
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

по поводу бит защиты - смотри оригинальные даташиты атмела на странице
http://www.atmel.com/products/microcont ... =documents
если их установили - сброс только общим стиранием кристалла с полной потерей информации для последующей записи чего-нибудь новенького.
STK200m - проверенная длительной эксплуатацией на собственном опыте схемка. Работает весьма надежно и для AVR и для mcs51
Встал на лапы
Сообщения: 82
Зарегистрирован: Пт янв 02, 2009 19:28:44
Откуда: Москва

Сообщение Westbam »

По ссылке что я давал, в архиве есть скрин фузов, на нем видно что галки(LB1,LB2,LB3) пусты,
это означает что камень не заблокировал? Что то не понятно мне..
На самой плате по мимо контроллера, есть: 29EE512 - епромка объемом в 64 Килобайта.
и оперативка в 32 Килобайта. Само устройство занимается тем что управляет двумя моторами,
дергает соленоид и опрашивает кучу датчиков, по мимо всего прочего общается с внешнем миром
через com порт. Думается мне что прошивка может находить еще в епромке, а камень просто загружает
код из епрома в оперативку и выполняет его от туда. Такое ведь может быть?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15608
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если "галки" не поставлены - значение бита=1 (не запрограммирован).
МК может работать на внутренней памяти программ до исчерпания диапазона ее адресов, затем автоматически идет выборка из внешней ПП. К внешнему ОЗУ также возможен доступ как к ВПД так и как к ВПП (подгружаемые программы) - все зависит от конкретной схемотехники. Обрати внимание на вывод /EA - при фиксированном 0 на этом выводе схема работает только с ВПП/ВПД, если там есть 1 - используется РПП в качестве биос-утилит.
IM1
Грызет канифоль
Аватара пользователя
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Сообщение IM1 »

Westbam писал(а):На самой плате по мимо контроллера, есть: 29EE512 - епромка объемом в 64 Килобайта.
и оперативка в 32 Килобайта.
Что же Вы молчали об этом с самого начала? Теперь все ясно: контроллер пустой, а вся программа находится в епроме. Читайте епромку и программа Ваша.
В случае клонирования устройства - больше ничего и не надо. А если хотите подправить прошивку, то Вас ждет тяжкий труд: 64к кода, это не фунт изюма! В таком случае, однозначно, нужна полная принципиальная схема и хороший дизассемблер, я бы посоветовал IDA.
Ответить

Вернуться в «Разные вопросы по МК»