реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Программа для микроконтроллера, Как работает код
Палыч
сообщение Jun 11 2010, 09:57
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 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, выводить на нужные порты необходимые сигналы в нужной последовательности и с соблюдением необходимых временных интервалов).
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 11 2010, 10:13
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Спасибо за пояснение.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 14 2010, 12:09
Сообщение #48


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 14 2010, 15:32
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Aleksandr_KPI @ Jun 14 2010, 16:09) *
Эта часть кода, когда нибуть выполняется? Перед ней ведь стоит команда RET.

Код
ORG     8000
JMP     START_PROG

директива ORG сообщает компилятору, что следующие инструкции он должен размещать с указанного адреса, в данном случае - с 8000
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 15 2010, 08:41
Сообщение #50


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Aleksandr_KPI @ Jun 14 2010, 15:09) *
2. Эта часть кода, когда нибуть выполняется? Перед ней ведь стоит команда RET.

Я думаю, программист пытался "подстраховаться", если программный счетчик скакнет куда-нибудь, куда его "не просили", и тогда доберется до перехода на старт. Сомнительная польза...
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 16 2010, 11:22
Сообщение #51


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Подскажите почему компилятор не видит некоторые регистры специальных функций: EMI0CF, XBR, P1MDOUT. В то же время нормально воспринимает TH, TL, TCON... При компиляции выдает ошибку UNDEFINE SIMBOL. А вот если обратится к регистру по адресу то все нормально работает, только потом читать код трудно становится. В среде Keil uVision четко выбираю свой микроконтроллер (Silicon Laboretories C8051F020) да и переферия правильно отображается.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 16 2010, 14:28
Сообщение #52


Гуру
******

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



Цитата(Aleksandr_KPI @ Jun 16 2010, 15:22) *
Подскажите почему компилятор не видит некоторые регистры специальных функций
Наверное, потому, что нет
#include <cygnal\c8051F020.h>
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 16 2010, 14:53
Сообщение #53


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



А как быть если программа на ассемблере?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 16 2010, 15:21
Сообщение #54


Гуру
******

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



Цитата(Aleksandr_KPI @ Jun 16 2010, 18:53) *
А как быть если программа на ассемблере?
И для ассемблера есть директива $INCLUDE (файл.ink). Подходящий подключаемый файл найдите в Keil\C51\ASM
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 17 2010, 09:30
Сообщение #55


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 17 2010, 11:22
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 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 и т.д.) нужно выдать в порт единицы (или не выводить ничего - после сброса там и так единицы).
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 17 2010, 11:50
Сообщение #57


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
Или в опциях проекта (Options -> A51) убрать галку "Define 8051 SFR Names"


Тоже верно smile.gif .


В принципе что касается ввода-вывода понятно, а как быть с 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, а в чем разница между ними?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 17 2010, 12:17
Сообщение #58


Гуру
******

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



Цитата(Aleksandr_KPI @ Jun 17 2010, 15:50) *
Open-Drain или Push-Pull, а в чем разница между ними?
То, что я описал выше - реализовано в классическом 8051 - это Open Drain. В Push-Pull: два ключа - один соединяет ногу с землей, другой - с питанием; открыт всегда один из них в зависимости от выданного значения.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 18 2010, 11:01
Сообщение #59


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Цитата
В Push-Pull: два ключа - один соединяет ногу с землей, другой - с питанием; открыт всегда один из них в зависимости от выданного значения.

Не совсем понял разницу, зачем вводить два ключа,что это дает?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 18 2010, 11:10
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Aleksandr_KPI @ Jun 18 2010, 15:01) *
что это дает?

Скорость.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01528 секунд с 7
ELECTRONIX ©2004-2016