I am totally new to these commands and am going to start a project which is as follows:
I am going to work on a project that will turn on or off the electrical equipments in your home by sending "sms" from your personal cellphone to the home cellphone.
For this I require two modems .
One that will send the sms(My Cellphone) and one that will receive the SMS(Cellphone at home).
I have got two modems and a SIMCOM 300 Chip On which I want to write the AT Commands to retrive the SMS From my home modem and according to the command(Let Us Say "FAN OFF/ON")it will turn ON or OFF my Electrical Equipments in my home.
I have also got a GM28 Chip.
Please Suggest me any Idea Or any Sites To reffer to for initially starting and completing my project.Again I am totally blank about the AT programming Thing.
After a lot of search I have found a programming code to do the stuff but it is of no use untill I fully Understand it.
I have pasted the code here for any reference.
The file is in .asm format.
Please help :doh:
;
;
; REMOTE CONTROL WITH SMS, FOR ERICSSON T10 GSM MOBILE PHONES
;
; This circuit can handle 8 devices by sending SMS message with a mobile phone.
; 30-oct-2002 v1.0
; 04.10.2003 v1.01 --- I have change some routines to be more workable
; writed with AVR studio 4.2
;
;
; by Serasidis Vasilis
;
; Home: http:
; email: info@serasidis.gr
;
;
; Target: AT90S2313 with 8 MHz crystal
; PD0= RxD
; PD1= TxD
; PB0-PB7= 8 bit output. You can drive with this port, 8 relays, 1 to eatch pin.
; Send SMS message to T10, like this format: 11100101
; That its mean, arm the relays No 1,3,6,7,8 and disarm the relays 2,4 and 5.
;
;
;
.nolist ;Suppress listing of include file
.include "2313def.inc" ;Define chip particulars
.list
.equ BAUD =51 ;9600 bps at 8.00 MHz.
.def temp =R16 ;temporary storage register
.def EEard =R17 ;EEPROM address to read from
.def Txbyte =R18 ;Data to be transmitted
.def Rxbyte =R19 ;Received data
.def temp2 =R20
.def temp3 =R21
.def temp4 =R25
.def temp5 =R29
.def temp6 =R30
.def ramtemp =r24 ;temporary storage register
.def ramsize =r22 ;size of block to be copied
.def EEard =R23 ;EEPROM address to read from
.def RamAdr =R26
.def delay1 =R27
.def delay2 =R28
.def delay3 =R31
.cseg
.org 0
;========================================================================
reset:
; Setup buffers and pointers
ldi temp,RAMEND
out SPL,temp ;Init Stack Pointer
ldi temp,0b11111111
out DDRB,temp
ldi temp,BAUD
out UBRR,temp ;Set baud rate generator
;=========== Set UART, as Transmiter =====================
ldi temp,0b00011000
out UCR,temp ;Enable UART Tx w/o interrupts
;==============================================================
rcall long_delay
ldi EEard,0x17
load:
rcall eeread
tst Txbyte ;see if at end of message
breq br1 ;if zero found, start over
rcall b_transmit ;sent out char
rjmp load
br1:ldi ramadr,96 ;Its the first byte of RAM
ldi temp2,16 ;16 bytes ram
uart2ram:
rcall receive ;call getchar
mov YL,ramadr ;init Z-pointer
st Y+,rxbyte ;store data to RAM
inc ramadr ;
dec temp2
brne uart2ram ;if not done, loop more
ldi ramadr,96 ;
;--------------------------------------------------------
ldi ramadr,102 ;Memory potition for letter 'G' in ram
mov YL,ramadr ;Send the ram address
ld txbyte,Y+ ;load the contain of selected potition
cpi txbyte,'G' ;Look if its 'G' letter
breq aa ;If yes, go to read all message from the phone
;--------------------------------------------------------
ldi EEard,37
rcall delay
rcall delay
rcall delay
rcall delay
rjmp load
;===================================================================
aa: ldi EEard,37
load2:
rcall eeread
rcall b_transmit ;sent out char
tst Txbyte ;see if at end of message
brne load2 ;if zero found, start over
ldi ramadr,96 ;Its the first byte of RAM
ldi temp2,87 ;87 bytes ram
uart2ram2:
rcall receive ;call getchar
mov YL,ramadr ;init Z-pointer
st Y+,rxbyte ;store data to RAM
inc ramadr ;
dec temp2
brne uart2ram2 ;if not done, loop more
;===================================================================
rcall nextline ;\
ldi txbyte,'+' ; \
rcall b_transmit ; \
ldi temp2,117 ; / Print the service center number
ldi temp3,6 ; /
rcall read ;/
rcall nextline ;\
ldi txbyte,'+' ; \
rcall b_transmit ; \
ldi temp2,135 ; / Print the sender`s number
ldi temp3,6 ; /
rcall read ;/
rcall nextline ;\
ldi temp2,151 ; \
ldi temp3,1 ; \
rcall read ; \
ldi txbyte,'-' ; \
rcall b_transmit ; \
ldi temp3,1 ; \
rcall read ; |
ldi txbyte,'-' ; |
rcall b_transmit ; |
ldi temp3,1 ; |
rcall read ; \
ldi txbyte,' ' ; / Print the date and the time of the received message.
rcall b_transmit ; |
ldi temp3,1 ; |
rcall read ; |
ldi txbyte,':' ; |
rcall b_transmit ; /
ldi temp3,1 ; /
rcall read ; /
ldi txbyte,':' ; /
rcall b_transmit ; /
ldi temp3,1 ; /
rcall read ;/
;=================================================================================
; Here its the routine for convert the ASCII to HEX and stored to RAM address 185
;=================================================================================
ldi temp2,185 ;
ldi temp3,8 ;8 bytes message
ldi ramadr,167 ;First byte of the message in the RAM (message like this 11001101)
septet:
mov YL,ramadr ;
ld txbyte,Y+ ;
subi txbyte,0x30
mov eeard,txbyte
rcall eeread
swap txbyte
mov temp4,txbyte
inc ramadr
mov YL,ramadr ;
ld txbyte,Y+ ;
subi txbyte,0x30
mov eeard,txbyte
rcall eeread
add temp4,txbyte
mov txbyte,temp4
inc ramadr
mov YL,temp2 ;init Z-pointer
st Y+,txbyte ;store data to RAM
inc temp2
dec temp3
brne septet
;==============================================================
; convert the HEX values to septets
;==============================================================
clr Rxbyte
rcall nextline ;
ldi temp3,7 ; Number of septets (characters).
ldi ramadr,185 ;Load the 9 hex bytes from...
ldi temp5,7
ldi temp6,1
mov temp,temp6
mov delay1,temp5
mov YL,ramadr ;\
ld txbyte,Y+ ; \ print the 1st septet
cbr txbyte,0x80 ; /
rcall b_transmit ;/
cpi txbyte,0x31 ;Check if txbyte is 0x31
brne more ;If not...
sbr Rxbyte,1 ;
more:
lsl Rxbyte
mov YL,ramadr ;
ld temp2,Y+ ;
inc ramadr ;
mov YL,ramadr ;
ld txbyte,Y+ ;
dec6:
lsl txbyte ;
dec temp
brne dec6
dect:
lsr temp2 ;rotate n times
dec delay1 ;
brne dect ;
add txbyte,temp2 ;
cbr txbyte,0x80 ;
cpi txbyte,0x31 ;Check
brne aaa ;If not go to
sbr Rxbyte,1
aaa:
rcall b_transmit
inc temp6
mov temp,temp6
dec temp5
mov delay1,temp5
dec temp3
brne more
out portB,Rxbyte ;output the message from GSM to PortB
rcall long_delay
ldi EEard,49 ;Set the eeprom address to "Delete SMS" command
load3:
rcall eeread
tst Txbyte ;see if at end of message
breq br2 ;if zero found, start over
rcall b_transmit ;sent out char
rjmp load3
;rcall nextline ;
br2:ldi EEard,37
rjmp load
;=====================================================
read:
inc temp2
mov ramadr,temp2
mov YL,ramadr
ld txbyte,Y+
rcall b_transmit
dec ramadr
mov YL,ramadr
ld txbyte,Y+
rcall b_transmit
inc temp2
dec temp3
brne read
ret
;=============================================================
;=============================================================
EERead:
sbic EECR,EEWE ;if EEWE not clear
rjmp EERead ; wait more
out EEAR,EEard ;output address
;***** Issue EEPROM read strobe twice due to a bug in AVR!
sbi EECR,EERE ;set EEPROM Read strobe 2nd time
;This instruction takes 4 clock cycles since
;it halts the CPU for two clock cycles
in Txbyte,EEDR ;get data
rcall delay
inc EEard ;point to next EE address
ret
rjmp EERead
ret
;=============================================>
nextline:
ldi txbyte,0x0d
rcall b_transmit
ldi txbyte,0x0a
rcall b_transmit
ret
;========================================================================
;***************************************************************************
; Transmiting routine (The data from the eeprom through the AVR are going to
; the PC computer)
;***************************************************************************
b_transmit:
sbis USR,UDRE ;is UART transmitter ready?
rjmp b_transmit
out UDR,txbyte ;sent out char
ret
;*************************************************************************
; Receiving routine (The data from PC computer through to the AVR are going
; to the eeprom)
;*************************************************************************
receive:
sbis USR,RXC
rjmp receive
in Rxbyte,UDR
ret
;*******************************************************************
; Stop and Delay routines
;*******************************************************************
long_delay:
ldi delay3,32
waitmore2:
rcall delay
dec delay3
brne waitmore2
ret
delay:
ldi delay2,0xff
waitsome:
ldi delay1,0xff
waitmore:
dec delay1
brne waitmore
dec delay2
brne waitsome
ret
.eseg
msg: .db 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,"-------"
.db 0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
msg2: .db "AT+CPMS=",'"',"ME",'"' ,0x0d,0x0a ;Select the phone memory ("ME")
.db "AT+CMGR=1" ,0x0d,0x0a, 0 ;read the received message(Memory possition 1)
.db "AT+CMGD=1" ,0x0d,0x0a, 0 ;delete the received message (Memory possition 1)