jeremy goh
Joined: 03 Jun 2009 Posts: 1
|
10 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
|
|