Прерывание для клавиатуры

Учебный лабораторный комплекс SDK-1.1 на базе микроконтроллера ADuC812 с ядром MCS51 # RS-232C, I2C

Прерывание для клавиатуры

Сообщение ilya » 20 июн 2011, 15:28

Помогите пожалуйста настроить прерывание для клавиатуры. А то что-то я запутался:
Главная функция:
http://pastebin.com/YjR9y9UA
Функция leds:
http://pastebin.com/rydBJhF8
Функция writeor:
http://pastebin.com/EhmM4y0Q
Возможно, что проблема кроется в настройке регистра ENA(см. в первой ссылке). При присваивании ему разных значений программа либо никак не реагирует на нажатие на клавиатуре, либо сразу переходит в режим прерывания(функция klava) и не выходит из него. Программа написана на основе лабораторной работы со светодиодами.
ilya
 
Сообщения: 8
Зарегистрирован: 08 фев 2011, 21:12

Re: Прерывание для клавиатуры

Сообщение DinKa » 20 июн 2011, 16:26

У Вас полная конфигурация ПЛИС в стенде (определяется по значению регистра клавиатуры после сброса)?
Если полная, то Вам нужно разобраться в том, как работать с внешними прерываниями. По умолчанию (после сброса) INT0 работает по уровню, а не по спаду - а Вам как раз и нужно последнее - поэтому у Вас программа и застревает в обработчике прерывания INT0. Полный ответ на Ваш вопрос смотрите здесь (с. 206).
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Прерывание для клавиатуры

Сообщение ilya » 20 июн 2011, 17:02

Спасибо за ссылку:)
Основываясь на данных материалах, я и писал свою лабораторную.
В своём сообщении вы упоминали о конфигурации стенда. Как её определить(Если не трудно, приведите пожалуйста код определения)?
И какие значения должен принимать регистр ENA в разных конфигурациях?
ilya
 
Сообщения: 8
Зарегистрирован: 08 фев 2011, 21:12

Re: Прерывание для клавиатуры

Сообщение User239 » 20 июн 2011, 18:26

DinKa писал(а):Полный ответ на Ваш вопрос смотрите здесь (с. 206).

Спасибо за ссылку! Я смотрю с прошлого года появилось много нового и интересного. Приятно видеть, что пособие развивается :good:
User239
 
Сообщения: 45
Зарегистрирован: 23 май 2008, 23:53

Re: Прерывание для клавиатуры

Сообщение DinKa » 21 июн 2011, 00:57

ilya писал(а):В своём сообщении вы упоминали о конфигурации стенда. Как её определить?

Используйте функции write_max и read_max соответственно для записи и чтения младшей тетрады регистра KB ПЛИС.
Если при старте программы записать в тетраду COL регистра KB ненулевое значение, а затем его считать, то в полной конфигурации будет считано записанное значение, а в упрощенной – нули.
Ключев, А.О., Ковязина Д.Р., Кустарев, П.В., Платунов, А.Е. Аппаратные и программные средства встраиваемых систем, c. 206

Посмотрите, пожалуйста, внимательнее на инициализацию регистра специального назначения TCON. Просто поработайте с внешними прерываниями без клавиатуры - помогут Вам в этом соответствующие DIP-переключатели (SW3) и светодиоды. А потом уже переходите к клавиатуре.
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Прерывание для клавиатуры

Сообщение ilya » 26 июн 2011, 21:44

Большое спасибо за советы:)
Прерывание от клавиатуры наконец-то заработало(Лишь после того, как в начале программы в регистр КВ стал записывать значение 0х60).
Однако появилась следующая проблема:
В процессе отладки выяснилось, что мой SDK имеет упрощённую конфигурацию ПЛИС. Можно её как-нибудь заменить на полную? Или надо брать другой стенд?
ilya
 
Сообщения: 8
Зарегистрирован: 08 фев 2011, 21:12


Вернуться в SDK 1.1

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron