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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> как прочесть порт
schulgin
сообщение May 12 2012, 16:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Отлаживаю в Кейле с помощью симулятора программу.
Цифровые выходы обозначил битовыми пременными например так "sbit rabota = P2^0;" Всё хорохо, когда пишу в порт, но когда пытаюсь использовать этот идентификатор в какой ни буть операции, например, "if (rabota)" или просто его присвоить другой переменной ничего не получается. Компилируется без ошибок, а операции или присвоения не выполняются. Пытался это сделать с помощью маскировки порта, например "P2 & 0x01" та же самая история по отдельности все значения просматриваются, а результат другой.
Промучился почти целый день, а результат ноль. Уж очень достало, помогите!!!
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 14 2012, 05:40
Сообщение #2


Гуру
******

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



Цитата(schulgin @ May 12 2012, 20:00) *
...а операции или присвоения не выполняются.
Как Вы это определяете? Приведите хотя бы кусок текста программы где это не работает.
Go to the top of the page
 
+Quote Post
schulgin
сообщение May 14 2012, 08:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Спасибо за отклик. Немного лирики. Кейлом и написанием программ на С за всю жизнь пользовался чисто эпизодически раза три с интервалом ~ 5 лет, не вдаваясь в тонкости и оптимизацию - лишь-бы работало, каждый раз думая, что больше к этому не вернусь. Но, вот, жизнь опять заставила этим заняться. Прикрепил архив проекта. Сейчас проект отлаживаю в отладчике, хотя железо есть, а адаптер подвезут только на следующих выходных.
Сначала создал конструкцию, отображённую в строках 164, 165 и на этом заткнулся. Затем попробовал конструкцию, отображённую в строках 166, 167 - тот-же самый результат. Пришлось ввести новые переменные d0 ... (строка 122) и в дальнейшем использовать их. Как оказалось это было и хорошо, поскольку, как выяснилось в последствии, индикаторами надо было управлять и по другим законам. Основной цикл только что написал и не отлаживал. Посмотрел только, как ведёт себя переменная "pusk" (строка 68). Тот же самый удручающий результат - if (pusk) не хочет работать.
Ещё полностью не разобрался как правильно пользоваться логическими операциями, например &, &&, но это при отладке можно будет причесать.
До кучи. Использую таймер0. По моим подсчётам он должен выдавать прерывание с частотой 1,9 Гц (6мГц/48/2^16). А Silab овский конфигуратор показывает 162 Гц. Решил пока на этом не зацикливаться, но если кто знает, ответе.

Сообщение отредактировал schulgin - May 14 2012, 08:39
Прикрепленные файлы
Прикрепленный файл  Kuhnya_.zip ( 39.39 килобайт ) Кол-во скачиваний: 21
 
Go to the top of the page
 
+Quote Post
Kolia
сообщение May 14 2012, 09:09
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Меня смущает эта строчка

pusk = 0;

фактически вы подключили порт к земле....
Go to the top of the page
 
+Quote Post
schulgin
сообщение May 14 2012, 09:40
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Цитата(Kolia @ May 14 2012, 12:09) *
Меня смущает эта строчка

pusk = 0;

фактически вы подключили порт к земле....

"pusk = 0;" закоментировал, результат не изменился, но задался вопросом:"Если я хочу поуправлять состоянием входа, то в окошке Parallel Port отладчика должен пользоваться строкой Pins:, а не P0:?"
Go to the top of the page
 
+Quote Post
Kolia
сообщение May 14 2012, 10:07
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(schulgin @ May 14 2012, 12:40) *
"pusk = 0;" закоментировал, результат не изменился, но задался вопросом:"Если я хочу поуправлять состоянием входа, то в окошке Parallel Port отладчика должен пользоваться строкой Pins:, а не P0:?"


ну по идее да, P0 это регист микроконтроллера

вам нужно вот это ....


http://onembedding.bialix.com/tools/keil/a...s/key_simul.htm
Go to the top of the page
 
+Quote Post
schulgin
сообщение May 14 2012, 10:44
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Большое спасибо Бельченко. Собственно, прочитав его статьи, я и смог программировать эти микроконтроллеры. Указанная статья мне ещё пригодиться, но в примере нет того, как прочитать вход. Сдаётся мне, что я не знаю какой-то тривиальщины. Всё же, почему в моей программе строка 68 не работает?
Go to the top of the page
 
+Quote Post
Kolia
сообщение May 14 2012, 12:34
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(schulgin @ May 14 2012, 13:44) *
Большое спасибо Бельченко. Собственно, прочитав его статьи, я и смог программировать эти микроконтроллеры. Указанная статья мне ещё пригодиться, но в примере нет того, как прочитать вход. Сдаётся мне, что я не знаю какой-то тривиальщины. Всё же, почему в моей программе строка 68 не работает?


Вход читается непосредсвенно в программе, можно и логический анализатор использовать. Судя по коду должно рабюотать, возможно глюки дебагера...
Go to the top of the page
 
+Quote Post
schulgin
сообщение May 14 2012, 12:41
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Коля, когда Вы сказали, что можно и логический анализ использовать, то что имелось ввиду?
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 14 2012, 13:01
Сообщение #10


Гуру
******

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



Цитата(schulgin @ May 14 2012, 14:44) *
Всё же, почему в моей программе строка 68 не работает?

Чтобы читать что-то с ноги МК51 нужно выдать в соответствующий бит порта единицу.

Цитата(schulgin @ May 14 2012, 13:40) *
"pusk = 0;" закоментировал,
Вот тут-то и надо не коментить, а изменить на
Код
pusk = 1;
Go to the top of the page
 
+Quote Post
Kolia
сообщение May 14 2012, 13:21
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(schulgin @ May 14 2012, 15:41) *
Коля, когда Вы сказали, что можно и логический анализ использовать, то что имелось ввиду?


В кейле есть логический анализатор. Есть еще watchdog его тоже можно использовать для просмотра значения порта...


Цитата(Палыч @ May 14 2012, 16:01) *
Чтобы читать что-то с ноги МК51 нужно выдать в соответствующий бит порта единицу.

Вот тут-то и надо не коментить, а изменить на
Код
pusk = 1;


Можно попробовать, хотя там по умолчанию должен стоять в 1
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 14 2012, 13:38
Сообщение #12


Гуру
******

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



ТС так и не сказал: как определяет, что программа не читает порт...

Попробовал прикрепленный выше проект на версии Keil 9.01 - всё работает...


Go to the top of the page
 
+Quote Post
schulgin
сообщение May 14 2012, 13:40
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 27-06-07
Пользователь №: 28 739



Цитата(Палыч @ May 14 2012, 16:01) *
Чтобы читать что-то с ноги МК51 нужно выдать в соответствующий бит порта единицу.

Вот тут-то и надо не коментить, а изменить на
Код
pusk = 1;

Палыч, спасибо. Попробовал, ничего хорошего не получил. Палыч, Коля, если не трудно, то покажите, пожалуйста, кусок текста или исправьте мой, как правильно, который "железно" работает у Вас. Может это действительно глюк отладчика кейла. Использую Keil4.0
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 14 2012, 16:53
Сообщение #14


Гуру
******

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



Цитата(schulgin @ May 14 2012, 17:40) *
Палыч, Коля, если не трудно, то покажите, пожалуйста, кусок текста или исправьте мой, как правильно, который "железно" работает у Вас.

Вы писали, что строку "pusk = 0;" - закоментировали. Так вот, если это действительно сделать (закоментировать), то строка 68 "if (pusk)" правильно работает в соответствии с установкой "Pins" окне "Parallel Port 0" !

Что у Вас ещё не "работает"? Ещё раз повторюсь: чтобы читать что-то с ноги МК51 нужно чтобы в соответствующем бите порта была единица. Эти единицы помещаются туда по сбросу МК. Вы же зачем то заносите туда нули.
Go to the top of the page
 
+Quote Post
Kolia
сообщение May 14 2012, 21:49
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762




У меня в uV3 все четко работает...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:09
Рейтинг@Mail.ru


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