Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 12.01.2011, 17:45   #1
chiraevevgenii
Junior Member
 
Регистрация: 18.09.2010
Сообщений: 5
Вес репутации: 100/0
chiraevevgenii will become famous soon enoughchiraevevgenii will become famous soon enough
По умолчанию Проблема с прерыванием PIC 16F877A .

PIC 16F877A Компилятор MPASM 03.20.02
Есть программа Автоматический режим (основная программа) + Меню (прерывание по входу В0).
Меню делится на 3 подпрограммы: 1- настройка параметров, 2- просмотр ошибок, 3 – ручной режим.
Проверял по отдельности на эмуляторе (Proteus 7) меню и основную программу работает нормально, как нужно. Но когда начал соединять их вместе, программа не пошла. Пришлось урезать ручной режим, в этом случае программа работает нормально. На реальном контроллере та же история. Немому разобраться, в чем дело.
chiraevevgenii вне форума   Ответить с цитированием
Старый 12.01.2011, 18:24   #2
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/123
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Цитата:
Сообщение от chiraevevgenii Посмотреть сообщение
Немому разобраться, в чем дело.
Ошибка в программе. Что Вы еще хотели услышать в ответ на такой вопрос?
tester вне форума   Ответить с цитированием
Старый 12.01.2011, 20:39   #3
AlexPv
Senior Member
 
Регистрация: 02.03.2009
Адрес: Russia
Сообщений: 1,800
Вес репутации: 565/61
AlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to all
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Цитата:
Сообщение от chiraevevgenii Посмотреть сообщение
PIC 16F877A Компилятор MPASM 03.20.02
Есть программа Автоматический режим (основная программа) + Меню (прерывание по входу В0).
Меню делится на 3 подпрограммы: 1- настройка параметров, 2- просмотр ошибок, 3 – ручной режим.
Проверял по отдельности на эмуляторе (Proteus 7) меню и основную программу работает нормально, как нужно. Но когда начал соединять их вместе, программа не пошла. Пришлось урезать ручной режим, в этом случае программа работает нормально. На реальном контроллере та же история. Немому разобраться, в чем дело.
Приведите исходник.

И что п/п меню вызываются в обработчике прерывания?
AlexPv вне форума   Ответить с цитированием
Старый 13.01.2011, 18:40   #4
chiraevevgenii
Junior Member
 
Регистрация: 18.09.2010
Сообщений: 5
Вес репутации: 100/0
chiraevevgenii will become famous soon enoughchiraevevgenii will become famous soon enough
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

#INCLUDE<P16F877A.INC>
#INCLUDE<MACROCOM.INC>
NOEXPAND
LIST W=2
__CONFIG 0x3E4A
;==========================================
;ОПРЕДЕЛЕНИЕ НАЗВАНИЯ И ПОЛОЖЕНИЯ РЕГИСТОРВ ОБЩЕГО НЕЗНАЧЕНИЯ
;==========================================
CBLOCK 0X20
/./././././././././././././././
ENDC

CBLOCK 0X70
/./././././././././././././././
ENDC

#DEFINE E PORTB,1
#DEFINE RW PORTB,3
#DEFINE RS PORTB,2

ORG 0X000
GOTO INIT
ORG 0X004
;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
;ПРЕРЫВАНИЕ
;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
;==========================================
;СОХРАНЯЕМ РАБОЧИИ РЕГИСТРЫ
;==========================================
BSF INTCON,INTE
MOVWF W_COPY
MOVF STATUS,W
MOVWF STATUS_COPY
/./././././././././././././././
;==========================================
;СОХРАНЯЕМ ИНДИКАЦИЮ
;==========================================
/./././././././././././././././
CALL MEN

MENU:
MOVLW 0x32
CALL time1
MOVLW 0x01
CALL UST_PARAM
CALL MENU1

KEY_MENU:
BTFSS PORTB,0
GOTO ERROR_P
BTFSS PORTB,6
GOTO UST_T1
GOTO KEY_MENU
CALL INIT_LCD
GOTO UST_T1
;==========================================
;УСТАНОВКА Т1
;==========================================
UST_T1:
CLRF DAN
MOVLW 0x32
CALL time1
MOVLW 0x01
CALL UST_PARAM
CALL MENU_T1
MOVLW 0x10
MOVWF ADDR_READ
CALL READ
MOV DAN,T1
MOV T1,DAN
CALL MENU_T

KEY_T1:
BTFSS PORTB,0
GOTO UST_T2
BTFSS PORTB,4
CALL PLUS_T1
BTFSS PORTB,5
CALL MINUS_T1
BTFSS PORTB,6
CALL SAVE_T1
GOTO KEY_T1

