|
как прочесть порт |
|
|
|
May 12 2012, 16:00
|
Участник

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

|
Отлаживаю в Кейле с помощью симулятора программу. Цифровые выходы обозначил битовыми пременными например так "sbit rabota = P2^0;" Всё хорохо, когда пишу в порт, но когда пытаюсь использовать этот идентификатор в какой ни буть операции, например, "if (rabota)" или просто его присвоить другой переменной ничего не получается. Компилируется без ошибок, а операции или присвоения не выполняются. Пытался это сделать с помощью маскировки порта, например "P2 & 0x01" та же самая история по отдельности все значения просматриваются, а результат другой. Промучился почти целый день, а результат ноль. Уж очень достало, помогите!!!
|
|
|
|
|
May 14 2012, 08:35
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
May 14 2012, 09:40
|
Участник

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

|
Цитата(Kolia @ May 14 2012, 12:09)  Меня смущает эта строчка
pusk = 0;
фактически вы подключили порт к земле.... "pusk = 0;" закоментировал, результат не изменился, но задался вопросом:"Если я хочу поуправлять состоянием входа, то в окошке Parallel Port отладчика должен пользоваться строкой Pins:, а не P0:?"
|
|
|
|
|
May 14 2012, 10:07
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
May 14 2012, 10:44
|
Участник

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

|
Большое спасибо Бельченко. Собственно, прочитав его статьи, я и смог программировать эти микроконтроллеры. Указанная статья мне ещё пригодиться, но в примере нет того, как прочитать вход. Сдаётся мне, что я не знаю какой-то тривиальщины. Всё же, почему в моей программе строка 68 не работает?
|
|
|
|
|
May 14 2012, 12:34
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

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

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

|
Коля, когда Вы сказали, что можно и логический анализ использовать, то что имелось ввиду?
|
|
|
|
|
May 14 2012, 13:01
|

Гуру
     
Группа: Свой
Сообщений: 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;
|
|
|
|
|
May 14 2012, 13:21
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

|
Цитата(schulgin @ May 14 2012, 15:41)  Коля, когда Вы сказали, что можно и логический анализ использовать, то что имелось ввиду? В кейле есть логический анализатор. Есть еще watchdog его тоже можно использовать для просмотра значения порта... Цитата(Палыч @ May 14 2012, 16:01)  Чтобы читать что-то с ноги МК51 нужно выдать в соответствующий бит порта единицу. Вот тут-то и надо не коментить, а изменить на Код pusk = 1; Можно попробовать, хотя там по умолчанию должен стоять в 1
|
|
|
|
|
May 14 2012, 13:40
|
Участник

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

|
Цитата(Палыч @ May 14 2012, 16:01)  Чтобы читать что-то с ноги МК51 нужно выдать в соответствующий бит порта единицу. Вот тут-то и надо не коментить, а изменить на Код pusk = 1; Палыч, спасибо. Попробовал, ничего хорошего не получил. Палыч, Коля, если не трудно, то покажите, пожалуйста, кусок текста или исправьте мой, как правильно, который "железно" работает у Вас. Может это действительно глюк отладчика кейла. Использую Keil4.0
|
|
|
|
|
May 14 2012, 16:53
|

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

|
Цитата(schulgin @ May 14 2012, 17:40)  Палыч, Коля, если не трудно, то покажите, пожалуйста, кусок текста или исправьте мой, как правильно, который "железно" работает у Вас. Вы писали, что строку "pusk = 0;" - закоментировали. Так вот, если это действительно сделать (закоментировать), то строка 68 "if (pusk)" правильно работает в соответствии с установкой "Pins" окне "Parallel Port 0" ! Что у Вас ещё не "работает"? Ещё раз повторюсь: чтобы читать что-то с ноги МК51 нужно чтобы в соответствующем бите порта была единица. Эти единицы помещаются туда по сбросу МК. Вы же зачем то заносите туда нули.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|