Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.01.2005, 02:10
|
|
RETAS
Гость
|
PIC16F84A???
Уважаемый DK!
Большое вам спасибо за разьяснения о прерываниях,но,как говорится,
углубление в лес,ровносильно увеличению количеству дров и,в потверждение
этого,у меня опять вопросы и надежда на помощь
1. Предназначение выражения ORG.Я сумел понять,что им указывается начало программы
и вектор прерываний,но,скажем,в одной и програм стоит ORG 5.Что это даёт?
2. Есть ли возможность в PICе зафиксировать факт,что на заданный порт
поступал импульс и эта информация сохранялась немешая основной программе,
а после проверке стиралась?
3. Как определить с помощью PICа-кратковременно или долго нажымалась кнопка?
Спасибо.
|
|
|
|
27.01.2005, 14:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: PIC16F84A???
Сообщение от RETAS
|
1. Предназначение выражения ORG
|
Все очень просто. ORG 5 - означает, что данный блок программы размещается в памяти начиная с адреса 5.
Сообщение от RETAS
|
2. Есть ли возможность в PICе зафиксировать факт,что на заданный порт поступал импульс и эта информация сохранялась немешая основной программе, а после проверке стиралась?
|
Можно. Пишешь обработчик прерывания от изменения состояния порта и пишешь в любую переменную флажок. Или, если нужно хранение этой инфы при отключении питания, пишешь в ППЗУ.
Сообщение от RETAS
|
3. Как определить с помощью PICа-кратковременно или долго нажымалась кнопка?
|
Просто считай количество циклов опроса при замкнутой кнопке. А после размыкания сравнивай с константой - если меньше, значит кратковременное замыкание было. Или системный таймер запускай и читай из него.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
27.01.2005, 23:26
|
|
li$ergin
Гость
|
Для примера могу подкинуть как я с этим боролся, с оп\тлавливанием длинного нажатия
...
unpres bcf flags, 2 ;да, это не дребезг....
movlw 0xFF
movwf keyprleng ;инициализируем младшее слово аккумулятора длиного нажатия
movlw 0x03 ;инициализируем старшее слово
movwf keyprlengh ;аккумулятора
return
press btfsc flags, 2 ;текущее нажатие было отработано?
goto islong ;да, определим, длинное ли нажатие
;********обработка единичного нажатия 1-й кнопки**********
btfss flags, 1 ;текущий режим-ручной?
goto but2auto ;нет, авторежим, соответственно реагируем
movlw .0
subwf effect, w
btfsc STATUS, Z ;эффект бегущий огонь?
goto needshad ;да, пропускаем сдвиг
call in_c_0
rlf effect, f ;нет, двигаем единичку
bsf flags, 2 ;ставим флаг - кнопка отработана
return
needshad bsf effect, 0 ;включаем бегущий огонь, так как простой сдвиг ничего не даст
bsf flags, 2 ;ставим флаг - кнопка отработан
return
islong decfsz keyprleng, f ;уменшаем на 1 аккумулятор нажатий без отпускания
return ;было ли ровно hFF нажатий?
decfsz keyprlengh, f ;да, уменшаем старшее слово аккумулятора
return
movlw b'00000010' ;инвертируем флажек
xorwf flags, f ;автообработки
btfsc flags, 1 ;Ручное переключение?
bcf PORTA, 0
btfss flags, 1
bsf PORTA, 0
bsf flags, 2
movlw 0xFF ;инициализируем
movwf keyprleng ;оба слова
movlw 0x03 ;аккумулятора
movwf keyprlengh ;длинного нажатия
return
может и несколько кривовато, за то, по-моему, понятно...
|
|
|
|
16.02.2005, 21:19
|
|
RETAS
Гость
|
О том, что ORG указывает по какому адресу направится программе,
мне понятно, но непонятно когда и какой адрес указывать.Взгляните,
пжл., на програмку бегущих огней www.interq.or.jp/japan/se-inoue/e_pic6_15.htm
и помогите разобраться для чего там стоит ORG 5 и в каком случаи
программа очутится на этом месте.
Зайти на этот сайт японца рекомендую всем начинающим знакомство
с PICами.
Спасибо.
|
|
|
|
24.02.2005, 12:21
|
|
Прописка
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
ORG указывает НЕ по какому адресу направиться программе, (это указывает goto), а указывает компилятору по какому адресу в памяти программ будет размещена следующая за ORG команда. Вот тут например у японца:
org 4 ;Interrupt Vector
goto init
;**************** Initial Process *********************
org 5
init bsf status,rp0 ;Change to Bank1
movlw h'ff' ;Set input mode data
movwf trisa ;Set PORTA to Input mode
по адресу 0004 (ORG 4) размещается команда goto init
а вот ORG 5 здесь по сути вообще никакого смысла не имеет, потому что следующая команда (bsf status,rp0) и без него размещалась бы по адресу 5, так как идет следом за командой goto init. ORG используется тогда, когда нужно разместить кусок программы строго по заданному адресу в области программ.
|
|
|
|
03.03.2005, 09:20
|
|
RETAS
Гость
|
Большое спасибо за долгожданный ответ, я уж, было, думал - недождусь.
ВСЕМ! ВСЕМ! ВСЕМ! У вас есть вопросы ? Спрашываите - ну очень мала вероятность, что вам неответят.
А у меня опять хватает наглости из-за благосклонности КАЗУСА задать очередной детский вопрос об этих
ORG-ах( будьте любезны, если ещё терпимо):
если я указал с помощью ORG начало программы и адрес возврата из прерываний,то есть ли какие ещё
другие случаи когда необходимо указывать строгие адреса?
Спасибо.
|
|
|
|
03.03.2005, 15:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
[quote="RETAS"]Большое спасибо за долгожданный ответ, я уж, было, думал - недождусь.
ВСЕМ! ВСЕМ! ВСЕМ! У вас есть вопросы ? Спрашываите - ну очень мала вероятность, что вам неответят.
А у меня опять хватает наглости из-за благосклонности КАЗУСА задать очередной детский вопрос об этих
ORG-ах( будьте любезны, если ещё терпимо):
Цитата:
|
если я указал .... адрес возврата из прерываний
|
а это еще зачем? Стека тебе недостаточно?
Цитата:
|
есть ли какие ещё другие случаи когда необходимо указывать строгие адреса?
|
Да нет, пожалуй... В ORG есть необходимость, если размещаешь обработчик прерываний (ORG 4). Ну еще может возникнуть такая необходимость при размещении блока данных, чтоб не перейти через границу сегмента (для простоты выборки).
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
04.03.2005, 05:20
|
|
Прописка
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Цитата:
|
я указал с помощью ORG начало программы и адрес возврата из прерываний,
|
Что значит адрес возврата из прерывания ? Он ведь каждый раз разный и хранится в стеке. Сама суть прерывания в чем? В том, что где программа прервала свой ход, именно туда она должна и вернуться после отработки процедуры прерывания. Другое дело, что адрес начала процедуры прерывания должен быть указан жестко (0004), но это для данного типа контроллера, у других он может быть нефиксированным. А также как сказал уважаемый DK, ORG полезно использовать при размещении блока данных.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
PIC16F84A и MT-16S2D
|
Runtime_error |
Микроконтроллеры, АЦП, память и т.д |
2 |
09.05.2007 19:18 |
Pic16f84a VS Assembler
|
tuart |
Микроконтроллеры, АЦП, память и т.д |
2 |
11.04.2007 23:19 |
PIC16F84A документацыя
|
макс |
Микроконтроллеры, АЦП, память и т.д |
3 |
11.12.2005 14:03 |
PIC16F84A
|
макс |
Микроконтроллеры, АЦП, память и т.д |
1 |
11.12.2005 00:01 |
pic16f84a
|
khorght |
Микроконтроллеры, АЦП, память и т.д |
1 |
09.09.2004 20:37 |
Часовой пояс GMT +4, время: 19:19.
|
|