PLUS_T1:
MOVLW 0x32
CALL time1
INCF T1,1
MOV T1,DAN
MOVLW 0x64
SUBWF DAN,W
BTFSC STATUS,Z
CLRF T1
MOV T1,DAN
CALL MENU_T
RETURN

MINUS_T1:
MOVLW 0x32
CALL time1
DECF T1,1
MOVLW 0xFF
SUBWF T1,W
BTFSC STATUS,Z
CALL FAULT_T1
MOV T1,DAN
CALL MENU_T
RETURN

FAULT_T1: ;СБРОС
MOVLW 0x63
MOVWF T1
RETURN

SAVE_T1:
MOVLW 0xCF
CALL UST_PARAM
MOVLW 0x63
CALL UST_DATA
MOVLW 0x01
CALL time2
MOVLW 0x10
MOVWF ADDR_UST
MOV T1,DAN
CALL SAVE
MOVLW 0xCF
CALL UST_PARAM
MOVLW 0x20
CALL UST_DATA
RETURN
;==========================================
;УСТАНОВКА Т2
;==========================================
/./././././././././././././././
;==========================================
;УСТАНОВКА Т3
;==========================================
UST_T3:
/./././././././././././././././
RETURN
;==========================================
;УСТАНОВКА Т4
;==========================================
UST_T4:
/./././././././././././././././
RETURN
;==========================================
;УСТАНОВКА Т5
;==========================================
UST_T5:
/./././././././././././././././
RETURN
;******************************************
;ПОДПРОГРАММА ПРОСМОТРА
;ОШИБОК
;******************************************
ERROR_P:
/./././././././././././././././
MOVLW 0x01 ;ОЧИСТИТЬ ИНДИКАТОР
CALL UST_PARAM
CALL MENU_ERROR ;ИНДИКАЦИЯ
/./././././././././././././././
CALL READ ;СЧИТАТЬ ДАННЫЕ
CALL N_SEKC ;ВЫВЕСТИ НА ИНДИКАТОР
/./././././././././././././././
CALL READ ;СЧИТАТЬ ДАННЫЕ
CALL N_KLAP ;ВЫВЕСТИ НА ИНДИКАТОР
MOVLW 0x01
MOVWF N_OP
/./././././././././././././././
CALL N_ERROR
;==========================================
;ОПРОС КНОПОК
;==========================================
KEY_ERROR_P:
BTFSS PORTB,0
GOTO EXIT
BTFSS PORTB,4
CALL PLUS_ERROR_P ;П/П СЛЕДУЮЩАЯ ОШИБКА
BTFSS PORTB,5
CALL MINUS_ERROR_P ;П/П ПРЕДИДУЩАЯ ОШИБКА
BTFSS PORTB,6
CALL DEL_ERROR_P ;П/П ОЧИСТКА СПИСКА ОШИБОК
NOP
GOTO KEY_ERROR_P
;==========================================
;П/П СЛЕДУЮЩАЯ ОШИБКА
;==========================================
PLUS_ERROR_P:
/./././././././././././././././
RETURN ;ОПРОС КНОПОК

PLUS_ERROR_P1:
/./././././././././././././././
RETURN
;==========================================
;П/П ПРЕДИДУЩАЯ ОШИБКА
;==========================================
MINUS_ERROR_P:
/./././././././././././././././
RETURN ;ОПРОС КНОПОК

PLUK_ERROR_P1:
/./././././././././././././././
RETURN
;==========================================
;П/П ОЧИСТКА СПИСКА ОШИБОК
;==========================================
DEL_ERROR_P:
/./././././././././././././././
RETURN ;ОПРОС КНОПОК
;******************************************
;РУЧНОЕ УПРОВЛЕНИЕ
;******************************************
MANUAL:
/./././././././././././././././
MOVLW 0x01
CALL UST_PARAM
CALL MENU_MANUAL ;ИНДИКАЦИЯ
CALL READ_T
;==========================================
;ОПРОС КНОПОК
;==========================================
KEY_MANUAL:
BTFSS PORTB,0
GOTO EXIT
BTFSS PORTB,4
CALL PLUSS_MANUAL ;ВЫБОР СЕКЦИИ
BTFSS PORTB,5
CALL PLUSK_MANUAL ;ВЫБОР КЛАПАНА
BTFSS PORTB,6
CALL IMP_MANUAL ;УПРАВЛЕНИЕ
GOTO KEY_MANUAL ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК


PLUSS_MANUAL:
/./././././././././././././././
RETURN ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК

PLUSS_D:
/./././././././././././././././
RETURN ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК
;==========================================
;ВЫБОР КЛАПАНА
;==========================================
PLUSK_MANUAL:
/./././././././././././././././
RETURN ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК

PLUSK_D:
/./././././././././././././././
RETURN ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК
;==========================================
;П/П ВЫБОРА
;==========================================
DD:
/./././././././././././././././
RETURN
;******************************************
;ВЫХОД
;******************************************
EXIT:
/./././././././././././././././
CALL UST_PARAM
CALL MENU_EXIT ;ИНДИКАЦИЯ
;==========================================
;ОПРОС КНОПОК
;==========================================
KEY_EXIT:
BTFSS PORTB,0
GOTO MENU
BTFSS PORTB,6
GOTO ENDINT
GOTO KEY_EXIT ;ВЕРНУТЬСЯ НА ОПРОС КНОПОК


ENDINT:
/./././././././././././././././

BCF INTCON,INTF ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ
;CLRF INTCON
;BSF INTCON,INTE
;BSF INTCON,GIE
RETFIE ;ВЫХОД ИЗ ПРЕРЫВАНИЯ
;******************************************
;ИНИЦИАЛИЗАЦИЯ
;******************************************
INIT:
MOVLW 0xFF
MOVWF PORTA
MOVWF PORTB
MOVWF PORTC
MOVWF PORTD
MOVWF PORTE
BSF STATUS,RP0
MOVLW B'11110001' ;RB1,RB2,RB3 НА ВЫХОД
MOVWF TRISB ;ОСТАЛЬНЫЕ НА ВХОД
MOVLW 0X06 ;RA0-RA5 ЦИФРОВЫЕ ВХ/ВЫХ
MOVWF ADCON1
MOVLW 0 ;RA0-RA5 НА ВЫХОД
MOVWF TRISA
MOVWF TRISC ;НА ВЫХОД
MOVWF TRISD
MOVWF TRISE
BCF OPTION_REG,INTEDG
BCF OPTION_REG,NOT_RBPU ;ПОДКЛЮЧАЕМ ВНУТРЕННИЕ РЕЗИСТОРЫ
BCF STATUS,RP0
MOVLW B'10010000'
MOVWF INTCON
;BSF INTCON,INTE ;ПРЕРЫВАНИЕ ПО ВХОДУ RB0
MOVLW 0XFF
MOVWF PORTB
MOVWF PORTC
MOVWF PORTD
GOTO NACHALO
;******************************************
;EEPROM ДАННЫХ
;******************************************
;==========================================
;ПРОЦЕДУРА ЧТЕНИЯ ИЗ EEPROM ДАННЫХ
;==========================================
READ:
/./././././././././././././././
RETURN
;==========================================
;ПРОЦЕДУРА ЗАПИСИ В EEPROM
;==========================================
SAVE:
/./././././././././././././././
GOTO WAIT
;==========================================
;ОЖИДАНИЕ ОКОНЧАНИЯ ЗАПИСИ
;==========================================
WAIT:
/./././././././././././././././
RETURN
;******************************************
;ПАУЗЫ
;******************************************
;==========================================
;CON1=1 СЕК 0.001 СЕК
;CON1=99 СЕК 0.099 СЕК
;==========================================
time:
/./././././././././././././././
RETURN
;==========================================
;CON1=1 СЕК 0.01 СЕК
;CON1=99 СЕК 0.99 СЕК
;==========================================
time1:
/./././././././././././././././
RETURN
;==========================================
;CON1=1 СЕК 1 СЕК
;CON1=99 СЕК 99 СЕК
;==========================================
time2:
/./././././././././././././././
RETURN
;==========================================
;CON1=1 МИН 1 МИН
;CON1=99 МИН 99 МИН
;==========================================
time3:
/./././././././././././././././
RETURN
;******************************************
;ИНДИКАЦИЯ НА ЖКИ
;******************************************
;==========================================
;ПРОВЕРКА ФЛАГА BF
;==========================================
SEL_BF:
BCF INTCON,INTE ;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ
BSF STATUS,RP0
/./././././././././././././././
BCF STATUS,RP0
BSF INTCON,INTE ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ
RETURN
;==========================================
;ВЫВОД БАЙТА КОМАНДЫ
;==========================================
UST_PARAM:
/./././././././././././././././
CALL SEL_BF
RETURN
;==========================================
;ВЫВОД БАЙТА ДАННЫХ
;==========================================
UST_DATA:
/./././././././././././././././
CALL SEL_BF
RETURN

