komunikace pic16f877A a mobil siemens c35
Napsal: 29 pro 2013, 21:55
Ahoj klucí.
nezkoušel jste někdo komunikovat mezi těmito dvěma zařízeními?? já jsem si zporvoznil načtení sms do picu přes usart, ale mám toršku problémek- buď nevim,jestli něco dělám špatně nebo je to funkce- namísto aby mi z toho lezly data ve formě bytu hex- konkrétně u mě 4F 71 DE 1E...... tak mi z toho leze 4 F 7 1 D E 1 E v asci tvaru. tak nějak nevim, jak z toho ven. nemáte někdo zkušenost a radu??? dík Marek
nezkoušel jste někdo komunikovat mezi těmito dvěma zařízeními?? já jsem si zporvoznil načtení sms do picu přes usart, ale mám toršku problémek- buď nevim,jestli něco dělám špatně nebo je to funkce- namísto aby mi z toho lezly data ve formě bytu hex- konkrétně u mě 4F 71 DE 1E...... tak mi z toho leze 4 F 7 1 D E 1 E v asci tvaru. tak nějak nevim, jak z toho ven. nemáte někdo zkušenost a radu??? dík Marek
Kód: Vybrat vše
program GSM
' Declarations section
' set of AT commands
const atc0 = "AT+CMGD=1"
const atc1 = "AT+CMGL=0"
const atc2 = "ATE0"
dim LCD_RS as sbit at Re0_bit
LCD_EN as sbit at Re2_bit
LCD_D4 as sbit at Rd4_bit
LCD_D5 as sbit at Rd5_bit
LCD_D6 as sbit at Rd6_bit
LCD_D7 as sbit at Rd7_bit
LCD_RS_Direction as sbit at TRISe0_bit
LCD_EN_Direction as sbit at TRISe2_bit
LCD_D4_Direction as sbit at TRISd4_bit
LCD_D5_Direction as sbit at TRISd5_bit
LCD_D6_Direction as sbit at TRISd6_bit
LCD_D7_Direction as sbit at TRISd7_bit
dim gsm_state, obsah, pom, pom_cislo, i, flag as byte
dim start as word
dim cislo as string[12]
dim sms_obsah as string[20]
dim sms_prevod as string[10]
' send ATC command
sub procedure send_atc(dim const s as ^char)
while(s^ <> 0)
UART1_Write(s^)
inc(s)
wend
UART1_Write(0x0D)
end sub
sub procedure send_atm(dim const s as ^char)
while(s^ <> 0)
UART1_Write(s^)
inc(s)
wend
UART1_Write(0x26)
end sub
sub procedure prevod ()
for i = 0 to 9
uart1_write(sms_obsah[i]) 'vypis na linku pro kontrolu analyzator
next i
pom = sms_obsah[9]>>7
sms_prevod[10] = sms_obsah[9] and 0x80 'prevod zatim jen
sms_prevod[9] = ((sms_obsah[8])<<1) + pom 'nafofr zjednodus
pom = sms_obsah[8]>>6
sms_prevod[8] = ((sms_obsah[7])<<2) + pom
pom = sms_obsah[7]>>5
sms_prevod[7] = ((sms_obsah[6])<<3) + pom
pom = sms_obsah[6]>>4
sms_prevod[6] = ((sms_obsah[5])<<4) + pom
pom = sms_obsah[5]>>3
sms_prevod[5] = ((sms_obsah[4])<<5) + pom
pom = sms_obsah[4]>>2
sms_prevod[4] = ((sms_obsah[3])<<6) + pom
pom = sms_obsah[3]>>1
sms_prevod[3] = ((sms_obsah[2])<<7) + pom
pom = sms_obsah[2]>>7
sms_prevod[2] = sms_obsah[1] and 0x80
sms_prevod[1] = ((sms_obsah[1])<<1) + pom
pom = sms_obsah[1]>>6
sms_prevod[0] = ((sms_obsah[0])<<2) + pom
lcd_chr(1,1,sms_prevod[10])
lcd_chr(1,2,sms_prevod[9])
lcd_chr(1,3,sms_prevod[8])
lcd_chr(1,4,sms_prevod[7])
lcd_chr(1,5,sms_prevod[6])
lcd_chr(1,6,sms_prevod[5])
lcd_chr(1,7,sms_prevod[4])
lcd_chr(1,8,sms_prevod[3])
lcd_chr(1,9,sms_prevod[2])
lcd_chr(1,10,sms_prevod[1])
lcd_chr(1,11,sms_prevod[0])
end sub
sub procedure interrupt
if pir1.5 then 'preruseni pri naplnenym uartu
obsah = uart1_read()
start = start<< 8 'hledam znaky 0x3037 tj 07 to je zacatek
start = start + obsah 'vlastniho kodu sms nemsuim se zabyvat
if start = 0x3037 then ' ruznyma hlasenima a doprovodnym
flag.1 = 1 'kodem
pom = 0 ' odpocitavam az k tel cislu a pote k obsahu zpravy '
pom_cislo = 0 'cislo pro adresaci bytu ve stringu -
end if 'zapis tlf. cisla a obsahu zpravy
if flag.1 = 1 then
portd.0 = 1
pom = inc(pom)
if (pom > 20) and (pom < 33) then
cislo[pom_cislo] = obsah 'prijme byte a ulozi do stringu
pom_cislo = inc(pom_cislo) ':cislo na pozici :pom_cislo
end if
if pom = 49 then
pom_cislo = 0
end if
if pom = 75 then
flag.1 = 0
flag.2 = 1
end if
if (pom > 53) and (pom < 74) then 'to same jako u tlf. cisla
sms_obsah[pom_cislo]= obsah
pom_cislo = inc(pom_cislo)
end if
portd.0 = 1
end if
pir1.5 = 0
end if
end sub
main:
' Main program
porta = 0
portb = 0
portc = 0
portd = 0
porte = 0
adcon1 = 6
cmcon = 7
trisa = 0x20
trisb = 0
trisc = 0
trisd = 0
trise = 0
PIE1.RCIE = 1
INTCON.PEIE = 1
INTCON.GIE = 1
lcd_init()
lcd_cmd (_lcd_clear)
lcd_cmd (_LCD_cursor_OFF)
uart1_init (19200)
send_atc(@ATC2) 'zakazat echo
sms_obsah = "00000000000000000000"
while true
send_atc(@ATC1)
delay_ms(500)
delay_ms(500)
if flag.2 = 1 then
flag.2 = 0
send_atc(@ATC0)
end if
' if flag.0 = 1 then
flag.0 = 0
prevod()
' end if
wend
end.