Please post your complete code in a code window here, then we can see what you forgot in your code.
Please post your complete code in a code window here, then we can see what you forgot in your code.
here is my code as my board could not read serin and serout, i have no choice but to use other alternative like hserout.
'************************************************* ******************************
' Hardware Defines *
'************************************************* ******************************
'PIC16F876A specific
;__config _XT_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
DEFINE LOADER_USED 1
DEFINE OSC 20
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 129
DEFINE HSER_CLROERR 1
'************************************************* ******************************
' Define program variables *
'************************************************* ******************************
NumLen var byte ' Tel Number length
PhoneNo var byte[16]' Phone Number string
SPhoneNo var byte[16]' Phone number in SMS
Index var byte ' Index of the SMS
Cmd var byte[7] ' The command
X var byte ' Temp Var
MsgType var byte
position var byte
'************************************************* ******************************
' Inputs / Outputs & Port Assignments *
'************************************************* ******************************
Tx var PORTB.6 ' Tx Rs232 to Terminal
Rx var PORTB.7 ' Rx Rs232 from Terminal
'************************************************* ******************************
' Set TRIS and system REGISTERS *
'************************************************* ******************************
TRISB=%11111111 ' Port B input
TRISC=%00000000 ' Port C output
'Message to be send: LOCK and UNLOCK
InitModem:
pause 1000
gosub init
pause 1000
Begin:
MsgType = 0
LOOP:
PORTC.7 = 0
GOSUB ChkSMS
GoSUB Read_input
PAUSE 10000
IF MsgType=0 then
GOTO LOOP
endif
END
'************************************************* ******************************
' Subroutines *
'************************************************* ******************************
'************************************************* ******************************
' SMS Subroutines
'************************************************* ******************************
Init:
' Subroutine to initialise the module
HSerout2 [Tx,84,"AT",13] ' CLIP command
SERIN2 Rx,84,5000, Problem,[Wait ("OK",13)] ' Loopback to NotReady
HSerout2 [Tx,84,"AT+CLIP=1",13] ' CLIP command
Pause 500
HSerout2 [Tx,84,"AT+CNMI=3,0",13] ' SMS now not polled
Pause 500
HSerout2 [Tx,84,"AT+CMGF=1",13] ' Set Text Mode
Pause 500
'Preferred Message Storage: ME on Phone
HSerout2 [Tx,84,"AT+CPMS=",34,"ME",34,13] ' Changed for GR47
Pause 4000
'Set the storage to SIM
HSerout2 [Tx,84,"AT+CPBS=",34,"SM",34,13] ' Otherwise cannot read memory loc1
SERIN2 Rx,84,5000, Problem,[Wait ("OK",13)] ' Loopback to NotReady
'Select Character Set “UTF-8” : Universal text format, 8 bits
HSerout2 [Tx,84,"AT+CSCS=",34,"UTF-8",34,13] ' for @ sign problem
pause 1000
HSerout2 [Tx,84,"AT&W",13] 'Store User Profile to non volatile memory
pause 1000
'HSerout2 Tx,84,"AT+CMGD=1,4",13
'pause 1000
Return
ChkSMS:
HSEROUT2 [Tx,84,"AT+CMGL=",34,"ALL",34,13]
SERIN2 Rx,84,2500,OutSMS,[Wait("MG")]
gosub rdsms
OutSMS: 'no sms received
return
RdSMS:
' at+cmgl="ALL"
' +CMGL: 1,"REC UNREAD","+60123288328","PEC 9720 A","03/05/09,12:10:59+32",145,5
' Test1
' +CMGL: 2,"REC UNREAD","+60123288328","PEC 9720 A","03/05/09,12:13:27+32",145,5
' Test2
'
' OK
SERIN2 Rx,84,1500,KL_SMS,[Wait(":"),Skip 1,DEC Index]
SERIN2 Rx,84,1500,KL_SMS,[Wait(34),Wait(","),Skip 2,STR PhoneNo\12,Wait(10),STR Cmd\4]
SERIN2 Rx,84,4000,WAITOK,[Wait("OK")]
gosub chknumlen ' check number length again
pause 10000
Gosub SendMsg
KL_SMS:
' If I got an SMS I have to Kill it now
IF Index=0 Then return
pause 5000
HSerout2 [Tx,84,"AT+CMGD=",DEC Index,13]
index=0
pause 1000
RETURN
'************************************************* ******************************
ChkNumLen:
' Here I check the Length of Phone Number String
' Now determine the PhoneNo string length by looking for the inv commas
For x=1 to 15
IF PhoneNo[x]=34 Then
NumLen=x
return
Endif
Next x
NumLen=16 ' cant Find so must be 16
if PhoneNo[0]=34 then Numlen=0 ' we look for ""
return
'************************************************* ******************************
SendMsg:
GoSub ChkMsgType
Select case MsgType
case 1:
GOSUB LOCK
CASE 2:
GOSUB UNLOCK
end select
pause 10000
MsgType=0
'HSEROUT2 Tx,84,["AT+CMGS=",34,STR PhoneNo\NumLen, 34,13]
'HSERIN2 Rx,84,4000,Problem, [Wait(">")]
'Select case 1
' case 1:
' HSEROUT2 Tx,84,["Message received OK", $1a]
' CASE 2:
' HSEROUT2 Tx,84,["Message received Fail", $1a]
'end select
RETURN
'************************************************* *****************************
ChkMsgType:
IF Cmd[0]="L" && Cmd[1]="O" && Cmd[2]="C" && Cmd[3]="K" Then
MsgType = 1
RETURN
ENDIF
IF Cmd[0]="U" && Cmd[1]="N" && Cmd[2]="L" && Cmd[3]="O" && Cmd[4]="C" && Cmd[5]="K" Then
MsgType = 2
RETURN
ENDIF
MsgType=0
return
'************************************************* *****************************
LOCK:
PORTC.7 = 1
pause 5000
RETURN
UNLOCK:
PORTC.7 = 0
pause 5000
RETURN
''*************** Manual control of servo using push-buttons*******************
Read_input:
if PORTB.7 = 0 then
PORTC.6 = 0
endif
if PORTB.7 = 1 then
PORTC.6 = 1
endif
pause 50
goto Read_input
'************************************************* *****************************
BKERROR:
GOTo BKERROR
WAITOK:
GOTo WAITOK
'************************************************* ******************************
Problem:
Pause 1000
GOTO Problem
thx for the post, but constructive help please
seriously important.
First of all The used chip has only 1 hardware uart so HSERIN and HSEROUT without the 2 behind is normaly used.
Then you combine behind the HSEROUT the modifiers of the SEROUT command.
I can tell you ofcource what you had to type, but you will learn more by yourself if you read the exact used modifiers used for the HSEROUT (HSERIN) command and the SEROUT (SERIN) command and what is the difference beteween those two commands.
You can find it in the book that came with the compiler or you can download it by www.melabs.com
hey mat,
thx for the help but i still dun quite get it.
meaning that my HSEROUT is code wrongly??
am i missing something??
i meant i dun quite get this part
"without the 2 behind is normaly used.
Then you combine behind the HSEROUT the modifiers of the SEROUT command."
Indeed.
Look into the documents and you see:
HSEROUT [Item{,item....}] as HSEROUT [data1] when more HSEROUT [data1, data2, data3]
SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item...}
The Hser... commands are already defined by the statements:
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 129
DEFINE HSER_CLROERR 1
I hope you understand what I meant to say.
In your programm you made a mix of the the both.
hey mat,
thx for all the help.
so how should i go about changing the codes??
basically i nv use HSEROUT before,
so i dun really understand it.
Like Mat said earlier, your usage of the HSEROUT command is almost totally incorrect. RTFM applies in this case...or even look at the command structure in the manual, or Mat's post earlier.
hey ski and mat,
thx for all ur help.
but i guess im kinda slow in getting it.
wats RTFM supposed to mean??
i dun quite get it
still i gt 1 small problem.
is there difference between a receiving and transmitting code??
cuz recently i wrote a transmitting code,
its able to send sms, but when i save the same thing for receiving. it doesnt work.
and lastly,
wat does
"Define ONINT_USED 1 'Serves as LOADER_USED for versions before 2.33 "
supposed to mean.
the serious part is,
i dun haf a manual.
thats why im tryin to figure my way out.
i duno anythin abt writing programme.
PBP??
im using microcode studio to write my program.
Microcode Studio is a Suite, a front end for other programs, nothing more than a fancy editor (albiet a FANCY editor that handles a lot of stuff for you).
PBP is the compiler, MPLAB/MPASM (or PM) is the assembler, and you have your choice of a bunch of programmers.
So, which version of MCS, PBP, MPLAB/MPASM are you using?
Which programmer?
Bookmarks