'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m644pdef.dat"
$crystal = 16000000
$baud = 2400
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Cursor Off
Config Serialin = Buffered , Size = 50
Config Timer0 = Timer , Prescale = 256
Dim Poczatek As Byte , Zwloka_4ms As Byte , Indeks_sms As Byte , Zasieg As Byte , Licznik As Byte
Dim Modem As String * 70 , Nr_tel As String * 30 , Bufor As String * 10 , Kod As String * 4 , Telefon_sms As String * 11 , Tresc_sms As String * 50
Dim Zm_zas As Bit
Podswietlenie Alias Portb.1
Mod_zas Alias Portd.4
Mod_res Alias Portd.5
'********* Konfiguracja zmiennych **************
'***********************************************
Podswietlenie = 0 '0=podswietlenie wlaczone
'********** Uruchomienie modemu ***************
'***********************************************
Cls
Locate 1 , 1
Lcd "Uruchamianie"
Locate 2 , 1
Lcd "ukladu..."
Mod_res = 0 'reset modemu
Waitms 500
Mod_res = 1
Wait 1
Mod_zas = 0 'uruchamianie modemu
Enable Interrupts
Do
Gosub Nasluch_bezlcd
If Modem = "+CPIN: SIM not inserted" Then
Modem = ""
Mod_zas = 1
Goto Inicjalizacja
End If
Loop
'********** Inicjalizacja modemu ***************
'***********************************************
Inicjalizacja:
Print "ATE0" 'ATE0, don?t display input command on the terminal
Gosub Potwierdzenie
Waitms 200
Print "AT+CPIN={034}5555{034}"
Gosub Potwierdzenie
Waitms 200
Print "AT+CNMI=3,1,0,0,0"
Gosub Potwierdzenie
Waitms 200
Print "AT+CMGF=1"
Gosub Potwierdzenie
Waitms 200
Print "AT+CLIP=1"
Gosub Potwierdzenie
Waitms 200
Cls
Locate 1 , 1
Lcd "Modem gotowy!"
Wait 1
Cls
Enable Timer0 : On Timer0 Spr_zasiegu
'########## Glowna Petla Programu ##############
Do
'Gosub Spr_zasiegu
Loop
End
'###############################################
'*************** ETYKIETY **********************
'***********************************************
Nasluch_bezlcd:
If Ischarwaiting() = 1 Then '
Poczatek = Inkey()
If Poczatek = 10 Then
Input Modem
Do
Poczatek = Inkey()
Loop Until Poczatek = 10
End If
End If
Return
'-----------------------------------------------
Potwierdzenie:
Do
Poczatek = Inkey()
If Poczatek = 10 Then
Input Modem
Do
Poczatek = Inkey()
Loop Until Poczatek = 10
End If
Loop Until Modem = "OK"
Modem = ""
Return
'-----------------------------------------------
Spr_zasiegu:
Print "AT+CSQ"
Do
Gosub Nasluch_bezlcd
Bufor = Left(modem , 5)
Loop Until Bufor = "+CSQ:"
Bufor = Mid(modem , 7 , 3)
Zasieg = Val(bufor)
Locate 1 , 12
Toggle Zm_zas
If Zm_zas = 1 Then
Lcd Chr(0) 'wysw znaku zasiegu
Else
Lcd Chr(1) 'wysw znaku zas z nozka
End If
Select Case Zasieg
Case 99:
Lcd "!XX!"
Case 1 To 9:
Lcd Chr(2) ; "___"
Case 10 To 14:
Lcd Chr(2) ; Chr(2) ; "__"
Case 15 To 19:
Lcd Chr(2) ; Chr(2) ; Chr(2) ; "_"
Case 20 To 31:
Lcd Chr(2) ; Chr(2) ; Chr(2) ; Chr(2)
End Select
Gosub Potwierdzenie
Return
'***********************************************
Atmega 644pa - problem z timerem
Chodzi tu zapewne o priorytet przerwań, Timer 0; 1; 2 ma wyższy priorytet niż UART, z kolei UART potrzebuje
trochę "czasu".
Myślę , że przerwanie Timera wykonuje się cały czas nie doprowadzając do działania INKEY()