28.03.2017, 04:29
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 434
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от индюк
|
Любителям спл это неведомо
|
спл на пик???
|
|
|
|
28.03.2017, 11:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,462
Сказал спасибо: 287
Сказали Спасибо 1,121 раз(а) в 540 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Извиняюсь, напутал. Не PIE, а PEIE. INTCON.6
Можно взять Протеус, 16F876А поддерживается. Сделать .cof и шаг за шагом дебажить. Протеус не дело, да грубые ошибки в общем случае всплывают.
|
|
|
|
28.03.2017, 12:04
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,710
Сказал спасибо: 187
Сказали Спасибо 3,199 раз(а) в 2,073 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от ampy
|
спл на пик???
|
я как бы провел параллели
__________________
кагмаподэ магмаподэ
|
|
|
|
28.03.2017, 23:28
|
|
Частый гость
Регистрация: 25.10.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 61 раз(а) в 13 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от yellow87
|
main(void)
{
SET_TRIS_C(0b10011001);
Led=1; delay_ms(255); Led=0; // start_test
for( ; ; ) {getc(); Led=!Led;}
}
|
Этот код будет работать да же если rcv висит в воздухе или подключен к земле!!!
|
|
|
|
29.03.2017, 05:49
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от 26165
|
Этот код будет работать да же если rcv висит в воздухе или подключен к земле!!!
|
так он и работает! - вы разве не заметили, что я его закоментировал?
А код с прерываниями не работает...
хотя как это он будет подключенным к земле работать?!
Светодиод переключаться не будет, так как при Rx подключенном к земле в приёмник USART байт не поступит, а следовательно программа остановится на функции getc() ожидая данных в RCREG-регистре
Сообщение от OakRidge
|
Извиняюсь, напутал. Не PIE, а PEIE. INTCON.6
|
ENABLE_INTERRUPTS(GLOBAL); устанавливает в INTCON бит 7-GIE и бит 6-PEIE
Последний раз редактировалось yellow87; 29.03.2017 в 05:55.
|
|
|
|
29.03.2017, 09:47
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 434
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Может с компилятором идут сырцы библиотеки, посмотрите, что в этом getc.
Тут похоже никто этим (а чем этим - мы до сих пор не знаем) не увлекается.
У меня так чтение в прерывании выглядит:
Код:
|
void interrupt intpt (void) {
....
} else if (RCIF) { //получены данные
if (FERR) {//ошибка кадра, сбрасывается при чтении RCREG
*buf = RCREG;
} else if (OERR) { //ошибка переполнения буфера, сбрасывается при выключении CREN
CREN = 0;
CREN = 1;
} else rchar = RCREG;
} else
..... |
Как видим, отличия разительные.
|
|
|
|
29.03.2017, 11:12
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: не срабатывает прерывание от UART
вообще-то я тоже делаю проверку ошибок фрейма и переполнения
просто в этом тестовом примере их не использую.
А в библиотеке ошибки нет - в других проектах работало же всё...
|
|
|
|
29.03.2017, 16:46
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 434
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от yellow87
|
вообще-то я тоже делаю проверку ошибок фрейма и переполнения
просто в этом тестовом примере их не использую.
А в библиотеке ошибки нет - в других проектах работало же всё...
|
Если функция способна бесконечно ждать байт, то она явно не для использования в прерывании.
|
|
|
|
29.03.2017, 17:12
|
|
Частый гость
Регистрация: 16.06.2008
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: не срабатывает прерывание от UART
Временно попробуйте LED подключить к пинам другого порта, а на С оставьте только прием.
|
|
|
|
30.03.2017, 10:17
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: не срабатывает прерывание от UART
Сообщение от hfm308
|
Временно попробуйте LED подключить к пинам другого порта, а на С оставьте только прием
|
это зачем так?.. Да и плата у меня уже разведена.
Сообщение от ampy
|
Если функция способна бесконечно ждать байт, то она явно не для использования в прерывании.
|
эта функция бесконечно ждёт флага принятого байта в цикле main()
а в прерывании она этот байт считывает, так как флаг это прерывание и генерирует.
И если даже первой командой в прерывании инвертировать светодиод, а потом напрямую и без функции читать с приёмного регистра, то прерывание всё равно почему-то не возникает
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:30.
|
|