Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.10.2010, 14:01
|
|
Прохожий
Регистрация: 23.09.2010
Сообщений: 8
Сказал спасибо: 2
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Прерывания PIC
Пытаюсь разобраться с прерывания. Выбрал 16F84A и пытаюсь моделировать в протеусе. Поставил задачу: при нажатии на кнопочку светодиод загорается и тухнет через небольшое время (около 0.5 секунды). Использую RB0/INT как источник внешнего прерывания. На RA0 висит светодиод. Код
Код:
|
;================================================= ========================
; Конфигурация
;================================================= ========================
LIST P=16F84A ; устанавливаем тип МК
#include p16F84A.inc ; подключаем шапку
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC ; конфигурация МК
;================================================= ========================
; Описание регистров общего назначения
;================================================= ========================
W_backup EQU 0x20 ; копия аккумулятора
S_backup EQU 0x21 ; копия регистра статус
Dig1 EQU 0x22 ; младший разряд индикатора
Dig2 EQU 0x23 ; 2 разряд индикатора
Dig3 EQU 0x24 ; 3 разряд индикатора
Dig4 EQU 0x25 ; старший разряд индикатора
Rank EQU 0x26 ; номер разряда
Delay EQU .255 ; задержка
Counter EQU 0x28 ; счеьтчик
;================================================= ========================
; Программа
;================================================= ========================
ORG 0x00
GOTO Main
;================================================= ========================
; Подпрограммы и прерывания
;================================================= ========================
ORG 0x04
MOVWF W_backup ; сохранение текущего значения аккумулятора
MOVF STATUS,w ; помещаем регистр STATUS в аккумулятор
MOVFW S_backup ; схраняем значение регистра STATUS
MOVLW Delay
MOVWF Counter
BSF PORTA,0 ; высокий уровень на 0 ноге порта а
wwww DECFSZ Counter
GOTO wwww
MOVF S_backup,w ; возвращаем значения регистра STATUS
MOVWF STATUS
SWAPF W_backup,f
SWAPF W_backup,w
BCF INTCON,INTE ; запрещаем прерывание на RB0
RETFIE ; уход из прерывания
;================================================= ==========================
; Главный цикл
;================================================= ==========================
Main BSF STATUS,5 ; идем в 1 банк
BSF INTCON,7 ; разрешаем прерывания
BSF INTCON,4 ; разрешаем прерывания по INT
MOVLW .1
MOVWF TRISB ; порт В на вход
BCF TRISA,0 ; 0 вывод порта А на выход
BSF OPTION_REG,6 ; Прерывание на RB0 по переднему фронту
BSF INTCON,4 ; Разрешаем внешнее INT прерывание
BCF STATUS,5 ; идем в 0 банк
CLRF PORTA ; 0 на всех входах порта А
NOP ; Ждем прерывание по кнопочке
GOTO Main
end |
Не работает зараза =( Направьте на путь истинный =)
|
|
|
Сказали "Спасибо" milssky
|
|
|
09.10.2010, 15:22
|
|
Заблокирован
Регистрация: 23.08.2010
Сообщений: 541
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
|
Re: Прерывания PIC
А по идее должно быть так
Код:
|
Loop:
NOP
GOTO Loop
end |
И ещё... возьмите за правило... сначала все настройки портов, периферии и прерываний, а потом уже разрешение прерываний... в самую последнюю очередь... а первой командой в Main - запрет всех прерываний...
Последний раз редактировалось аtаs_stas; 09.10.2010 в 15:30.
|
|
|
Сказали "Спасибо" аtаs_stas
|
|
|
09.10.2010, 16:34
|
|
Прохожий
Регистрация: 23.09.2010
Сообщений: 8
Сказал спасибо: 2
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Прерывания PIC
Все равно не работает =(
Код:
|
;================================================= ========================
; Программа
;================================================= ========================
ORG 0x00
GOTO Main
;================================================= ========================
; Подпрограммы и прерывания
;================================================= ========================
ORG 0x04
MOVWF W_backup ; сохранение текущего значения аккумулятора
MOVF STATUS,w ; помещаем регистр STATUS в аккумулятор
MOVFW S_backup ; схраняем значение регистра STATUS
MOVLW Delay
MOVWF Counter
BSF PORTA,0 ; высокий уровень на 0 ноге порта а
wwww DECFSZ Counter
GOTO wwww
MOVF S_backup,w ; возвращаем значения регистра STATUS
MOVWF STATUS
SWAPF W_backup,f
SWAPF W_backup,w
BCF INTCON,INTE ; запрещаем прерывание на RB0
RETFIE ; уход из прерывания
;================================================= ==========================
; Главный цикл
;================================================= ==========================
Main BCF INTCON,7 ; запрещаем все прерывания
BSF STATUS,5 ; идем в 1 банк
MOVLW .1
MOVWF TRISB ; порт В на вход
MOVLW .0
MOVWF TRISA ; выводы порта А на выход
BCF STATUS,5 ; идем в 0 банк
CLRF PORTA ; 0 на всех входах порта А
CLRF PORTB ; ---------------------- B
BSF INTCON,7 ; разрешаем прерывания
BSF INTCON,4 ; разрешаем прерывания по INT
BSF OPTION_REG,6 ; Прерывание на RB0 по переднему фронту
Loop NOP ; Ждем прерывание по кнопочке
GOTO Loop
end |
Хотя по идее должно. Может я где-то туплю?
|
|
|
Сказали "Спасибо" milssky
|
|
|
09.10.2010, 16:48
|
|
Заблокирован
Регистрация: 23.08.2010
Сообщений: 541
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
|
Re: Прерывания PIC
RB0 подтяните к земле через сопротивление 10кОм, а кнопку к + питания через 270 Ом...
|
|
|
Эти 2 пользователя(ей) сказали Спасибо аtаs_stas за это сообщение:
|
|
|
09.10.2010, 17:02
|
|
Прохожий
Регистрация: 23.09.2010
Сообщений: 8
Сказал спасибо: 2
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Прерывания PIC
Заработало. Спасибо огромное. Подтяжки нужны чтобы точно определить начальный уровень на ножке?
|
|
|
Сказали "Спасибо" milssky
|
|
|
09.10.2010, 18:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Прерывания PIC
А не проще подтяжку вывода к VDD , а кнопку на вывод и на землю напрямую ?!
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
09.10.2010, 18:43
|
|
Прохожий
Регистрация: 23.09.2010
Сообщений: 8
Сказал спасибо: 2
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Прерывания PIC
да может и проще Объясните на кой вообще подтяжки?)
|
|
|
Сказали "Спасибо" milssky
|
|
|
09.10.2010, 18:46
|
|
Заблокирован
Регистрация: 23.08.2010
Сообщений: 541
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
|
Re: Прерывания PIC
Тоже хотел дать такой совет... а вдруг у него там не кнопка... а кнопкой в Протэзе эмулирует какой-то сигнал...
"на землю напрямую"... он сейчас в Протэзе, а через пять минут с железом... неправильная настройка на выход с единицей и... кнопкой на землю... "PIC гавно, пошёл покупать AVR..." ....
Уж лучше пусть сопрот 270 Ом поставит...
|
|
|
Сказали "Спасибо" аtаs_stas
|
|
|
09.10.2010, 18:48
|
|
Заблокирован
Регистрация: 23.08.2010
Сообщений: 541
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
|
Re: Прерывания PIC
|
|
|
Сказали "Спасибо" аtаs_stas
|
|
|
09.10.2010, 19:14
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Прерывания PIC
аtаs_stas, Понял , предохраняешься значит.
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Помогите с PIC 16F873 и прерыванием по RB0
|
BorisVV |
Микроконтроллеры, АЦП, память и т.д |
9 |
02.10.2010 23:58 |
Вопросы MikroC + PIC
|
Vladimir-SV |
Микроконтроллеры, АЦП, память и т.д |
9 |
30.07.2010 13:53 |
Прерывания в прерываниях ATmega8
|
7Fantomas7 |
Микроконтроллеры, АЦП, память и т.д |
35 |
07.07.2010 10:12 |
Вложенные прерывания HITECH PIC16
|
picavr |
Микроконтроллеры, АЦП, память и т.д |
17 |
07.03.2010 17:39 |
Вход в прерывания для PIC микроконтроллеров
|
dimmich |
Микроконтроллеры, АЦП, память и т.д |
4 |
06.12.2009 17:17 |
Часовой пояс GMT +4, время: 09:53.
|
|