Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Компорт
tolyan249 Дата: Чт, 24.11.2022, 15:10  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 209
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Привет всем ,.есть у кого рабочий пример работы pic16F628а c компртом ,ни хрена ни идёт. и кварц уже поставил 20мгц ,типа эхо отправить обратно данные в компорт то что принял,вообще ни чего не происходит ,светодиод моргает и всё.

;-------------------------- Общие настройки------------------------------------

Device = 16F628A   ' Используемый микроконтроллер
Xtal = 20   ' Частота осциллятора   МГц

'-------------------------- Конфигурация программирования --------------------

Config  BODEN_OFF, BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF

'''-------------------------- Настройки USART ----------------------------------
Declare  Hserial_Baud  9600   ' Скорость передачи данных, бод
Declare  Hserial_Parity  ODD   ' Проверка на четность/нечетность
Declare  Hserial_TXSTA = %00000000   ' Выключить передатчик USART
Declare  Hserial_RCSTA = %10000000   ' Выключить приемник USART
Declare  Hserial_SPBRG  32   ' Значение регистра SPBRG для выбранной скорости
Declare  Hserial_Clear = On   ' Автоматическая очистка бита ошибки переполнения

Dim TXTSMS As Dword
Symbol LED = PORTA.2 'Светодиод

CMCON = 7 'Отключим компараторы
TRISB = %11110010 'Каналы - на вход, ключ - на вход, остальные - на выход
TRISA = %00101010

main:
GoSub TURN_LED 'Могрнем, показывая, что идет обмен с телефоном
HSerIn 1000, main,
[TXTSMS]HSerOut
[TXTSMS]GoTo  main

TURN_LED: 'ÏÏ ìîðãàíèÿ ñâåòîäèîäîì
LED = 1
DelayMS 250
LED = 0
Return


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Чт, 24.11.2022, 15:12
ЯНДЕКС Дата: 24.11.2022
dimvad Дата: Чт, 24.11.2022, 16:29  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 82
Репутация: 54   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Вот тренировочный примерчик. Вбиваем в монитор любое число, жмем ENTER, смотрим результат.
Прикрепления: HRSIN-OUT.rar (43.6 Kb)
tolyan249 Дата: Вс, 27.11.2022, 07:08  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 209
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Заработало ,Спасибо.
Другой вопрос :
Как мне выдернуть и приходящего SMS ,номер телефона и текст отдельно в разные переменные ?
Получаю вот такой текст 
+CMT: "+7962*******","","22/11
/27,10:18:37+28"
ON_1
На протоне ,как работать с текстом в протоне я не знаю ,скопировать часть текста и так далее.

Спасибо.


если знаешь,помоги.
xvovanx Дата: Вс, 27.11.2022, 17:31  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 355
Репутация: 65   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата tolyan249 ()
Как мне выдернуть и приходящего SMS ,номер телефона и текст отдельно в разные переменные ?

А если сначала всё полученное записать в массив CData, а потом посчитать по знакоместам, допустим первые 12 знакомест это номер телефона, остальное текст.
tolyan249 Дата: Ср, 30.11.2022, 15:00  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 209
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Попробую так .
Спасибо.

Добавлено (01.12.2022, 14:05)
---------------------------------------------
Работает как то странно ,пик длинные sms принимает ,короткие ,нет.
Сам модуль мне даёт в терминале то что он принял смс ,просто отправляю число ,"123", смс приходит с модуля сим900 а пик ждёт смс ,как будто его он не видит что оно пришло ,если отправить на английском "proba otpravki teksta privet kak dela" , то пик обратно мне отправляет это предложение ,что он его принял.

   ;-------------------------- Общие настройки------------------------------------

Device = 16F628A   ' Используемый микроконтроллер
Xtal = 12 ' Частота осциллятора  4 МГц

'''-------------------------- Настройки USART  12 МГЦ ----------------------------------

Declare Hserial_Baud 9600
Declare Hserial_TXSTA=%00100100
Declare Hserial_RCSTA=%10010000
Declare Hserial_SPBRG 77   '26
Declare Hserial_Clear = On

