usart прерывание - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » usart прерывание
usart прерывание
pic_anton Дата: Чт, 04.08.2011, 11:58  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 18.02.2010

Статус: Offline

Не как не могу разобраться с аппаратным прерывание по USart он срабатывает но не прекращает работать и постоянно начинает выдавать в порт а должен просто выдать и замолчать. смотрите файл

Если у кого есть пример реализации прерывания по 232 выложите пожалуйста.
Прикрепления: Demo_lcd.bas(5Kb)


Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал pic_anton - Чт, 04.08.2011, 12:32
ЯНДЕКС Дата: 04.08.2011
MasterPic Дата: Чт, 04.08.2011, 12:45  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Просто в прерывании нужно сбрасывать флаг? вызвавший это прерывание.
RCIF = 0'
Если его не сбрасывать, то по выходу из прерывания программа обнаруживает снова этот источник и опять уходит в прерывание
А еще правильней будет проверять условие прерывания:

Context Save
If RCIF = 1 then
HRSOut "hello"
Endif
Context Restore
pic_anton Дата: Чт, 04.08.2011, 16:54  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 18.02.2010

Статус: Offline

Quote (MasterPic)
Просто в прерывании нужно сбрасывать флаг? вызвавший это прерывание.
RCIF = 0'
Если его не сбрасывать, то по выходу из прерывания программа обнаруживает снова этот источник и опять уходит в прерывание
А еще правильней будет проверять условие прерывания:

Context Save
If RCIF = 1 then
HRSOut "hello"
Endif
Context Restore


On_Interrupt GoTo Int_Label
GoTo MainProgram

'-------------------------- Ïðåðûâàíèÿ--------------------------

Int_Label:
Context Save
If RCIF = 1 Then
HRSOut "hello"
EndIf
Context Restore
'-------------------------- Ãëàâíàÿ ïðîãðàììà -------------------------

MainProgram:
RCIF = 0

GoTo MainProgram ' Return to main program

попробовал вот так и все равно гадит в эфир

и еще такой вопрос а может что быть не так если работающий на win7

попробывал решить проблему иначе сделал вот такой код.

так вот он показывает что после того как сработало прерывание я питаюсь обнулить RCIE = 0 а он его не обнуляет. в чем это может быть ?

Добавлено (04.08.2011, 16.54.26)
---------------------------------------------
Dim var1,var2,var3,var4,var5,var6 As Byte

MainProgram:
HRSIn var1,var2,var3,var4,var5,var6
DelayMS 500
HRSOut var1,var2,var3,var4

решил не заворачиваться сделал вот так и все нормально. теперь вопрос в другом как соединить var1,var2,var3,var4 в одну переименую типа word

Прикрепления: 9155328.bas(5Kb)


Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал pic_anton - Чт, 04.08.2011, 14:17
MasterPic Дата: Чт, 04.08.2011, 18:07  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Блин!!!!!
Забыл строчку дописать:
Нужно так писать - прямо в прерывании сбрасывать флаг:

Context Save
If RCIF = 1 then
HRSOut "hello"
RCIF = 0
Endif
Context Restore

Так точно будет работать

Теперь по второму вопросу - в переменной Word - два байта. А вот в DWord - четыре.
Так можно попробовать:

Dim NewBigVar As Dword
Dim Var1 As NewBigVar.LowWord.LowByte
Dim Var2 As NewBigVar.LowWord.HighByte
Dim Var3 As NewBigVar.HighWord.LowByte
Dim Var4 As NewBigVar.HighWord.HighByte

Сообщение отредактировал MasterPic - Чт, 04.08.2011, 18:12
pic_anton Дата: Пт, 05.08.2011, 00:19  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 18.02.2010

Статус: Offline

Context Save
If RCIF = 1 then
HRSOut "hello"
RCIF = 0
Endif
Context Restore
так тоже пробовал тоже не как а что касаемо с var я разобрался четыре нужных байта загоняю в dword а остальное просто вворд. но все равно спасибо за помощь а с прерыванием надо разбираться

Есть еще один вопрос если срабатывает прерывание успеет ли var dword получить эти данные.

Добавлено (05.08.2011, 00.19.11)
---------------------------------------------
Int_Label:
Context Save
If RCIF = 1 Then
HSerOut ["hello"]
RCIF = 0
EndIf
Context Restore

И все таки этот код не работает...... Даже в железе не пашет!!! cool


Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал pic_anton - Пт, 05.08.2011, 00:19
MasterPic Дата: Пт, 05.08.2011, 05:40  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Я так думаю, в прерывании не стоит отправлять данные. Нужно там ставить флаг, а в основном цикле по этому флагу и отправлять
pic_anton Дата: Пт, 05.08.2011, 12:49  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 18.02.2010

Статус: Offline

MasterPic, Спасибо вам за помощь! есть у меня к вам еще один вопрос навеял я тут схемку по работе STH11 датчик температуры и влажности где то нашел код на бейсике переделал под Протон все вроде работает но выдает инфу с большой погрешностью если просто сказать то врет в показаниях не могли бы вы посмотреть данный код и исправить просто не могу понять где ошибся. Заранее благодарен. опробую в железе потом можно будет выложить на форуме как статью.
Прикрепления: temp_rh.bas(4Kb)


Век живи, Век учись, и всего не постичь!!!
MasterPic Дата: Пн, 08.08.2011, 03:02  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

А схемку можно глянуть? И еще: какие именно показания врут? Все?
Также желательно указать в программе в комментариях - для чего какие переменные используются
pic_anton Дата: Пн, 08.08.2011, 12:02  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 18.02.2010

Статус: Offline

схема в файле а врут когда в протеусе выставляешь значения они не совподают с реальными показаниями
Прикрепления: proteus.rar(28Kb)


Век живи, Век учись, и всего не постичь!!!
demanik Дата: Ср, 10.08.2011, 07:11  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (pic_anton)
выдает инфу с большой погрешностью если просто сказать то врет в показаниях


Смотрим даташит на датчик и там есть формулы перерасчета полученных данных в температуру и влажность. cool


Попробуй всё и вся... может быть пол...

DIKLER Дата: Сб, 05.05.2012, 13:26  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 20.12.2011

Статус: Offline

RCIF = 0 так делать нельзя!
Всем внимательно читать доку: Флаг RCIF доступен только на чтение, сбрасывается аппаратно при чтении из регистра RCREG.
ADMIN Дата: Сб, 05.05.2012, 17:57  |                                                                                                                Сообщение # 12
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1106
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Online

Почему это нельзя? Можно. Ничего страшного не будет
DIKLER Дата: Сб, 05.05.2012, 18:44  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 20.12.2011

Статус: Offline

Quote (ADMIN)
Можно. Ничего страшного не будет

Ну да ничего и не будет, команда обнуления его просто не сбросит.
Попробуйте в отладчике. А как только читаешь данные из входного регистра, то флаг сразу обнуляется.
PS: Как показывает практика, лучше придерживаться документации!
ADMIN Дата: Сб, 05.05.2012, 19:05  |                                                                                                                Сообщение # 14
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1106
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Online

Не спорю. Просто так категорично...
MiXaS Дата: Вт, 16.04.2013, 11:12  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Здравствуйте! Господа специалисты! Объясните мне неграммотному, почему у меня на pic16f628 при кварце 20 Мгц макс скорость безошибочной работы 19200 бод, на фирма ОВЕН выпускает свои модули расширения МУ 110 на pic 18f4550 с кварцем 9.216 МГц добивается работы на скорости 115200.

Добавлено (16.04.2013, 11:12)
---------------------------------------------
Да, и ещё. Подскажите, если использовать внешний тактовый генератор, то с какой максимальной частотой его можно использовать, скажем для pic 16f628? Спасибо!

Прикрепления: 7906155.jpg(176Kb) · 7176376.jpg(217Kb) · 7164541.jpg(235Kb)
Форум Picbasic.ru » Программирование МК » Proton PicBasic » usart прерывание
Страница 1 из 212»
Поиск: