en otra ventana

Anuncio
APÉNDICE A
;**********************************************************************
;
*
;
TESIS
*
;
ADQUISICION DE LA POSICION DE UN VEHÍCULO
*
;
*
;**********************************************************************
;
*
;
Programa que recibe datos de un GPS y los transmite
*
;
*
;
1. Recibe datos del GPS
*
;
2. Filtra la informacion
*
;
3. Espera un tiempo (X) para empezar a transmitir
*
;
los datos recibidos a la Creatalink
*
;
*
;**********************************************************************
;
*
;
Filename:
filtro.asm
*
;
Date:
26/Nov/03
*
;
File Version:
*
;
*
;
Author: Cesar Martinez Mozo
*
;
Company: UDLA
*
;
*
;
*
;**********************************************************************
list
p=16f874
#include <p16f874.inc>
definitions
; list directive to define processor
; processor specific variable
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC &
_WRT_ENABLE_ON & _LVP_ON & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm
file.
; The lables following the directive are located in the respective .inc
file.
; See respective data sheet for additional information on configuration
word.
;======================================================================
;
DEFINICION DE VARIABLES
;======================================================================
w_temp
status_temp
BYTE_COUNTER
BYTE_ARROBA
BYTE_E
BYTE_Q
DATOS_PTR0
DATOS_PTR1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x70
0x71
0X72
0X40
0X45
0X71
0X20
0XA0
; variable used for context saving
; variable used for context saving
;CONTADOR DE BYTES
;40=CODIGO ASCII DE @
;45=CODIGO ASCII DE E
;71=CODIGO ASCII DE q
;INICIO DE MEMORIA RAM LIBRE BANCO 0
;INICIO DE MEMORIA RAM LIBRE BANC0 1
92
LIM_BANK0
EQU
BRG_VALUE
BYTE_PARO
EQU
EQU
0X32
;LIMITE DE MEMORIA RAM DEL BANCO 0
;32h=50 LOCALIDADES DE MEMORIA
0x81
0X0A
;2A=CODIGO ASCII DE *
NO_SEG
EQU
0X01
;NUMERO DE SEGUNDOS EN HEXADECIMAL
SEC_COUNTER
EQU
0X73
;CONTADOR DE SEGUNDOS
;**********************************************************************
ORG
0x000
; processor reset vector
clrf
PCLATH
; ensure page bits are cleared
goto
LOAD
; go to beginning of program
ORG
0x004
movwf
w_temp
movf STATUS,w
bcf
STATUS,RP0
movwf status_temp
; interrupt vector location
; save off current W register contents
; move status register into W register
; ensure file register bank set to 0
; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
bcf
STATUS,RP0
movf
status_temp,w
movwf STATUS
swapf
w_temp,f
swapf
w_temp,w
retfie
; ensure file register bank set to 0
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
; return from interrupt
;======================================================================
;
TIEMPO DE ESPERA ANTES DE INICIAR RECEPCION
;======================================================================
LOAD
;ESPERA TIEMPO PARA QUE LA CREATALINK
CLRF STATUS
;ENCUENTRE LA RED DE SKYTEL
CLRF PORTB
BSF
STATUS,RP0
CLRF TRISB
BCF
STATUS, RP0
BSF
PORTB, 0X07
MOVLW 0X3C
;3CH=60D
MOVWF SEC_COUNTER
;CARGA EL CONTADOR CON 60 SEG
CALL TIMER
BCF
PORTB, 0X07
;======================================================================
;
INICIALIZACION
;======================================================================
MAIN
CLRF
CLRF
MOVLW
MOVWF
CLRF
BSF
STATUS
BYTE_COUNTER
DATOS_PTR0
FSR
PORTB
STATUS, RP0
;INICIALIZA EL CONTADOR
;CONFIGURACION DEL PUERTO B
;PARA LA DETECCION DE ERRORES
93
CLRF
CLRF
BCF
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
TRISB
TRISC
TRISC, 0X06
TRISC, 0X07
BRG_VALUE
SPBRG
0X26
TXSTA
STATUS, RP0
0X90
RCSTA
;CONFIGURA TX = SALIDA
;CONFIGURA RX = ENTRADA
;CONFIGURA EL BAUD RATE
;RX DE 8 BITS, BRG ALTA
;HABILITA TX
;HABILITA EL PUERTO SERIAL ASINCRONO
;RECEPCION CONTINUA
;======================================================================
;
SELECION DE INFORMACION
;======================================================================
SEL_INFO
BCF
STATUS, RP0
BTFSS PIR1, RCIF
GOTO SEL_INFO
BCF
BTFSC
GOTO
BTFSC
GOTO
MOVF
XORLW
BTFSS
GOTO
PIR1, RCIF
RCSTA, FERR
ERR_FERR
RCSTA, OERR
ERR_OERR
RCREG, W
BYTE_ARROBA
STATUS, Z
SEL_INFO
;COPIA EL DATO RECIBIDO A W
CHK_ARROBA
BCF
STATUS, RP0
BTFSS PIR1, RCIF
GOTO CHK_ARROBA
bcf
BTFSC
GOTO
BTFSC
GOTO
MOVF
xorlw
btfss
goto
pir1, rcif
RCSTA, FERR
ERR_FERR
RCSTA, OERR
ERR_OERR
RCREG, W
byte_arroba
status, z
sel_info
;COPIA EL DATO RECIBIDO A W
chk_e
bcf
status, rp0
btfss pir1, rcif
goto chk_e
bcf
pir1, rcif
BTFSC RCSTA, FERR
GOTO ERR_FERR
94
BTFSC
GOTO
MOVF
xorlw
btfss
goto
RCSTA, OERR
ERR_OERR
RCREG, W
byte_e
status, z
sel_info
;COPIA EL DATO RECIBIDO A W
chk_q
bcf
status, rp0
btfss pir1, rcif
goto chk_q
bcf
BTFSC
GOTO
BTFSC
GOTO
MOVF
xorlw
btfss
goto
pir1, rcif
RCSTA, FERR
ERR_FERR
RCSTA, OERR
ERR_OERR
RCREG, W
byte_q
status, z
sel_info
;COPIA EL DATO RECIBIDO A W
;======================================================================
;
RECEPCION
;======================================================================
RX_DATOS
BCF
STATUS, RP0
BTFSS PIR1, RCIF
GOTO
RX_DATOS
BCF
BTFSC
GOTO
BTFSC
GOTO
PIR1, RCIF
RCSTA, FERR
ERR_FERR
RCSTA, OERR
ERR_OERR
MOVF
XORLW
BTFSC
CALL
BYTE_COUNTER, W
LIM_BANK0
STATUS, Z
CAMB_BANK1
MOVF
CALL
MOVWF
INCF
incf
GOTO
RCREG, W
COMP_RX
INDF
FSR
byte_counter
RX_DATOS
;ESPERA TERMINO DE TRANSMISION
;POLEO DE RCIF
;RCIF=1==>RECEPCION COMPLETA
;RCIF=0==>RSR ES LEIDO Y ESTA VACIO
;Z=0 DIFERENTES=>BANCO0
;Z=1 IGUALES=>BANCO1
;COPIA EL DATO RECIBIDO A W
;COPIA W A UNA LOCALIDAD
;INCREMENTA EL FSR
;incrementa el contador
;=======================================================================
;
TANSMISION
;=======================================================================
95
TX_DATOS
BCF
bcf
MOVLW
MOVWF
clrf
MOVLW
MOVWF
TX_AUN
movf
xorlw
btfsc
call
MOVF
CALL
INCF
incf
MOVWF
ESPERA
BCF
BTFSS
GOTO
BCF
GOTO
STATUS, RP0
rcsta, cren
BYTE_PARO
INDF
byte_counter
DATOS_PTR0
FSR
byte_counter, w
lim_bank0
status, z
camb_bank1
INDF, W
COMP_TX
FSR
byte_counter
TXREG
;deshabilita la recepcion
;GUARDA COMO DATO FINAL AL BYTE DE PARO
;inicializa el contador
;Z=0 DIFERENTES=>BANCO0
;Z=1 IGUALES=>BANCO1
;EL DATO APUNDADO POR FSR, SE COPIA A W
;ESPERA TERMINO DE TRANSMISION
STATUS, RP0
PIR1, TXIF
ESPERA
PIR1, TXIF
TX_AUN
;======================================================================
;
SUBRUTINA TIMER
;======================================================================
TIMER
movwf
w_temp
; save off current W register contents
movf STATUS,w
; move status register into W register
movwf status_temp
; save off contents of STATUS register
CLRF STATUS
;Borra el registro STATUS
;CLRF PORTB
;MOVLW
NO_SEG
;MOVWF
SEG_COUNTER
CLRF T1CON
;Borra el registro T1CON
MOVLW 0x0A
;Preescaldor 1:1, Clk externo,
MOVWF T1CON
;sincroniza Clk, stop Timer1
BCF
PIR1, TMR1IF
;Desactiva TMR1IF
BSF
STATUS, RP0
;CLRF TRISB
BSF
PIE1,TMR1IE
;Habilita el TMR1IE
AGAIN
BCF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
STATUS, RP0
PIR1, TMR1IF
0x00
TMR1L
0x80
TMR1H
;Carga el TMR1L con 0x00
;Carga el TMR1H con 0x80
96
BSF
T1CON, TMR1ON
WAIT_SEC
BTFSS PIR1, TMR1IF
GOTO WAIT_SEC
DECF SEC_COUNTER
BTFSS STATUS, Z
GOTO AGAIN
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
RETURN
;Start Timer1
;ESPERA 1 SEGUNDO
;DECREMENTA EL CONTADOR DE SEGUNDOS
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
;=======================================================================
;
SUBRUTINA CAMB_BANK1
;=======================================================================
CAMB_BANK1
movwf
w_temp
; save off current W register contents
movf STATUS,w
; move status register into W register
movwf status_temp
; save off contents of STATUS register
MOVLW DATOS_PTR1
MOVWF FSR
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
RETURN
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
;=======================================================================
;
SUBRUTINA SEL_INFO
;=======================================================================
SEL_INFO1
movwf
w_temp
; save off current W register contents
movf STATUS,w
; move status register into W register
movwf status_temp
; save off contents of STATUS register
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
RETURN
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
;=======================================================================
;
SUBRUTINA COMP_RX
;=======================================================================
COMP_RX
movwf
w_temp
movf STATUS,w
;SUBRUTINA QUE COMPARA W CON ASTERISCO
; save off current W register contents
; move status register into W register
97
movwf status_temp
MOVF
XORLW
BTFSC
GOTO
W_TEMP, W
BYTE_PARO
STATUS, Z
TX_DATOS
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
RETURN
; save off contents of STATUS register
;COMPRUBA SI W = BYTE_PARO
;Z=0 => DIFERENTES; Z=1 => IGUALES
;INICIA LA TRANSMISION
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
;=======================================================================
;
SUBRUTINA COMP_TX
;=======================================================================
COMP_TX
movwf
w_temp
movf STATUS,w
movwf status_temp
MOVF
XORLW
BTFSC
GOTO
W_TEMP, W
BYTE_PARO
STATUS, Z
REST_BP
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
RETURN
;SUBRUTINA QUE COMPARA W CON ASTERISCO
; save off current W register contents
; move status register into W register
; save off contents of STATUS register
;COMPRUBA SI W = BYTE_PARO
;Z=0 => DIFERENTES; Z=1 => IGUALES
;RESTAURA EL BYTE DE PARO
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
;======================================================================
;
RESTAURA EL BYTE DE PARO
;======================================================================
REST_BP
movf
status_temp,w
movwf STATUS
MOVF W_TEMP, W
; retrieve copy of STATUS register
; restore pre-isr STATUS register contents
; restore pre-isr W register contents
INCF FSR
incf byte_counter
MOVWF TXREG
ESPERA1
;ESPERA TERMINO DE TRANSMISION
BCF
STATUS, RP0
BTFSS PIR1, TXIF
GOTO ESPERA1
goto load
;=====================================================================
;
ERRORES
;=====================================================================
err_ferr
bcf
status, rp0
movlw 0x01
98
movwf portb
goto error_rx
err_oerr
bcf
movlw
movwf
goto
status, rp0
0x02
portb
error_rx
error_rx
goto
error_rx
END
;directive 'end of program'
99
Descargar