USTAN:
/./././././././././././././././
RETURN
;==========================================
;П/П ЧТЕНИЯ ДАННЫХ ИНДИКАТОРА
;==========================================
WRITE:
/./././././././././././././././
CALL SEL_BF
RETURN
;==========================================
;ИНИЦИАЛИЗАЦИЯ ЖКИ
;==========================================
INIT_LCD:
/./././././././././././././././
;==========================================
;Выод на ЖКИ
;==========================================
M1:
MOVLW 0x80
CALL UST_PARAM
MOVLW 0x20
CALL UST_DATA
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
SELECT:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
N_SEKC:
CALL PREOBRAZ
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
N_KLAP:
CALL PREOBRAZ
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
ZADER_IND:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
ZADER_IND1:
CALL PREOBRAZ
/./././././././././././././././
RETURN
;******************************************
;Выод на ЖКИ
;******************************************
MEN:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;УСТАНОВКА
;ПАРАМЕТРОВ
;==========================================
MENU1:
/./././././././././././././././
RETURN
;*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;ИНДАКАЦИЯ УСДАНОВКИ ВРЕМЕННЫХ ПАРАМЕТРОВ
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T1:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T2:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T3:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T4:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T5:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_T:
CALL PREOBRAZ
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_ERROR:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
N_ERROR:
CALL PREOBRAZ
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
;==========================================
MENU_MANUAL:
/./././././././././././././././
RETURN
;==========================================
;Выод на ЖКИ
; ВЫХОД
;==========================================
MENU_EXIT:
/./././././././././././././././
RETURN
;******************************************
;П/П ПРЕОБРАЗОВАНИЕ 16 В 10
;******************************************
PREOBRAZ:
/./././././././././././././././
RETURN
;******************************************
;ДАННЫЕ ДЛЯ РАБОТЫ ФИЛЬТРА
;******************************************
READ_T:
MOVLW 0x10
MOVWF ADDR_READ
CALL READ
MOV DAN,T1
/./././././././././././././././
RETURN
;******************************************
;ОСНОВНАЯ ПРОГРАММА
;******************************************
;==========================================
;НАЧАЛО
;==========================================
NACHALO:
CALL INIT_LCD
/./././././././././././././././

ORG 2100h
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
END

исходник немного урезал. При проверке в Proteus 7 в пошаговом режиме сначала переходит на INIT делает 5-7 шагов, а затем по непонятной причине переходит в прерывание, но начинает не сначала, а с 5-7 позиции.

Последний раз редактировалось chiraevevgenii; 13.01.2011 в 18:49.
chiraevevgenii вне форума   Ответить с цитированием
Старый 13.01.2011, 19:16   #5
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/123
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Пользуйтесь тегами CODE, когда приводите текст программы (http://www.microchip.su/showthread.php?t=149).
tester вне форума   Ответить с цитированием
Старый 13.01.2011, 19:26   #6
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 47
Сообщений: 3,757
Вес репутации: 6211/143
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Счас подебажим..

Ну и где брать MACROCOM.INC ???

Последний раз редактировалось dosikus; 13.01.2011 в 19:42.
dosikus вне форума   Ответить с цитированием
Старый 13.01.2011, 19:31   #7
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/123
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Нет восстановления контекста при выходе из прерывания. Да и вызовы подпрограмм внутри прерывания могут привести к переполнению стека.

Последний раз редактировалось tester; 13.01.2011 в 19:50.
tester вне форума   Ответить с цитированием
Старый 13.01.2011, 19:50   #8
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 47
Сообщений: 3,757
Вес репутации: 6211/143
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Цитата:
Сообщение от tester Посмотреть сообщение
Да есть он там (поиском проще найти, чем разобраться в тексте )
Нашел уже

Но исходник не собирается , у него определения в другом файле .
Топик стартеру , поимел бы совесть - выкладывай исходник который скомпилировать можно , а не требующий правки.
/./. <- эту хрень то хоть бы заремарил . Хорошо еще Replaсe в редакторе есть...

Ждемс файлик...
dosikus вне форума   Ответить с цитированием
Старый 13.01.2011, 20:13   #9
AlexPv
Senior Member
 
Регистрация: 02.03.2009
Адрес: Russia
Сообщений: 1,800
Вес репутации: 565/61
AlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to allAlexPv is a name known to all
По умолчанию Re: Проблема с прерыванием PIC 16F877A .

Топикстартер, Вы, к сожалению, не понимаете самого смысла прерываний, ИМХО, но выводить на индикатор в ОБРАБОТЧИКЕ ПРЕРЫВАНИЯ, это очень не хорошо. Продумайте алгоритм, перепишите программу.
AlexPv вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с MPLab и PIC 18 zver-diman Вопросы начинающих 6 16.10.2009 01:08
PIC 16F877A BEKELECTRO Вопросы начинающих 2 25.07.2009 14:59
проблема с прерыванием у 16f877 benik Продукция MICROCHIP 12 27.02.2009 17:38
Проблема с прерыванием от таймера Johns Вопросы начинающих 6 23.09.2008 10:51
PIC + часы DS1305 проблема с подключением Yura333 Продукция MICROCHIP 11 15.08.2007 14:35


Часовой пояс GMT +3, время: 19:22.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot