usart прерывание
|
pic_anton |
Дата: Чт, 04.08.2011, 11:58 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
63
Замечания:
±
На сайте с 18.02.2010
Статус:
Offline
|
Не как не могу разобраться с аппаратным прерывание по USart он срабатывает но не прекращает работать и постоянно начинает выдавать в порт а должен просто выдать и замолчать. смотрите файл
Если у кого есть пример реализации прерывания по 232 выложите пожалуйста.
Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал
pic_anton - Чт, 04.08.2011, 12:32
|
|
|
|
|
MasterPic |
Дата: Чт, 04.08.2011, 12:45 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
196
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал
pic_anton - Чт, 04.08.2011, 14:17
|
|
|
|
|
MasterPic |
Дата: Чт, 04.08.2011, 18:07 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
196
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
И все таки этот код не работает...... Даже в железе не пашет!!!
Век живи, Век учись, и всего не постичь!!!
Сообщение отредактировал
pic_anton - Пт, 05.08.2011, 00:19
|
|
|
|
|
MasterPic |
Дата: Пт, 05.08.2011, 05:40 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
196
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Я так думаю, в прерывании не стоит отправлять данные. Нужно там ставить флаг, а в основном цикле по этому флагу и отправлять
|
|
|
|
|
pic_anton |
Дата: Пт, 05.08.2011, 12:49 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
63
Замечания:
±
На сайте с 18.02.2010
Статус:
Offline
|
MasterPic, Спасибо вам за помощь! есть у меня к вам еще один вопрос навеял я тут схемку по работе STH11 датчик температуры и влажности где то нашел код на бейсике переделал под Протон все вроде работает но выдает инфу с большой погрешностью если просто сказать то врет в показаниях не могли бы вы посмотреть данный код и исправить просто не могу понять где ошибся. Заранее благодарен. опробую в железе потом можно будет выложить на форуме как статью.
Век живи, Век учись, и всего не постичь!!!
|
|
|
|
|
MasterPic |
Дата: Пн, 08.08.2011, 03:02 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
196
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
А схемку можно глянуть? И еще: какие именно показания врут? Все? Также желательно указать в программе в комментариях - для чего какие переменные используются
|
|
|
|
|
pic_anton |
Дата: Пн, 08.08.2011, 12:02 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
63
Замечания:
±
На сайте с 18.02.2010
Статус:
Offline
|
схема в файле а врут когда в протеусе выставляешь значения они не совподают с реальными показаниями
Век живи, Век учись, и всего не постичь!!!
|
|
|
|
|
demanik |
Дата: Ср, 10.08.2011, 07:11 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
452
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (pic_anton) выдает инфу с большой погрешностью если просто сказать то врет в показаниях
Смотрим даташит на датчик и там есть формулы перерасчета полученных данных в температуру и влажность.
Попробуй всё и вся... может быть пол...
|
|
|
|
|
DIKLER |
Дата: Сб, 05.05.2012, 13:26 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
2
Замечания:
±
На сайте с 20.12.2011
Статус:
Offline
|
RCIF = 0 так делать нельзя! Всем внимательно читать доку: Флаг RCIF доступен только на чтение, сбрасывается аппаратно при чтении из регистра RCREG.
|
|
|
|
|
ADMIN |
Дата: Сб, 05.05.2012, 17:57 | Сообщение # 12 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1134
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Почему это нельзя? Можно. Ничего страшного не будет
|
|
|
|
|
DIKLER |
Дата: Сб, 05.05.2012, 18:44 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
2
Замечания:
±
На сайте с 20.12.2011
Статус:
Offline
|
Quote (ADMIN) Можно. Ничего страшного не будет Ну да ничего и не будет, команда обнуления его просто не сбросит. Попробуйте в отладчике. А как только читаешь данные из входного регистра, то флаг сразу обнуляется. PS: Как показывает практика, лучше придерживаться документации!
|
|
|
|
|
ADMIN |
Дата: Сб, 05.05.2012, 19:05 | Сообщение # 14 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1134
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Не спорю. Просто так категорично...
|
|
|
|
|
MiXaS |
Дата: Вт, 16.04.2013, 11:12 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
623
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Здравствуйте! Господа специалисты! Объясните мне неграммотному, почему у меня на pic16f628 при кварце 20 Мгц макс скорость безошибочной работы 19200 бод, на фирма ОВЕН выпускает свои модули расширения МУ 110 на pic 18f4550 с кварцем 9.216 МГц добивается работы на скорости 115200. Добавлено (16.04.2013, 11:12) --------------------------------------------- Да, и ещё. Подскажите, если использовать внешний тактовый генератор, то с какой максимальной частотой его можно использовать, скажем для pic 16f628? Спасибо!
|
|
|
|