|
|
  |
Программа для микроконтроллера, Как работает код |
|
|
|
Jun 11 2010, 09:57
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Aleksandr_KPI @ Jun 10 2010, 17:38)  Как использовать команду MOVX если адрес и данные на разных портах? Вы используете C8051F020. Это какой-то клон 8051 (к сожалению, с C8051F020 я не знаком). В классическом 8051 по команде MOVX МК аппаратно формирует некую, описанную в DS, последовательность сигналов адреса (на Р0, Р2), данных (на Р0), сигналов ALE, RD, WR. Скорее всего (уточните в DS) и применённый Вами МК так (и только так!) выполняет команду MOVX. Что делать, если нужно использовать другие порты? В этом случае сигналы прийдется формировать программным способом (с помощью команд, отличных от MOVX, выводить на нужные порты необходимые сигналы в нужной последовательности и с соблюдением необходимых временных интервалов).
|
|
|
|
|
Jun 14 2010, 12:09
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
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
Сообщение отредактировал Aleksandr_KPI - Jun 14 2010, 12:10
|
|
|
|
|
Jun 17 2010, 09:30
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Спасибо все нашел, только в случае с 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", чем обеспечивается настройка линий порта на ввод. Где находится регистры-фиксаторы порта и как к ним обратится. Нужно смотреть в сторону регистра специальных функций или я не прав?
Сообщение отредактировал Aleksandr_KPI - Jun 17 2010, 09:31
|
|
|
|
|
Jun 17 2010, 11:22
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Aleksandr_KPI @ Jun 17 2010, 13:30)  нужно еще перед дерективой $INCLUDE прописать $nomod51 Или в опциях проекта (Options -> A51) убрать галку "Define 8051 SFR Names" Ваши вопросы, как я понял, касаются ввода-вывода в/из параллельные порты МК51? "На пальцах" это, примерно, так: Вывод. Выводимое значение помещается в регистр. Ноль в соответствующем разряде открывает ключ, соединяющий "ногу" МК с "землёй": на ноге - низкий уровень. Единица - запирает ключ ("отрывает" от земли), но нога соединена (внутри МК, конечно) через резистор с большим сопротивлением (pullup, подтягивающий резистор) к источнику питания, который в отсутствии "притягивания" извне ноги к земле и большого сопротивления внешней нагрузки на ноге, создаёт на ноге высокий уровень. Ввод. Информация "снимается" непосредственно с ноги МК. Нолик читается если мы вывели на ногу низкий уровень (выдали 0; открыли ключ, соединяющий ногу с землёй) или низкий уровень "навалился" на ногу с выхода другой м/с, соединенном с ногой МК. В противном случае - читается единица (т.е. ноль как-бы "приоритетнее"). Поэтому в МК51 для чтения с портов (Р0, Р1 и т.д.) нужно выдать в порт единицы (или не выводить ничего - после сброса там и так единицы).
|
|
|
|
|
Jun 17 2010, 11:50
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Или в опциях проекта (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, а в чем разница между ними?
|
|
|
|
|
Jun 18 2010, 11:01
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата В Push-Pull: два ключа - один соединяет ногу с землей, другой - с питанием; открыт всегда один из них в зависимости от выданного значения. Не совсем понял разницу, зачем вводить два ключа,что это дает?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|