All_Digital True

'-------------------------- Настройки портов ---------------------------------

PortB_Pullups = OFF   ' Выключить подтягивающие резисторы на PORTB
Declare  All_Digital = On   ' Установить все порты цифровыми входами/выходами

' ----------------------Переменные--------------------------------------------------

Dim PN[14] As Byte 'Массив для считывания телефонных номеров
Dim SF[84] As Byte 'Массив для считывания текста SMS
Dim i Byte
Dim var1 As Byte

Symbol LED = PORTA.2 'Светодиод
Symbol dq   = PORTA.1            'Датчик температуры на улице

'Clear 'Очистим RAM

CMCON = 7 'Отключим компараторы
TRISB = %11110010 'Каналы - на вход, ключ - на вход, остальные - на выход
TRISA = %00000000
OPTION_REG = %10000000 'Отключим подтяжку на portb

var1=0

ld:
GoSub TURN_LED 'Моргнем светодиодом
Inc var1
If var1 = 20 Then GoTo main
GoTo ld

'---Послать команду на SIM900 ,работа модуля ------------------------
main:
HRSOut   "AT",13
HRSIn {10000,main},Wait("OK")'Ждем ответа, если нет

TXT:
GoSub TURN_LED
HRSOut "AT+CMGF=1" ,13  'Отправить команду на включение текстового режима
HRSIn {10000,TXT},Wait("OK")'Ждем ответа, если нет ,
DelayMS 1000

AON:
GoSub TURN_LED
HRSOut "AT+CLIP=1" ,13  'Включить режим АОН
HSerIn 10000, AON,[Wait("OK")]'Ждем ответа, если нет ,
DelayMS 1000

DEL_SMS:
HRSOut "AT+CMGDA=\"DEL ALL\"" ,13 'Удалить все СМС
HRSIn {10000, DEL_SMS},Wait("OK")'Ждем ответа, если нет ,
DelayMS 1000

loop:
'Ждем SMS 24 символа
HRSIn {1000, loop},Wait("+CMT"),Str SF \83

For i=3 To 12' скопировать с массива номер телефона
PN[i-3]=SF
Next

For i=40 To 83 'скопировать текст смс
SF[i-40]=SF

Next

DelayMS 5000

HRSOut Str  PN \10 ' номер телефона  'отправим обратно для контроля в ком порт ,что бы было видать в терминале что пик принял смс
DelayMS 1000
HRSOut Str SF \ 43 ' текст SMS  'номер телефона  'отправим обратно для контроля в ком порт ,что бы было видать в терминале что пик принял смс

var1=0
ld1:
GoSub TURN_LED 'Моргнем светодиодом
Inc var1
If var1 = 4 Then GoTo main
GoTo ld1

end

Добавлено (02.12.2022, 05:52)
---------------------------------------------
Выяснил для себя , что команды serin ждёт заполнения всего массива  ,так как я массив  сделал 84 символа, то длинные sms принимаются ,а короткие нет . подключил пик чисто к терминалу и отправляю данные ,пока не отправлю именно 84 символа ,то мне обратно в терминал ни чего не возвращается .

HRSIn {10000, loop},str SF \ 8 ,делаю так ,то принимает токо минимум 8 символов ,если меньше то не отрабатывает.

---------------------------------------------------------------------------------------------------------------------------------------------------
Как сделать ? если количество символов переданных не известно. , как правильно принимать всё что приходит в порт Serin не понятно ,может кто что подскажет ?
Может по прерываниям как то ,что в приёмном порту есть данные или их нет
Тут нашёл что можно использовать вот это
------------------------------------------------------------------------------

RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
---------------------------------------------------------------------------------------------------------------
А как их использовать я не знаю.

Или как то по другому можно принимать  все данные с компорта данные ?

Cпасибо.


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пт, 02.12.2022, 07:48
  • Страница 1 из 1
  • 1
Поиск: