прерывание
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 18:51 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
помогите начинающему с прерыванием нужно подсчитывать количество импульсов но через энное количество импульсов идёт переполнение стёка и ресет вот пример что здесь не то Device 18F4550 Xtal 20 LCD_Type = 0 ' Задать режим работы с алфавитно-цифровым ЖКИ LCD_DTPin = PORTD.4 ' Задать вывод порта к которому будет подключен вход DB4 ЖКИ LCD_RSPin = PORTD.2 ' Задать вывод порта с которого будет выдаваться сигнал RS на ЖКИ LCD_ENPin = PORTD.3 ' Задать вывод порта с которого будет выдаваться сигнал E на ЖКИ LCD_Interface = 4 ' Задать 4-битный режим обмена информацией для ЖКИ LCD_Lines = 2 ' Задать ЖКИ 4-строчный режим работы (для 2-строчных ЖКИ LCD_LINES = 2 , для 1-строчных LCD_LINES = 1) LCD_CommandUs = 2000 ' Задать паузу между передачей команд на ЖКИ LCD_DataUs = 50 ' Задать паузу между передачей данных на ЖКИ Dim g As Word Dim c As Word TRISB = %00000001 TRISC = %11111010 Output PORTC PORTC = 0 c = 0 On_Interrupt GoTo Flash ' Включить обработку аппаратных прерываний и при их возникновении перейти к метке Flash: GoTo ee '---------------------------------------- Подпрограмма обработки прерываний ---------------------------------------- Flash: ' Метка начала подпрограммы обработки прерываний If INTCON.1 = 0 Then c = c + 1 ee: INTCON.4 = 1 ' включить вход rb.0 int0 INTCON2.6 = 1 ' срабатывание от спада или нарастания INTCON.7 = 1 ' разрешить все прерывания '------------------------------------------- Основная программа ------------------------------------------- main: Print At 2,2, Dec4 c GoTo main End ' Конец программы
Сообщение отредактировал
Oleg12345 - Вс, 25.07.2010, 18:52
|
|
|
|
chiper |
Дата: Вс, 25.07.2010, 19:50 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
108
Замечания:
±
На сайте с 14.07.2010
Статус:
Offline
|
Что именно не работает? а то у меня ПК под PicbasicPro заточен, а помочь хочется! Ну перечислю счас что у меня вызывает подозрение^ 1. для начала выведите просто переменную с на дисплей без всяких там "Print At 2,2, Dec4 c" 2. вы обрываете всю программу.... у вас тупо мигает LCD..... Code main:
Print At 2,2, Dec4 c
GoTo main По идее вся прога должна выглядеть так Code
Device 18F4550
Xtal 20 LCD_Type = 0 ' Задать режим работы с алфавитно-цифровым ЖКИ LCD_DTPin = PORTD.4 ' Задать вывод порта к которому будет подключен вход DB4 ЖКИ LCD_RSPin = PORTD.2 ' Задать вывод порта с которого будет выдаваться сигнал RS на ЖКИ LCD_ENPin = PORTD.3 ' Задать вывод порта с которого будет выдаваться сигнал E на ЖКИ LCD_Interface = 4 ' Задать 4-битный режим обмена информацией для ЖКИ LCD_Lines = 2 ' Задать ЖКИ 4-строчный режим работы (для 2-строчных ЖКИ LCD_LINES = 2 , для 1-строчных LCD_LINES = 1) LCD_CommandUs = 2000 ' Задать паузу между передачей команд на ЖКИ LCD_DataUs = 50 ' Задать паузу между передачей данных на ЖКИ
Dim g As Word Dim c As Word TRISB = %00000001 TRISC = %11111010 Output PORTC
PORTC = 0
c = 0
GoTo ee On_Interrupt GoTo Flash ' Включить обработку аппаратных прерываний и при их возникновении перейти к метке Flash:
ee: '---------------------------------------- Подпрограмма обработки прерываний ---------------------------------------- Flash: ' Метка начала подпрограммы обработки прерываний
If INTCON.1 = 0 Then c = c + 1
INTCON.4 = 1 ' включить вход rb.0 int0 INTCON2.6 = 1 ' срабатывание от спада или нарастания
INTCON.7 = 1 ' разрешить все прерывания '------------------------------------------- Основная программа -------------------------------------------
main:
Print c
GoTo ee
End ' Конец программы
Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
Сообщение отредактировал
chiper - Вс, 25.07.2010, 19:56
|
|
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 19:55 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
прерывание вроде ловит но переполняется стёк и происходит ресет и обнуляется переменная "с"
|
|
|
|
brown |
Дата: Вс, 25.07.2010, 20:01 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Если я правильно понял ваш замысел и не путаю в INTCON, то где то так: Code PORTC = 0
c = 0 INTCON.4 = 1 ' включить вход rb.0 int0 INTCON2.6 = 1 ' срабатывание от спада или нарастания
INTCON.7 = 1 ' разрешить все прерывания On_Interrupt GoTo Flash ' Включить обработку аппаратных прерываний и при их возникновении перейти к метке Flash:
GoTo main
'---------------------------------------- Подпрограмма обработки прерываний ---------------------------------------- Flash: ' Метка начала подпрограммы обработки прерываний INTCON = 0 c = c + 1 INTCON = %10010000
Context Restore
'------------------------------------------- Основная программа -------------------------------------------
main:
Print At 2,2, Dec4 c
GoTo main
End ' Конец программы
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал
brown - Вс, 25.07.2010, 20:03
|
|
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 20:08 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
попробовал в протеусе ваш код вродеработает но потом пропадает изображение с экрана жк и в log окне появляется надпись hd44780 controller recived data whilst busy
|
|
|
|
ivan_fd |
Дата: Вс, 25.07.2010, 20:10 | Сообщение # 6 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Чуток не успел. Вот что пишет даташит..... Quote 8.6 Внешние прерывания INT Внешние прерывания с входов RB0/INT0, RB1/INT1 и RB2/INT2 происходит: по переднему фронту сигнала, если бит INTEDGx (регистр INTCON2) установлен в Т; по заднему фронту, если бит INTEDGx сброшен в '0'. При появлении ожидаемого фронта сигнала на входе RBx/INTx устанавливается флаг прерываний INTxF. Прерывание может быть запрещено сбросом бита INTxE. Флаг прерывания INTxF должен быть сброшен программно в обработчике прерываний, перед разрешением прерываний. Все внешние прерывания (INTO, INT1 и INT2) могут вывести микроконтроллер из режима SLEEP, если бит INTxE был установлен в '1' до перехода в режим SLEEP. Если разрешены прерывания (GIE=1), то произойдет переход по вектору прерывания. Приоритет прерываний INT1, INT2 определяется битами INT1IP(INTCON3<6>), INT2IP(INTCON3<7>) соответственно. Обратите внимание, что внешние прерывание INTO не имеет бита приоритета. Прерывание INTO всегда с высоким приоритетом.
|
|
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 20:17 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
суть такая хочу сделать счётчик километров при динамическом отображении на жк дисплее назрел другой вопрос ? как отображать данные на жк дисплее при высокой частоте входящих импульсов ведь при передаче данных на жк требуется некоторое время эмулирую в протеусе при поднятии частоты выше скажем 70 герц пропадает изображение на жк
Сообщение отредактировал
Oleg12345 - Вс, 25.07.2010, 20:44
|
|
|
|
brown |
Дата: Вс, 25.07.2010, 20:35 | Сообщение # 8 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Восстановить регистры и выйти из прерывания. Вам будет очень полезно сходить на сайт http://www.terrarus.ucoz.ru/ и найдете там ответы на многие вопросы.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 21:04 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
спосибо со всем разобрался.
|
|
|
|
chiper |
Дата: Вс, 25.07.2010, 23:04 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
108
Замечания:
±
На сайте с 14.07.2010
Статус:
Offline
|
Можно конечный код в студию ?)
Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
|
|
|
|
Oleg12345 |
Дата: Вс, 25.07.2010, 23:12 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.03.2010
Статус:
Offline
|
Device 18F4550 Xtal 20 LCD_Type = 0 ' Задать режим работы с алфавитно-цифровым ЖКИ LCD_DTPin = PORTD.4 ' Задать вывод порта к которому будет подключен вход DB4 ЖКИ LCD_RSPin = PORTD.2 ' Задать вывод порта с которого будет выдаваться сигнал RS на ЖКИ LCD_ENPin = PORTD.3 ' Задать вывод порта с которого будет выдаваться сигнал E на ЖКИ LCD_Interface = 4 ' Задать 4-битный режим обмена информацией для ЖКИ LCD_Lines = 2 ' Задать ЖКИ 4-строчный режим работы (для 2-строчных ЖКИ LCD_LINES = 2 , для 1-строчных LCD_LINES = 1) LCD_CommandUs = 2000 ' Задать паузу между передачей команд на ЖКИ LCD_DataUs = 50 ' Задать паузу между передачей данных на ЖКИ Dim g As Word Dim c As Float TRISB = %00000001 TRISC = %11111010 Output PORTC PORTC = 0 c = 0 INTCON.4 = 1 ' включить вход rb.0 int0 INTCON2.6 = 1 ' срабатывание от спада или нарастания INTCON.7 = 1 ' разрешить все прерывания On_Interrupt GoTo Flash ' Включить обработку аппаратных прерываний и при их возникновении перейти к метке Flash: GoTo main '---------------------------------------- Подпрограмма обработки прерываний ---------------------------------------- Flash: ' Метка начала подпрограммы обработки прерываний INTCON = 0 c = c + 0.3 INTCON = %10010000 Context Restore '------------------------------------------- Основная программа ------------------------------------------- main: DelayMS 50 Print At 1,1,Dec3 с DelayMS 50 GoTo main End ' Конец программы на жк вылазит куча нулей
Сообщение отредактировал
Oleg12345 - Вс, 25.07.2010, 23:32
|
|
|
|