|
Программирование MCS-51, Настройка портов на ввод |
|
|
|
Jan 2 2012, 18:23
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Ребят, тут такая ситуация, написал код для программы, вроде синтаксически правильный и т.д. Но при этом не работал. Подкинули идею, что я не настроил порты на ввод и вывод.. Тут с прискорбием пришлось признать, что я не в курсе как это делается.. Знаю, что это основы, но видать прослушал на лекциях. помню что-то про установление единицы в фиксатор, но не знаю, как сделать. Собственно, сам код. Код SJMP BEGIN ORG 0000h BEGIN: MOV P1,#00001000b M4: MOV A,#00000000b JNB P1.0,M1 INC A M1: JNB P1.1,M2 INC A M2: JNB P1.2,M3 INC A M3: JZ M4 MOV P1,#00000000b DJNZ A,M5 DJNZ A,M6 MOV P1#01000000b SJMP M4 M5: MOV P1,#00010000b SJMP M4 M6: MOV P1,#00100000b SJMP M4 END
Сообщение отредактировал Jead - Jan 2 2012, 18:25
|
|
|
|
|
Jan 2 2012, 19:17
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Jead @ Jan 2 2012, 21:23)  Ребят, тут такая ситуация, написал код для программы, вроде синтаксически правильный и т.д. Но при этом не работал. Подкинули идею, что я не настроил порты на ввод и вывод.. Тут с прискорбием пришлось признать, что я не в курсе как это делается.. Знаю, что это основы, но видать прослушал на лекциях. помню что-то про установление единицы в фиксатор, но не знаю, как сделать. Давно дело было, не хочу выдумывать. Посмотрите книжечку Урусова: http://lord-n.narod.ru/walla.html
|
|
|
|
|
Jan 2 2012, 21:20
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Цитата(Harbinger @ Jan 2 2012, 23:19)  Озвучьте конкретную модель микроконтроллера. В классических интеловских 51 порты были квазидвунаправленными и, чтобы линия работала на ввод, было достаточно записать 1 в соответствующий бит регистра порта. Но во всевозможных деривативах другая ситуация, имеются дополнительные регистры для задания режимов работы портов, при этом у каждого производителя своя идеология... Классический..
|
|
|
|
|
Jan 9 2012, 11:13
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Спасибо! Т.е, если мне надо настроить все разряды на ввод это будет выглядеть как orl P1,#11111111b?
|
|
|
|
|
Jan 11 2012, 12:17
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Глупый вопрос задал, извиняюсь... А на вывод как настроить, не подскажете? Или они уже настроены, т.к. 0 стоит?
Сообщение отредактировал Jead - Jan 11 2012, 12:18
|
|
|
|
|
Jan 11 2012, 15:30
|

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

|
Цитата(Jead @ Jan 11 2012, 16:17)  Глупый вопрос задал, извиняюсь... А на вывод как настроить, не подскажете? Или они уже настроены, т.к. 0 стоит? 1. При выдачи нолика в регистр порта открывается ключ, соединяющий землю с ногой порта, - на выходе имеем низкий потенциал. При выдаче единицы, ключ закрыт, через Pull-Up резистор на ноге порта появляется высокий потенциал. 2. При чтении регистра порта читается фактическое состояние уровня сигнала на ноге порта. 3. П.2 действителен, и неважно откуда взялся низкий уровень на ноге порта: через ключ или "навалился" извне. Что, собственно, позволяет использовать порт для ввода выдав в регистр порта единицу!
P.S. Т.е. при использовании порта для ввода: выдаём единицу (закрываем ключ) и контролируем (читаем) состояние - ноль может появиться, если низкий уровень будет подан на ногу извне!
|
|
|
|
|
Jan 13 2012, 09:38
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Все равно что-то возмущается... на этот раз на SJMP BEGIN.. Illegal mnemonic. Когда в машинные коды переводит... До этого вроде не было, быть может программа глючит просто? Полный код Код SJMP BEGIN ORG 0000h BEGIN: ORL P1,#00000111b MOV P1,#00001000b M4: MOV A,#00000000b JNB P1.0,M1 INC A M1: JNB P1.1,M2 INC A M2: JNB P1.2,M3 INC A M3: JZ M4 MOV P1,#00000000b DJNZ A,M5 DJNZ A,M6 MOV P1,#01000000b SJMP M4 M5: MOV P1,#00010000b SJMP M4 M6: MOV P1,#00100000b SJMP M4 END
|
|
|
|
|
Jan 13 2012, 10:56
|

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

|
Цитата(Jead @ Jan 13 2012, 13:38)  Все равно что-то возмущается... Уж, не знаю - что это у Вас транслятор возмущается? Но, не вникая в то, что должна делать Ваша программа, вижу ошибки: 1. Поменять местами первые две строки. 2. Команда DJNZ (строки 18, 19) первым операндом должна иметь один из регистров R0-R7 или ячейку ОЗУ. У Вас же в этой команде - аккумулятор. Да, вот ещё несуразица: Код BEGIN: ORL P1,#00000111b MOV P1,#00001000b Первая из этих команд - безсмысленна: следующая команда "перетрёт" (сбросит в ноль) установку последних трёх бит регистра Р1
|
|
|
|
|
Jan 13 2012, 11:36
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Менял первые 2 строки местами, все равно ругается. А по поводу несуразицы, как тогда настроить порты на ввод, чтоб потом было возможно обнулить все порты?
|
|
|
|
|
Jan 13 2012, 12:56
|

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

|
Цитата(Jead @ Jan 13 2012, 15:36)  Менял первые 2 строки местами, все равно ругается. Может быть, Вы что-то изменили в опциях проекта? Попробуйте создать проект заново... Цитата(Jead @ Jan 13 2012, 15:36)  А по поводу несуразицы, как тогда настроить порты на ввод, чтоб потом было возможно обнулить все порты? Не понятно: что вы хотите сделать? Зачем обнулять все порты коль они настроены на ввод? Попробуйте сформулировать вопрос по-другому. Цитата(MaslovVG @ Jan 13 2012, 16:08)  А раве BEGIN не является зарезервировим словом и может использоватся в качестве имени метки? Это у ТС нужно узнать: каким компилятором он пользуется? У Keil такого зарезервированного слова нет.
|
|
|
|
|
Jan 13 2012, 13:19
|
Группа: Участник
Сообщений: 12
Регистрация: 30-10-11
Пользователь №: 68 056

|
Ну не совсем обнулять, а скажем послать в него определенную комбинацию, н-р: MOV P1,#01000000b.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|