Палыч 10 11 июня, 2010 Опубликовано 11 июня, 2010 · Жалоба Как использовать команду MOVX если адрес и данные на разных портах?Вы используете C8051F020. Это какой-то клон 8051 (к сожалению, с C8051F020 я не знаком). В классическом 8051 по команде MOVX МК аппаратно формирует некую, описанную в DS, последовательность сигналов адреса (на Р0, Р2), данных (на Р0), сигналов ALE, RD, WR. Скорее всего (уточните в DS) и применённый Вами МК так (и только так!) выполняет команду MOVX. Что делать, если нужно использовать другие порты? В этом случае сигналы прийдется формировать программным способом (с помощью команд, отличных от MOVX, выводить на нужные порты необходимые сигналы в нужной последовательности и с соблюдением необходимых временных интервалов). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 11 июня, 2010 Опубликовано 11 июня, 2010 · Жалоба Спасибо за пояснение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 14 июня, 2010 Опубликовано 14 июня, 2010 (изменено) · Жалоба 1. Подскажите почему код выполняет одинаковую временную задержку на частотах микроконтроллера 11 и 22 МГц. Моделирую в Keil uVision. DELL_1MS: MOV TMP_CNT,#250 DJNZ TMP_CNT,$ MOV TMP_CNT,#250 DJNZ TMP_CNT,$ RET ORG 8000 JMP START_PROG 2. Эта часть кода, когда нибуть выполняется? Перед ней ведь стоит команда RET. ORG 8000 JMP START_PROG Изменено 14 июня, 2010 пользователем Aleksandr_KPI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба Эта часть кода, когда нибуть выполняется? Перед ней ведь стоит команда RET. ORG 8000 JMP START_PROG директива ORG сообщает компилятору, что следующие инструкции он должен размещать с указанного адреса, в данном случае - с 8000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба 2. Эта часть кода, когда нибуть выполняется? Перед ней ведь стоит команда RET. Я думаю, программист пытался "подстраховаться", если программный счетчик скакнет куда-нибудь, куда его "не просили", и тогда доберется до перехода на старт. Сомнительная польза... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба Подскажите почему компилятор не видит некоторые регистры специальных функций: EMI0CF, XBR, P1MDOUT. В то же время нормально воспринимает TH, TL, TCON... При компиляции выдает ошибку UNDEFINE SIMBOL. А вот если обратится к регистру по адресу то все нормально работает, только потом читать код трудно становится. В среде Keil uVision четко выбираю свой микроконтроллер (Silicon Laboretories C8051F020) да и переферия правильно отображается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба Подскажите почему компилятор не видит некоторые регистры специальных функцийНаверное, потому, что нет #include <cygnal\c8051F020.h> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба А как быть если программа на ассемблере? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба А как быть если программа на ассемблере?И для ассемблера есть директива $INCLUDE (файл.ink). Подходящий подключаемый файл найдите в Keil\C51\ASM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 17 июня, 2010 Опубликовано 17 июня, 2010 (изменено) · Жалоба Спасибо все нашел, только в случае с keil uVision нужно еще перед дерективой $INCLUDE прописать $nomod51, которая отключит регистры объявленные по умолчанию. Если этого не сделать будет конфликт с вновь объявляемыми. 1.Подскажите, в чем разница между режимами Open-Drain и Push-Pull. Читал http://www.proz.com/kudoz/english_to_russi...ll.html#1000368, мало что понятно, а больше не нашел. Я так понял это два варианта настройки портов МК в выходном режиме. 2. Прочитал такую вещь Обычные команды чтения порта (например, MOV A,P2) реализуют ввод информации только с внешних выводов порта. В соответствующие регистры-фиксаторы при этом предварительно должны быть записаны "1", чем обеспечивается настройка линий порта на ввод. Где находится регистры-фиксаторы порта и как к ним обратится. Нужно смотреть в сторону регистра специальных функций или я не прав? Изменено 17 июня, 2010 пользователем Aleksandr_KPI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба нужно еще перед дерективой $INCLUDE прописать $nomod51Или в опциях проекта (Options -> A51) убрать галку "Define 8051 SFR Names" Ваши вопросы, как я понял, касаются ввода-вывода в/из параллельные порты МК51? "На пальцах" это, примерно, так: Вывод. Выводимое значение помещается в регистр. Ноль в соответствующем разряде открывает ключ, соединяющий "ногу" МК с "землёй": на ноге - низкий уровень. Единица - запирает ключ ("отрывает" от земли), но нога соединена (внутри МК, конечно) через резистор с большим сопротивлением (pullup, подтягивающий резистор) к источнику питания, который в отсутствии "притягивания" извне ноги к земле и большого сопротивления внешней нагрузки на ноге, создаёт на ноге высокий уровень. Ввод. Информация "снимается" непосредственно с ноги МК. Нолик читается если мы вывели на ногу низкий уровень (выдали 0; открыли ключ, соединяющий ногу с землёй) или низкий уровень "навалился" на ногу с выхода другой м/с, соединенном с ногой МК. В противном случае - читается единица (т.е. ноль как-бы "приоритетнее"). Поэтому в МК51 для чтения с портов (Р0, Р1 и т.д.) нужно выдать в порт единицы (или не выводить ничего - после сброса там и так единицы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Или в опциях проекта (Options -> A51) убрать галку "Define 8051 SFR Names" Тоже верно :) . В принципе что касается ввода-вывода понятно, а как быть с Open-Drain и Push-Pull. В даташите на контролер написано The output mode of port pin can be configured as either Open-Drain or Push-Pull; Существует регистр к примеру P1MDOUT для порта Р1, который настраивает его в режим Open-Drain или Push-Pull, а в чем разница между ними? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Open-Drain или Push-Pull, а в чем разница между ними?То, что я описал выше - реализовано в классическом 8051 - это Open Drain. В Push-Pull: два ключа - один соединяет ногу с землей, другой - с питанием; открыт всегда один из них в зависимости от выданного значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr_KPI 0 18 июня, 2010 Опубликовано 18 июня, 2010 · Жалоба В Push-Pull: два ключа - один соединяет ногу с землей, другой - с питанием; открыт всегда один из них в зависимости от выданного значения. Не совсем понял разницу, зачем вводить два ключа,что это дает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 18 июня, 2010 Опубликовано 18 июня, 2010 · Жалоба что это дает? Скорость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться