electronics forum

Rules | Recent posts | topic RSS | Search | Register  | Log in

SMS controlled using PIC16F873A


Post new topic  Reply to topic    EDAboard.com Forum Index -> Microcontrollers -> SMS controlled using PIC16F873A
Author Message
jeremy goh



Joined: 03 Jun 2009
Posts: 1


Post10 Jun 2009 4:31   

pic16f873a register


Hi guys, i'm currently using a PIC16F873A as MCU and siemens TC35 GSM modem for implementing a SMS controlled project. Can i request for source code plz? Would appreciate ur help because i've been testing with the existing ASM code that i've obtained from a fren which is not really working.

The codes are as below:
include "P16F873a.inc"
list p=16F873a,r=dec
errorlevel -302
__Config _XT_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF & _PWRTE_ON

cblock 0x20
w_temp
p_temp
s_temp
msec
sec
min
counter
input
r0
r1
r2
fault_count
flag
bitcnt
add
STORE1
pin1
pin2
pin3
pin4
dataL
data1
data2
data3
data4
data5
data6
data7
data8
data9
data10
data11
data12
data13
data14
data15
data16
data17
data18
data19
data20
endc

XD equ D'123' ; crystal divider (123)
org 0x2100
de "1234"
org 0x00
goto start


org 0x04 ;void interrupt(void)
ISR
bcf INTCON,GIE
movwf w_temp
swapf STATUS,W
movwf s_temp
movfw PCLATH
movwf p_temp
btfsc INTCON,T0IF
goto _interrupt
goto INTX

_interrupt
bcf INTCON,T0IF
incf msec,F
movf msec,W
sublw XD
btfss STATUS,Z
Goto INTX
clrf msec
incf sec,F
call increase
movf sec,W
sublw 0x3c
btfss STATUS,Z
Goto INTX
clrf sec
incf min,F
movf min,W
sublw 0x3c
btfss STATUS,Z
Goto INTX
clrf min
Goto INTX

INTX
movlw D'4'
movwf TMR0
movfw p_temp
movwf PCLATH
swapf s_temp,W
movwf STATUS
swapf w_temp,F
swapf w_temp,W
bsf INTCON,GIE
retfie

increase
incf counter,F
movlw D'5'
xorwf counter,w
btfsc STATUS,Z
clrf counter
return


_initialize
bsf STATUS,RP0
movlw B'00000100'
;TOCS=osc, PSA=TMR0
movwf OPTION_REG
bcf STATUS,RP0
movlw 0xa0
movwf INTCON
return

;---------------------------------------------------------------------------------

start
bsf STATUS,RP0
movlw H'06'
movwf ADCON1
movlw B'00000000'
movwf TRISA
movlw B'11110000'
movwf TRISB
movlw B'10000000'
movwf TRISC
MOVLW B'00000101'
MOVWF OPTION_REG
call empty_reg
movlw D'10'
call delay
call RS232
call _initialize
call at_cmgf
goto main

empty_reg
movlw 0x20
movwf FSR
empty_reg1
movlw H'7F'
xorwf FSR,W
btfsc STATUS,Z
return
clrf INDF
incf FSR,F
goto empty_reg1

; SET BAUD RATE TO COMMUNICATE WITH PC
; BOOT BAUD RATE = 9600, NO PARITY, 1 STOP BIT

RS232 bsf STATUS,RP0
movlw 0x19
movwf SPBRG
movlw b'00100100'
movwf TXSTA
bcf STATUS,RP0
movlw b'10000000'
movwf RCSTA

clrf dataL
settle decfsz dataL,F

START_UP
goto settle

movf RCREG,W
movf RCREG,W
movf RCREG,W

return

;RECEIVE CHARACTER FROM RS232 AND STORE IN W
;THIS ROUTINE DOES NOT RETURN UNTIL A CHARACTER IS RECEIVED

Receive clrf counter
clrf flag
clrf input
bsf RCSTA,CREN
Receive1
movf counter,W
addlw D'255' - D'2' + 1
btfsc STATUS,C
goto bye
btfss PIR1,RCIF
goto Receive1
bcf RCSTA,CREN
movf RCREG,W
movwf input
return

bye movf RCREG,W
movwf input
bsf flag,0
retlw ' '

; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING

send bcf INTCON,GIE
movwf TXREG

TransWt bsf STATUS,RP0
WtHere btfss TXSTA,TRMT
goto WtHere
bsf INTCON,GIE
return

;--------------------------------------------------------------------------------

delay
movwf r0
delay1 movlw D'133'
movwf r1
delay2 movlw D'250'
movwf r2
delay3 decfsz r2,F
goto delay3
decfsz r1,F
goto delay2
decfsz r0,F
goto delay
return

;-------------------------------------------------------------------------------

; WRITE DATA TO EEPROM ROUTINE MODIFIED FOR PIC16F87X DEVICES
; ACCORDING TO DATA SHEET DS30292A PAGE 43
; THIS ROUTINE IS ENTERED WITH W HOLDING
; THE EEPROM BYTE ADDRESS AT WHICH DATA
; IS TO BE STORED. THE DATA TO BE STORED
; IS HELD IN STORE1

SETPRM
bcf STATUS,RP0
movwf EEADR
bcf STATUS,RP1
movf STORE1 ,W
bsf STATUS,RP1
movwf EEDATA
bsf STATUS,RP0
bcf EECON1,EEPGD
bsf EECON1,WREN

MANUAL movlw H'55'
movwf EECON2
movlw H'AA'
movwf EECON2
bsf EECON1,WR

CHKWRT
btfss PIR2,EEIF
goto CHKWRT
bcf PIR2,EEIF

return

;..............

; READ DATA FROM EEPROM ROUTINE MODIFIED FOR PIC16F87X DEVICES
; ACCORDING TO DATA SHEET DS30292A PAGE 43
; THIS ROUTINE IS ENTERED WITH W HOLDING
; THE EEPROM BYTE ADDRESS TO BE READ
PRMGET
movwf EEADR
bsf STATUS,RP0
bcf EECON1,EEPGD
bsf EECON1,RD
bcf STATUS,RP0
movf EEDATA,W
bcf STATUS,RP1
return

;------------------------------------------------------------------------------

;Alphabets to GSM modem

A_ movlw 'A'
call send
return

B_ movlw 'B'
call send
return

C_ movlw 'C'
call send
return

D_ movlw 'D'
call send
return

E_ movlw 'E'
call send
return

F_ movlw 'F'
call send
return

G_ movlw 'G'
call send
return

H_ movlw 'H'
call send
return

I_ movlw 'I'
call send
return

J_ movlw 'J'
call send
return

K_ movlw 'K'
call send
return

L_ movlw 'L'
call send
return

M_ movlw 'M'
call send
return

N_ movlw 'N'
call send
return

O_ movlw 'O'
call send
return

P_ movlw 'P'
call send
return

Q_ movlw 'Q'
call send
return

R_ movlw 'R'
call send
return

S_ movlw 'S'
call send
return

T_ movlw 'T'
call send
return

U_ movlw 'U'
call send
return

V_ movlw 'V'
call send
return

W_ movlw 'W'
call send
return

X_ movlw 'X'
call send
return

Y_ movlw 'Y'
call send
return

Z_ movlw 'Z'
call send
return

c0 movlw '0'
call send
return

c1 movlw '1'
call send
return

c2 movlw '2'
call send
return

c3 movlw '3'
call send
return

c4 movlw '4'
call send
return

c5 movlw '5'
call send
return

c6 movlw '6'
call send
return

c7 movlw '7'
call send
return

c8 movlw '8'
call send
return

c9 movlw '9'
call send
return

comma
movlw ','
call send
return

plus
movlw '+'
call send
return

equal
movlw '='
call send
return

inv
movlw '"'
call send
return

next
movlw ' '
call send
return

enter
movlw D'13'
call send
return

arrow
movlw H'1A'
call send
return

;-------------------------------------------------------------------------------------

at_cmgf
call A_
call T_
call plus
call C_
call M_
call G_
call F_
call equal
call c1
call enter
return

at_cmgr
call A_
call T_
call plus
call C_
call M_
call G_
call R_
call equal
call c1
call enter
return

at_cmgd
call A_
call T_
call plus
call C_
call M_
call G_
call D_
call equal
call c1
call enter
movlw D'5'
call delay
call A_
call T_
call plus
call C_
call M_
call G_
call D_
call equal
call c2
call enter
movlw D'5'
call delay
call A_
call T_
call plus
call C_
call M_
call G_
call D_
call equal
call c3
call enter
movlw D'5'
call delay
call A_
call T_
call plus
call C_
call M_
call G_
call D_
call equal
call c4
call enter
movlw D'5'
call delay
call A_
call T_
call plus
call C_
call M_
call G_
call D_
call equal
call c5
call enter
movlw D'5'
call delay
return

clr_data
clrf data1
clrf data2
clrf data3
clrf data4
clrf data5
clrf data6
clrf data7
clrf data8
clrf data9
clrf data10
clrf data11
clrf data12
clrf data13
clrf data14
clrf data15
clrf data16
clrf data17
clrf data18
clrf data19
clrf data20
return

;-------------------------------------------------------------------------

read_msg
movlw D'0'
call PRMGET
movwf pin1
movlw D'1'
call PRMGET
movwf pin2
movlw D'2'
call PRMGET
movwf pin3
movlw D'3'
call PRMGET
movwf pin4
call clr_data
clrf flag
movlw data1
movwf FSR
call at_cmgr
read_msg1
call Receive
btfsc flag,0
return
movlw 'P'
xorwf input,W
btfss STATUS,Z
goto read_msg1
movf input,W
movwf INDF
incf FSR,F
read_msg2
call Receive
btfsc flag,0
return
movf input,W
movwf INDF
incf FSR,F
goto read_msg2

check_msg
bcf flag,1
movlw 'P'
xorwf data1,W
btfss STATUS,Z
return
movlw 'I'
xorwf data2,W
btfss STATUS,Z
return
movlw 'N'
xorwf data3,W
btfss STATUS,Z
return
movf pin1,W
xorwf data4,W
btfss STATUS,Z
return
movf pin2,W
xorwf data5,W
btfss STATUS,Z
return
movf pin3,W
xorwf data6,W
btfss STATUS,Z
return
movf pin4,W
xorwf data7,W
btfss STATUS,Z
return
movlw '1'
xorwf data9,W
btfsc STATUS,Z
call on_relay1
movlw '0'
xorwf data9,W
btfsc STATUS,Z
call off_relay1
movlw '1'
xorwf data10,W
btfsc STATUS,Z
call on_relay2
movlw '0'
xorwf data10,W
btfsc STATUS,Z
call off_relay2
return

on_relay1
bsf PORTA,0
bcf PORTA,2
clrf fault_count
return

off_relay1
bcf PORTA,0
bcf PORTA,2
clrf fault_count
return

on_relay2
bsf PORTA,1
bcf PORTA,2
clrf fault_count
return

off_relay2
bcf PORTA,1
bcf PORTA,2
clrf fault_count
return

;--------------------------------------------------------------------------

wait_msg
clrf bitcnt
clrf flag
call clr_data
movlw data1
movwf FSR
wait_msg3
call Receive
movlw '+'
xorwf input,W
btfss STATUS,Z
goto wait_msg3
goto wait_msg4
wait_msg1
call Receive
movlw D'5'
xorwf bitcnt,W
btfsc STATUS,Z
goto wait_msg2
btfsc flag,0
goto wait_msg
wait_msg4
movf input,W
movwf INDF
incf FSR,F
incf bitcnt,F
goto wait_msg1
wait_msg2
bcf flag,1
movlw '+'
xorwf data1,W
btfss STATUS,Z
return
movlw 'C'
xorwf data2,W
btfss STATUS,Z
return
movlw 'M'
xorwf data3,W
btfss STATUS,Z
return
movlw 'T'
xorwf data4,W
btfss STATUS,Z
return
movlw 'I'
xorwf data5,W
btfss STATUS,Z
return
bsf flag,1
return

;------------------------------------------------------------------------------

check_change_pass
bcf flag,1
movlw 'P'
xorwf data1,W
btfss STATUS,Z
return
movlw 'I'
xorwf data2,W
btfss STATUS,Z
return
movlw 'C'
xorwf data3,W
btfss STATUS,Z
return
movf pin1,W
xorwf data4,W
btfss STATUS,Z
return
movf pin2,W
xorwf data5,W
btfss STATUS,Z
return
movf pin3,W
xorwf data6,W
btfss STATUS,Z
return
movf pin4,W
xorwf data7,W
btfss STATUS,Z
return
movf data9,W
movwf STORE1
movlw D'0'
call SETPRM
movf data10,W
movwf STORE1
movlw D'1'
call SETPRM
movf data11,W
movwf STORE1
movlw D'2'
call SETPRM
movf data12,W
movwf STORE1
movlw D'3'
call SETPRM
clrf fault_count
bcf PORTA,2
return

main
movf fault_count,W
addlw D'255' - D'3' + 1
btfsc STATUS,C
bsf PORTA,2
call wait_msg
btfss flag,1
goto main
incf fault_count,F
call read_msg
call check_msg
call check_change_pass
change_pin
call at_cmgd
goto main

end
Back to top
Google
AdSense
Google Adsense




Post10 Jun 2009 4:31   

Ads




Back to top
Arabic versionBulgarian versionCatalan versionCzech versionDanish versionGerman versionGreek versionEnglish versionSpanish versionFinnish versionFrench versionHindi versionCroatian versionIndonesian versionItalian versionHebrew versionJapanese versionKorean versionLithuanian versionLatvian versionDutch versionNorwegian versionPolish versionPortuguese versionRomanian versionRussian versionSlovak versionSlovenian versionSerbian versionSwedish versionTagalog versionUkrainian versionVietnamese versionChinese version
Post new topic  Reply to topic    EDAboard.com Forum Index -> Microcontrollers -> SMS controlled using PIC16F873A
Page 1 of 1 All times are GMT + 1 Hour
Similar topics:
Sending SMS using nokia 3310 controlled by PIC16f84a (2)
Sms Controlled Dc motor (2)
sms controlled switch (22)
how to send sms using SIM without using mobile (2)
PWM setup for PIC16F873A (2)
SMS using MicroController (3)
SMS using microcontroler (9)
projects using sms (3)
HELP The Internal EEPROM Life-Cycle For PIC16F873A 876A (3)
Read SMS using MCU (3)


Abuse || Administrator || Moderators || Support us || sitemap
topic RSS