31.10.2012, 21:54
|
|
Частый гость
Регистрация: 13.08.2008
Сообщений: 14
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Таймер на PIC12f629
Здравствуйте. Пытаюсь адаптировать программу отсюда http://chipmk.ru/index.php?option=co...0-22&Itemid=61
для 12F629. В протеусе и в железе начинает работать через 30сек после подачи питания. Помогите начинаюшему разобраться что не так.
|
|
|
|
02.11.2012, 15:57
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Таймер на PIC12f629
Сообщение от nick458
|
В протеусе и в железе начинает работать через 30сек после подачи питания
|
Нууу как написал - так всё и работает..
decfsz сначала уменьшает на единицу содержимое регистра, а потом проверяет его на равенство нулю и только по результатам этой проверки осуществляет переход на одну или две команды вперед. Присваивать начальные значения регистрам нужно раньше.
Проверка регистра на равенство его содержимого нулю производится последовательно командой чтения-записи movf, а затем проверкой бита Z в регистре STATUS.
Так же, нельзя сразу же в программе проверять значения в регистре общего назначения (особенно в железе), не выполнив на этапе инициализации контроллера очистку ( clrf) используемого регистра. Поскольку в железном контроллере эти регистры после включения питания содержат любую случайную информацию.
|
|
|
|
02.11.2012, 16:13
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,563 сообщении(ях)
|
Re: Таймер на PIC12f629
Алекс Василич, Василич , присмотрись где была взята идея .
chipmk == picborda .
Даже не стоят внимания - один бред в перемешку с кулибинством..
__________________
Осторожно , злой кот
|
|
|
|
02.11.2012, 16:32
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Таймер на PIC12f629
Ааа, ну чтож, тогда ладно.
То-то там вначале куча #define-ов, видимо, щоб быстрее запутаться.
|
|
|
|
21.11.2013, 10:14
|
|
Частый гость
Регистрация: 02.07.2011
Адрес: Чебоксары
Сообщений: 32
Сказал спасибо: 15
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Таймер на PIC12f629
У меня вопрос по прерыванию от таймера 0
Настраиваю контроллер на прерывания от ножки порта и от таймера.
В обработчике проверяю соответствующую ножку и T0IF флаг таймера.
Но непонятная проблема...
При срабатывании прерывания от ножки, обрабатывается и прерывание от таймера, как будто флаг таймера уже установлен. Флаги естественно своевременно очищаются.
Кто нибудь сталкивался с подобным?
|
|
|
|
21.11.2013, 10:43
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Таймер на PIC12f629
Dr.BIF, код выкладывайте.
|
|
|
|
21.11.2013, 11:43
|
|
Частый гость
Регистрация: 02.07.2011
Адрес: Чебоксары
Сообщений: 32
Сказал спасибо: 15
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Таймер на PIC12f629
Код:
|
// Настройка прерывания
IOCB5_bit = 1; // Прерывание по порту GP5
GPIE_bit = 1; // Включение прерываний от перефирии
T0IE_bit = 1; // Разрешение прерывания от таймера 0
GIE_bit = 1; // Глобальное прерывание
//--------------------
вот обработка прерывания
void interrupt ()
{
if (GPIF_bit) // Прерывание от ножки порта
{
GPIF_bit = 0;
TMR0 = rx_const; ‹- возможно здесь нужно очистить T0IF_bit. Вечером проверю
if (int_pin == 0) led_2 = 1;
else led_2 = 0;
}
if (T0IF_bit) // Прерывание от таймера
{
T0IF_bit = 0;
TMR0 = rx_const;
if (++time_100us == 200)
{
time_100us = 0;
led_1 = 1;
}
else if (time_100us == 100) led_1 = 0;
}
} |
Этот же код на PIC16 работает как положено
Последний раз редактировалось realid; 21.11.2013 в 13:23.
|
|
|
|
21.11.2013, 12:30
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Таймер на PIC12f629
Обязательно нужно прочесть содержимое порта после вызова прерывания по перепаду уровня.
|
|
|
|
22.11.2013, 14:06
|
|
Прописка
Регистрация: 07.02.2010
Адрес: Калининград
Сообщений: 148
Сказал спасибо: 72
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Таймер на PIC12f629
Как вариант, у пика надо проверять какой именно флаг выставлен прерывания. Так как вектор один на всех.
MOVWF W_TMP ; вход в прерывание
SWAPF STATUS,w
CLRF STATUS
MOVWF STATUS_TMP
BCF INTCON,GIE ; запрет всех прерываний
; - начало обработки -
TMR1_CHK ;----------------
BTFSS PIR1,TMR1IF ; если прерывание было из-за таймера TMR1 то делаем проверку
GOTO TMR0_CHK ; если нет переходим к следующей проверке
BCF PIR1,TMR1IF ; сбрасываем источник прерывания
;
;обработка прерывания от TMR1
;
;
GOTO EXITFIE
TMR0_CHK ;----------------
BTFSS INTCON,T0IF ; если прерывание было из-за таймера задержки TMR0
GOTO INT_CHK ; то мы его сбрасываем и загружаем последнее значение
BCF INTCON,T0IF
;
;обработка прерывания от TMR0
;
;
GOTO EXITFIE
INT_CHK ;----------------
BTFSS INTCON,INTF ; если прерывание было из-за "геркона"
;
;обработка прерывания от INTCON
;
BSF INTCON,T0IE
EXITFIE ; - конец обработки -
SWAPF STATUS_TMP,w
MOVWF STATUS
SWAPF W_TMP,f
SWAPF W_TMP,w
BSF INTCON,GIE ; разрешение всех прерываний
RETFIE
__________________
Лужу, паяю, ЭВМ починяю.....
|
|
|
|
28.03.2014, 06:54
|
|
Частый гость
Регистрация: 02.07.2011
Адрес: Чебоксары
Сообщений: 32
Сказал спасибо: 15
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Таймер на PIC12f629
Проблема оказалась в непонятной работе порта GPIO.
Например на GP0 установлена 1, потом устанавливаю 1 на GP1 или любой другой, на GP0 единица слетает. Что это такое?
Решил проблему записью байта в GPIO... но это же неправильно. Получается нельзя управлять отдельными битами порта на этом контроллере.
Кто нибудь знает почему такое происходит?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
PIC12F629
|
otect |
Микроконтроллеры, АЦП, память и т.д |
6 |
27.01.2008 16:58 |
PIC12F629
|
otest |
Микроконтроллеры, АЦП, память и т.д |
2 |
19.10.2007 01:02 |
PIC12F629,таймер
|
CERGEI1982 |
Микроконтроллеры, АЦП, память и т.д |
25 |
25.09.2007 13:35 |
Помогите с PIC12F629
|
Alien2057 |
Цифровые сигнальные процессоры |
4 |
07.05.2007 12:38 |
PIC12F629
|
RETAS |
Микроконтроллеры, АЦП, память и т.д |
1 |
08.07.2005 09:21 |
Часовой пояс GMT +4, время: 06:05.
|
|