Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.06.2007, 13:13
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
PIC12F675 снова вопросы.
Добрый день Всем. Раскажите пож. как обрабатывать прерывания от устройств (АЦП, таймеры, вывод INT)? Собрал файлик, подключил TMR1 по переполнению прерывание и дальше вкл/выкл на GP5 светодиод. Привожу текст:
;-----------------------------------------------
list p=12F675
#include "p12F675.inc"
__CONFIG _INTRC_OSC_NOCLKOUT & _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF
cl1 equ 0x34
cl2 equ 0x35
cl3 equ 0x36
cl4 equ 0x37
cl5 equ 0x38
cl6 equ 0x39
org 0x0000
reset goto start
start bcf STATUS, RP0 ; Выбрать банк 0
; clrwdt ; Очистка WDT
clrf GPIO ; Инициализация защелок GPIO
movlw 0x07 ;компаратор выключить
movwf CMCON ;каналы GPIO-цифровые входы/выходы
clrf ADCON0
bsf STATUS, RP0 ;Выбрать банк 1
movlw 0x02 ;
movwf ANSEL ;
movlw 0xd0 ;Сбрасываем флаги, и разрешаем все
movwf INTCON ;прерывания, кроме TMR0
movlw 0x47 ;Прерывание по переднему фронту INT,
movwf OPTION_REG ;вкл. подтяг. резюки, предделитель перед TMR0
movlw 0x0f ;GP4,GP5 - out; GP0-GP3 - in
movwf TRISIO ;
movlw 0xff ;Установим максимальное значение
movwf OSCCAL ;для внутреннего генератора
clrf WPU
bsf WPU, 1 ;вкл. подтягивающий резистор на GP1
clrf IOCB ;запретить прерывания по изменению входного уровня на GP0-GP3
;Конфигурируем TMR1
bcf STATUS, RP0 ;Выбрать банк 0
; clrwdt ; Очистка WDT
clrf TMR1H ;Очистить счетчик Н
clrf TMR1L ;Очистить счетчик L
movlw 0xff ;
movwf TMR1H ;
movlw 0xfd ;
movwf TMR1L ;
movlw 0x31 ;установим предделитель
movwf T1CON ;для таймера TMR1 (11)
bsf STATUS, RP0 ;Выбрать банк 1
bsf PIE1, TMR1IE ;разрешаем прерывание
bsf INTCON, PEIE ;по переполнению
bsf INTCON, GIE ;таймера TMR1
bcf STATUS, RP0 ;Выбрать банк 0
bcf PIR1, TMR1IF ;сброс флага переполнения TMR1
int_t1 btfss PIR1, TMR1IF ;проверка флага переполнения
goto int_t1 ;
bcf PIR1, TMR1IF ;
btfss GPIO, GP5 ;
bsf GPIO, GP5 ;
bcf GPIO, GP5 ;
goto int_t1 ;
End
;--------------------------------------------------
Когда установится флаг TMR1IE (в пошаговом режиме) курсор сразу переходит на 21 строку. Растолкуйте чайнику как работают с прерываниями?
С уважением Геннадий.
|
|
|
|
05.06.2007, 15:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Правильно переходит, на 4 адрес (кажется)
Сам забыл, давно не работал в асме - а в си над этим не задумываешься. Где само прерывание (обработчик ???)
http://www.microchip.ru/lit/?mid=1x0
Здесь - на русском литература
|
|
|
|
05.06.2007, 16:10
|
|
Гражданин KAZUS.RU
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Сообщение от urry
|
Правильно переходит, на 4 адрес (кажется)
Сам забыл, давно не работал в асме - а в си над этим не задумываешься. Где само прерывание (обработчик ???)
http://www.microchip.ru/lit/?mid=1x0
Здесь - на русском литература
|
Да на 4.Вы должны на адр 4 поместить GOTO на программу обработки прерывания.У вас на 4 сидит что то другое поэтому проц бесится.В описании на любой пик есть болванка на обработку прерывания.Посмотрите,для обработки одного прерывания там все нормально написано.Обратите внимание с тем ли банком вы заходите на обработку и стем ли выходите.
|
|
|
|
06.06.2007, 00:06
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
urry, спасибо за ссылку на доку, с утра займусь. Это чо на каждое прерывание(от разных устройств) есть свой адрес перехода? Для TMR1 -› 4 адрес. Ладно почитаем доку. Спасибо всем.
С уважением Геннадий.
|
|
|
|
06.06.2007, 00:26
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от Faworit
|
Это чо на каждое прерывание(от разных устройств) есть свой адрес перехода?
С уважением Геннадий.
|
Называется таблица векторов прерываний. Когда срабатывает прерывание, программа скачет в начало, в эту самую таблицу, а дальше на метку соответствующего прерывания... во всяком случае так для AVR.
|
|
|
|
06.06.2007, 01:39
|
|
Частый гость
Регистрация: 22.12.2006
Сообщений: 31
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
И земляк, и тезка...
Уважаемый, ну это везде написано. Я понимаю, конечно, что проще спросить. Лентяй Вы.
Вектор прерывания в ПИКах один, он располагается по адресу 4, а далее ручками перебираете, что сработало.
Записи в CMCON семерки достаточно для того, чтобы рассказать камню, что компараторы с АЦП вам не нужны.
Зачем левое значение для внутреннего генератора? В большинстве случаев его при первом программировании нужно сохранить, особенно в условии отсутствия осциллографа, при этом следует помнить, что самым надежным, долговечным и с хорошей системой восстановления информации источником является бумага.
Цитата:
|
btfss GPIO, GP5 ;
bsf GPIO, GP5 ;
bcf GPIO, GP5 ;
|
Что Вам дает этот кусок? Проще bcf GPIO, GP5.
Да там еще пару вещей, ну ничего, было бы желание...
Вывод: очень внимательно, очень много и очень часто читать ТУ. Думать головой. Юзать симуляторы, а еще лучше паяльник с макеткой. Выкладывать кусок программы используя тег "code".
Удачи!
__________________
Ничто так не говорит об отсутствии доказательств, как слова: бесспорно, очевидно, общеизвестно...
|
|
|
|
06.06.2007, 11:03
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
lisergin_, по поводу лени, возможно вы правы, хотя тут можно и спорить но это будет лиш тратой времени. Ассемблером занимаюсь недавно и многое мне еще ... но я учусь и не стоит сильно браниться на чайников за их "глупые" вопросы.
urry, спасибо за ссылку, НАШОЛ!!!
С уважением Геннадий.
|
|
|
|
06.06.2007, 11:12
|
|
Частый гость
Регистрация: 22.12.2006
Сообщений: 31
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Обиделись? Дело Ваше.
Жаль, что зря старался обратить Ваше внимание на то, как не надо делать.
Пожалуйста.
Кстати, ругать не собирался, написал что думал.
Удачи!
__________________
Ничто так не говорит об отсутствии доказательств, как слова: бесспорно, очевидно, общеизвестно...
|
|
|
|
06.06.2007, 16:40
|
|
Частый гость
Регистрация: 05.05.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
во-первых, ТО это хорощо! Популярно: 1. Настроить соответствующие порты на ввод записью в TRISIO 1.
2. Отключить компараторы - записать соответствующие биты в CMCON.
3. Настроить ADCON0 (регистр АЦП).
4. Настроить ANSEL
и т.д.
даю готовую программу настройки для АЦП - GP2.
Посмотри ТО!
5. Флаги прерываний - это которые оканчиваются на F устанавливаються независимо от битов разрешения прерываний - это которые оканчиваються на Е. Все это в принципе описано в ТО. И биты F - должны сбрасыватся программно!!
Прикрепленный файл: 1606987.zip
|
|
|
|
07.06.2007, 13:58
|
|
Частый гость
Регистрация: 21.08.2006
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
От себя добавлю, что хорошо бы при входе в прерывание (аппаратно генерируется call 0x4 по поднятию соотв. флага. Попутно, тоже аппаратно запрещаются все прерывания) сохранить W и статус:
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
а после обработки(перед RETI) восстановить:
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
(xx_temp - 2 регистра для сохранения).
Задача обработчика - просканировать флаги разрешенных прерываний и выполнить переход на соответствующую процедуру. После обработки прерывания необходимо вручную сбрасывать флаг. Сам он не падает. По RETI глобальные прерывания разрешаются автоматически.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Компилятор Hi-Tech, вычисление, на PIC12F675
|
3ann |
Микроконтроллеры, АЦП, память и т.д |
27 |
06.07.2009 12:01 |
pic12f675
|
Faworit |
Микроконтроллеры, АЦП, память и т.д |
27 |
01.06.2007 17:51 |
Program memory в PIC12F675
|
waiting |
Микроконтроллеры, АЦП, память и т.д |
6 |
01.02.2007 01:21 |
Помогите идиоту с PIC12F675
|
waiting |
Микроконтроллеры, АЦП, память и т.д |
6 |
26.01.2007 22:41 |
уроки от LABCENTRE(PIC12F675+C)
|
dosikus |
Микроконтроллеры, АЦП, память и т.д |
22 |
09.10.2006 10:16 |
Часовой пояс GMT +4, время: 23:42.
|
|