tolyan249 |
Дата: Чт, 24.11.2022, 15:10 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
209
Замечания:
±
На сайте с 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
|
|
|
|
dimvad |
Дата: Чт, 24.11.2022, 16:29 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
82
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Вот тренировочный примерчик. Вбиваем в монитор любое число, жмем ENTER, смотрим результат.
|
|
|
|
tolyan249 |
Дата: Вс, 27.11.2022, 07:08 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
209
Замечания:
±
На сайте с 11.10.2007
Статус:
Offline
|
Заработало ,Спасибо. Другой вопрос : Как мне выдернуть и приходящего SMS ,номер телефона и текст отдельно в разные переменные ? Получаю вот такой текст +CMT: "+7962*******","","22/11 /27,10:18:37+28" ON_1 На протоне ,как работать с текстом в протоне я не знаю ,скопировать часть текста и так далее.
Спасибо.
если знаешь,помоги.
|
|
|
|
xvovanx |
Дата: Вс, 27.11.2022, 17:31 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
355
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата tolyan249 (  ) Как мне выдернуть и приходящего SMS ,номер телефона и текст отдельно в разные переменные ? А если сначала всё полученное записать в массив CData, а потом посчитать по знакоместам, допустим первые 12 знакомест это номер телефона, остальное текст.
|
|
|
|
tolyan249 |
Дата: Ср, 30.11.2022, 15:00 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
209
Замечания:
±
На сайте с 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
|
|
|
|