You are on page 1of 18

Sistema de seguridad con emisión de

mensaje SMS
INDICE

1.- INTRODUCCIÓN……………………………………………………………………………… Pág. 1

2.- ELEMENTOS HARDWARE EMPLEADOS………………………………………………. Pág. 1

3.- COMUNICACIÓN SERIE (Comandos at)............................................................................. Pág. 4

4.- EXPLICACIÓN DEL PROGRAMA.……………………………………………………….. Pág. 5

5.- CONCLUSIONES……………………………………………………………………………... Pág. 9

ANEXO (Código fuente del programa)…………………………..……………………………… Pág. 10

PRÁCTICA Nº 1
ASIGNATURA: DSM
CURSO: 2003/2004
MARIO CASTELLANO DÍAZ
HUMBERTO BARRIENTOS GONZÁLEZ

1
1.- INTRODUCCIÓN

El objetivo del desarrollo de esta práctica es aplicar los conocimientos acerca de las
características de los microcontroladores, concretamente del pic16f84, que se han adquirido en la primera
práctica de la asignatura, enfrentándose directamente con una práctica que puede ser un diseño de algún
aparato real.

Dentro de tantos diseños de circuitos basados en microprocesador como existen y se pueden


inventar, se ha escogido realizar una alarma con comunicación a través de móvil, diseño interesante
puesto que el móvil se ha convertido en un aparato que siempre se tiene al alcance de la mano, y así
podemos “vigilar” nuestro vehículo o casa. La práctica consiste en conectar un pic a un móvil a través de
una comunicación serie, y mandar desde el móvil al teléfono los comandos necesarios para mandar un
sms, realizar una llamada o incluso leer un sms recibido en el móvil.
Adicionalmente, esta práctica puede ser el principio de innumerables aplicaciones. Por ejemplo,
se puede usar este dispositivo para construir un sistema de control remoto, operativo desde cualquier parte
del mundo. Para usos industriales, se podría monitorizar si una máquina está en marcha o si se ha
superado un umbral de seguridad predefinido. Los técnicos son alertados automáticamente y pueden
operar remotamente sobre las máquinas. Las aplicaciones comerciales son también numerosas. Todos los
elementos de una casa automatizada pueden ser controlados y monitorizados desde un teléfono móvil.

2.- ELEMENTOS HARDWARE EMPLEADOS

Se ha usado el Micro’Pic Trainer que dispone de una pantalla LCD, un display siete segmentos,
conjunto de conmutadores conectados a los pines RA del microcontrolador, y un teclado entre otros
elementos. De todo el conjunto de componentes dispuestos en este entrenador se han los conmutadores
(para simular la activación de la alarma y la configuración de la misma).

2
El microcontrolador que se ha usado ha sido el un Microcontrolador de 8 Bits CMOS con
memoria EEPROM (PIC16F84) de la empresa MICROCHIP.

Los pines que hemos utilizado son:

• RA0,..., RA2 como puertos de entrada que se leen las alarmas que se
han activado.
• RB0 para recibir la señal del móvil (RX).
• RB1 para enviar la señal al móvil (TX).

En este caso vamos a trabajar sobre un Ericsson T10, y lo primero es averiguar el "pinout" o
identificación de las señales que nos encontramos en el conector del móvil.

1. + alimentación externa
2. entrada RS232 (TTL)
3. masa (GND digital)
4. salida RS232 (TTL)
5. +5v salida
6. Test (0=Normal - 1=modo test)
7. Silencio (Mute)
8. Micro y auricular interno/externo
(0=Externo - abierto=Interno)
9. masa (analógica)
10. sin uso
11. entrada de BF
12. salida de BF

Según este "pinout" se puede confirmar que se dispone de: entradas y salidas de audio para
conectar un "manos libres" externo, "mute" control para silenciar el altavoz, señales para acceder a la
memoria de programa Flash, alimentación, batería, y señales RX y TX serie.

3
Lo siguiente que necesitamos es un "cable de datos", que es un adaptador de niveles RS232 -
TTL, con el conocido MAX232. Este cable nos permite conectar el móvil a un ordenador personal o un
microcontrolador externo. El cable se puede encontrar en un comercio dedicado a la telefonía móvil, pero
en esta práctica se ha optado por construir uno usando el siguiente esquema:

El circuito se ha diseñado de forma que el cable situado en la esquina superior izquierda de la


placa está conectado al pin 9 del max232, por lo que es la señal RX, y el cable que está situado en la
esquina inferior izquierda de la placa está conectado al pin 10 del max232, por lo que es la señal TX. La
línea horizontal superior de la placa es el ( - ) y la segunda línea horizontal inferior es el ( + ). La
alimentación necesaria para que funcione este circuito se obtiene de la propia batería del teléfono, con los
cables conectados al pinout.

4
3.- COMUNICACIONES SERIE (comandos AT)

La siguiente tarea es localizar información sobre las señales y comandos que se manejan en el
conector del móvil. Que protocolos se usan, que clase de buses, y sobre todo que comandos se deben
enviar para conseguir nuestros fines. Al igual que los módem, los móviles aceptan comandos AT (más
exactamente una extensión del juego de comandos AT). Además del manejo de los SMS (mensajes de
texto), estas extensiones controlan muchas funciones, incluyendo identificación del móvil, gestión de la
agenda de direcciones, nivel de la señal, llamadas en espera y desvío de las mismas, aviso de errores,
estado de la batería, melodías, volumen, además de otros comandos no estándar creados por los
fabricantes de cada modelo.

Realizamos pruebas con el teléfono conectado al ordenador personal (PC) para probar el cable, el
móvil y para entender los comandos extendidos AT usados por los móviles. Para ello se activa el
programa HYPERTERMINAL (de Windows) y se configura el puerto al que está conectado el cable:
velocidad 9600bps., no paridad, 8 bits, 1 bit de stop, en el caso del móvil usado. Una vez configurado, se
teclea una a y una t, si se escriben en la pantalla, quiere decir que existe comunicación en ambos sentidos
con el móvil, puesto que el móvil nos ha mandado lo mismo que nosotros hemos escrito. Si se le da al
intro, tiene que aparecer en pantalla lo siguiente:

AT
OK
Después de haber tenido éxito con la comunicación, se pueden probar diversos comandos para
probar que existe comunicación, pero los que son importantes para el desarrollo de esta práctica son los
siguientes:

AT+CPMS="ME", "ME"
+CMPS: 7,15,7,15,7,15
OK
Este comando configura el móvil para que use la memoria del teléfono en vez de la memoria de
la tarjeta sim, útil para reenviar los sms desde la memoria del móvil.

AT+CMGR=1
+CMGR: 1,,27
0791934329005000040C9193433728501400001060314104350809D02A735A043
DAB54
OK
Este comando lee un sms guardado en la memoria, concretamente lee el sms que coincide con el
número que está después del signo “=”, si no existe sms en dicha posición, el móvil devuelve ERROR.

ATD646535071;
RING
Este comando realiza una llamada al número situado después del ATD y antes del “;”, en este
caso es el 646535071, y el móvil devuelve RING por cada tono de llamada.

AT+CMSS=1
+CMSS :96
OK
Este comando sirve para enviar el sms situado en la posición que indique el número, en este caso
el mensaje enviado sería el situado en la posición 1.

5
Esta técnica que acabamos de ver además de resultar fácil para el microcontrolador de nuestro
montaje, también lo será para nosotros, ya que nos resultará más fácil de comprender y programar.

Visto esto, queda claro que hay que configurar el móvil para que pueda mandar sms, es decir, que el
sms que se quiere enviar tiene que estar guardado y enviado a un número de teléfono para poder luego
reenviarlo con un sencillo comando AT. Si no se hace así, se complicaría bastante el programa, puesto
que habría que conocer exactamente los parámetros del protocolo de mensajes sms PDU, del cual hay
información en la página web en la que nos hemos basado para realizar este proyecto.

Otra ventaja de usar solo 4 comandos AT de entre los disponibles es asegurarnos una alta
compatibilidad entre diversos fabricantes y modelos de móviles. Los fabricantes incluyen solo pequeñas
variaciones sobre el estándar. Y aunque este montaje solo ha sido probado con el Ericsson T10, sin
modificación alguna el circuito debería funcionar con otros modelos de móviles que soporten el mismo
subgrupo de comandos.

4.- EXPLICACIÓN DEL PROGRAMA

La primera parte de programación consiste en conseguir conectar el pic al ordenador a través del
puerto serie configurado a velocidad 9600bps., no paridad, 8 bits, 1 bit de stop. En Internet, y tras muchas
horas de búsqueda, se encontró un programa que comunicaba mediante rs232 el pic con el ordenador con
los parámetros de configuración para la comunicación antes mencionados. El programa recibe un byte por
el puerto configurado para ello y lo envía por el puerto configurado como tx, consiguiendo así un eco.
Para probarlo se ha hecho uso del Hyperterminal de Windows, y tras algunas modificaciones en el
código, se consiguió tener éxito en la comunicación con el pic.(fichero adjunto rs232.asm).

Luego, se realizó un programa que manda las letras AT y el retorno de carro, desactivando la
interrupción del pic usada en el programa original, puesto que el pic no tiene que recibir datos. Se usó
para probar, con el Hyperterminal, que el pic enviaba los comandos correctamente (fichero adjunto
rs232at.asm).

Para probar el programa principal se conectó la línea tx del móvil al puerto que está conectado al
ordenador para ver que comandos estaba recibiendo el móvil (siempre produce eco de los comandos
entrantes) y para comprobar si devuelve ok o error, y la línea rx del móvil se conectó al puerto
correspondiente en el microcontrolador.

El programa principal es una extensión del anterior, en el que se crearon algunos procedimientos
que envían los comandos necesarios, y controlando las entradas conectadas a los interruptores de la placa
para determinar que comando enviar (alarmovil.asm).

Programa principal

En las primeras líneas se definen todas las variables y registros del 16f84 por defecto y se añade
la palabra de configuración para el wacth dog, el pwrte y el oscilador.

6
list p=16f84
#include <p16f84.inc>

__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC

Configuramos el registro STATUS, para el banco 1 y el banco 0, también se declaran dos


variables lógicas, que se explicarán mas adelante, además se define el puerto para transmitir datos TX y
para recibir datos RX.

#DEFINE BANK0 BCF STATUS,RP0


#DEFINE BANK1 BSF STATUS,RP0
TRUE EQU 1
FALSE EQU 0
#DEFINE RX PORTB,0
#DEFINE TX PORTB,1

Luego se definen las variables DATO que es para guardar el byte recibido o enviado, los
registros para retardos RET1 y RET2, además un contador para contar los bytes enviados.

DATO EQU 0x0C


RET1 EQU 0x0D
RET2 EQU 0x0E
CONT8 EQU 0x0F
TMPFLAG EQU 0x10

La siguiente función es TXDATO. Esta se encarga de enviar el byte almacenado en DATO por
el puerto definido como TX. Para transmitir los bits, dispone de un contador que se va decrementando a
medida que va enviando bits. Cuando envía un bit, desplaza el registro DATO.

TXDATO
MOVLW 8
MOVWF CONT8
BCF TX
BIT2
CALL TIME
RRF DATO,F
BTFSS STATUS,C
BCF TX
BTFSC STATUS,C
BSF TX
DECON
DECFSZ CONT8,F
GOTO BIT2
CALL TIME
BSF TX
CALL TIME
RETURN

Las funciones TIME y TIME1 son dos retardos de 52 uS y 104 uS que se utilizan para
sincronizar y para adaptar los tiempos a la comunicación de 9600bps.

7
RET_CARRO

Realiza la transmisión serie del código del carácter retorno de carro y el carácter fin de línea para
que se vea correctamente en el Hyperterminal de Windows. Existe una espera añadida para poder ver los
resultados.
MOVLW d'13'
MOVWF DATO
CALL TXDATO
MOVLW 0FFh
MOVWF CONT8
CALL TIME
DECFSZ CONT8,F
MOVLW d'10'
MOVWF DATO
CALL TXDATO
RETURN

AT_CMPS

Envía carácter a carácter el código de configuración AT+CPMS="ME","ME" al móvil para


configurar el mismo para que use la memoria interna y no la de la tarjeta sim.

AT_CMSS

Envía la ristra por el puerto serie “AT+CMSS=” , según el valor guardado en el registro “a”
envía hasta un total de 5 mensajes distintos almacenados en la memoria del móvil.

ATD646535071;

Envía la ristra de caracteres ATD646535071; , para poder hacer desde nuestro móvil una llamada
telefónica al número que se encuentra después del atd y antes del “;”.

INICIO;

Este es el programa principal. Primero se configuran los puertos para que funcionen
adecuadamente como entrada y otros como salida. Luego manda el comando de configuración
at+cpms=”ME”,”ME” para poder reenviar los sms desde el móvil.

Después de esto, se entra en un bucle infinito. Primero se espera a que se active la señal RA0,
que simula la señal que la alarma envía cuando se ha disparado. Si se ha disparado la alarma, se
comprueba el estado de otras dos señales (RA1 y RA2), que representan la configuración que le hemos
dado al móvil, es decir, si está ra1 activada manda el sms guardado en la posición 1, si no está activada
esta y está activada ra2, manda el sms guardado en la posición 2, y si no está activada ninguna de las dos,
realiza una llamada al número de móvil programado.

Una vez enviado el comando de envío de sms o de llamada al móvil, se realiza una espera a que
la alarma sea desactivada (señal ra0). Cuando esto ocurre, se realiza una espera para que el puerto ra0 se
estabilice a nivel bajo, puesto que si no se lleva a cabo esta espera, el móvil una vez desactivado el puerto
vuelve al principio del bucle denominado INFINITO y detecta que la alarma está activada, cuando en
realidad no lo está.

INICIO
;
;PROGRAMACION DE LOS PUERTOS
BANK1

8
BSF PORTA,0
BSF PORTA,1
BSF PORTA,2
BSF PORTA,3

BCF TX ;PROGRAMA PIN TX COMO SALIDA

BANK0
CALL AT_CMPS

INFINITO
;MOVLW 0
CLRF TMPFLAG

BTFSS PORTA,0
GOTO INFINITO

DOS
BTFSS PORTA,1
GOTO TRES
BSF TMPFLAG,1
CALL AT_CMSS
GOTO ESPERA

TRES
BTFSS PORTA,2
GOTO WARNING
BSF TMPFLAG,2
CALL AT_CMSS
GOTO ESPERA

WARNING
CALL ATD

ESPERA
BTFSC PORTA,0
GOTO ESPERA

MOVLW 0FFh ;Espera para permitir que la entrada RA0 se estabilice a nivel bajo
MOVWF CONT8
CALL TIME
CALL TIME
CALL TIME
CALL TIME
CALL TIME
DECFSZ CONT8,F

GOTO INFINITO
;
END

9
5.- CONCLUSIONES

Con esta práctica se ha aprendido que no es tan difícil crear un dispositivo controlado por
microcontrolador que sea útil, a la vez que nos hemos dado cuenta de la importancia que tienen los
protocolos de comunicación y los propios buses de datos, puesto que si el móvil no dispusiera de ningún
tipo de bus de comunicación externa, conseguir comunicar el móvil con un microcontrolador externo
sería muy difícil o imposible.

En esta práctica han existido diversas complicaciones. La primera de todas fue conseguir el
material necesario, es decir, el móvil y el cable. Otra complicación añadida, fue la de que hubo que
reparar el móvil, además, como no disponíamos de un conector para el pinout, tuvimos que conectar unos
cables directamente, con el problema de que se rompió una pieza del pinout y hubo que conectar finos
cables para poder conectar los verdaderos cables.

Otra complicación con respecto al hardware y al material, fue la de conseguir puentear el cable
de comunicación serie para el ordenador, puesto que el cable pertenecía a un ratón, y no tenía las señales
puenteadas que necesitábamos. Por último, la última complicación hardware que hemos tenido, es que
debido que uno de los integrantes del grupo no podía asistir al laboratorio por las mañanas, decidimos
comprar un programador y montar el circuito por nuestra cuenta, cosa que nos dio muchos quebraderos de
cabeza, puesto que el programador estaba mal, y luego cuando conseguimos programar nos dimos cuenta
de que nos hacía falta el reloj externo, y decidimos esperar dos días que faltaban para la llegada de
septiembre para realizar la práctica en el laboratorio.

En cuanto a complicaciones software, el primer problema fue conseguir configurar el


Hyperterminal de Windows correctamente para la comunicación con el móvil. Otro de los problemas fue
conseguir una rutina para el microcontrolador que realizara una comunicación serie con los parámetros
adecuados, que nos costó mucho tiempo de búsqueda por Internet. A parte de esto, hubieron pocas
complicaciones más, como la de encontrar los caracteres de retorno de carro y el de dobles comillas.

10
ANEXO (Código programa principal)

;Programa: Comunicación asíncrona a móvil Ericsson t10 vía RS232


;--Dependiendo de la entrada del puerto A activada, envía un sms o realiza una llamada
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Parámetros de comunicación RS232: 9600,N,8,1
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
list p=16f84
#include <p16f84.inc>
;
;PALABRA DE CONFIGURACIÓN:
;
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;
;==========================================================================
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
TRUE EQU 1
FALSE EQU 0
;==========================================================================
;DEFINICION DE BITS:
;
#DEFINE RX PORTB,0
#DEFINE TX PORTB,1
;
;==========================================================================
;DEFINICION DE VARIBLES
;
DATO EQU 0x0C ;Dato a Transmitir o Recibido RS232
RET1 EQU 0x0D ;para retardo de bit RS232
RET2 EQU 0x0E ;para retardo de bit RS232
CONT8 EQU 0x0F ;Contador de bits en rutinas RX y TX
TMPFLAG EQU 0x10 ; Para guardar que tipo de sensor se ha activado
;==========================================================================
ORG 0
GOTO INICIO
;==========================================================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 8
MOVWF CONT8
BCF TX
BIT2
CALL TIME
RRF DATO,F
BTFSS STATUS,C
BCF TX
BTFSC STATUS,C
BSF TX
DECON
DECFSZ CONT8,F
GOTO BIT2
CALL TIME
BSF TX
CALL TIME
RETURN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME2 ;RETARDO DE 52 uS104 uS

11
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 1
MOVWF RET1
T1
MOVLW .14
MOVWF RET2
T2
DECFSZ RET2,F
GOTO T2
DECFSZ RET1,F
GOTO T1
NOP
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME ;104 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 1
MOVWF RET1
T3
MOVLW .28
MOVWF RET2
T4
DECFSZ RET2,F
GOTO T4
DECFSZ RET1
GOTO T3
NOP
NOP
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RET_CARRO ;Envía el retorno de carro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW d'13'
MOVWF DATO
CALL TXDATO
MOVLW 0FFh
MOVWF CONT8
CALL TIME
DECFSZ CONT8,F
MOVLW d'10'
MOVWF DATO
CALL TXDATO
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AT_CMPS ;AT+CPMS="ME","ME"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW "a"
MOVWF DATO
CALL TXDATO

MOVLW "t"
MOVWF DATO
CALL TXDATO

MOVLW "+"

12
MOVWF DATO
CALL TXDATO

MOVLW "c"
MOVWF DATO
CALL TXDATO

MOVLW "P"
MOVWF DATO
CALL TXDATO

MOVLW "m"
MOVWF DATO
CALL TXDATO

MOVLW "s"
MOVWF DATO
CALL TXDATO

MOVLW "="
MOVWF DATO
CALL TXDATO

MOVLW d'34'
MOVWF DATO
CALL TXDATO

MOVLW "M"
MOVWF DATO
CALL TXDATO

MOVLW "E"
MOVWF DATO
CALL TXDATO

MOVLW d'34'
MOVWF DATO
CALL TXDATO

MOVLW ","
MOVWF DATO
CALL TXDATO

MOVLW d'34'
MOVWF DATO
CALL TXDATO

MOVLW "M"
MOVWF DATO
CALL TXDATO

MOVLW "E"
MOVWF DATO
CALL TXDATO

MOVLW d'34'
MOVWF DATO
CALL TXDATO

CALL RET_CARRO

13
RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AT_CMSS ;AT+CMSS=SA (dependiendo del bit de RA que esté activo)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW "a"
MOVWF DATO
CALL TXDATO

MOVLW "t"
MOVWF DATO
CALL TXDATO

MOVLW "+"
MOVWF DATO
CALL TXDATO

MOVLW "c"
MOVWF DATO
CALL TXDATO

MOVLW "m"
MOVWF DATO
CALL TXDATO

MOVLW "s"
MOVWF DATO
CALL TXDATO

MOVLW "s"
MOVWF DATO
CALL TXDATO

MOVLW "="
MOVWF DATO
CALL TXDATO

BTFSC TMPFLAG,1
GOTO SMS1
BTFSC TMPFLAG,2
GOTO SMS2
BTFSC TMPFLAG,3
GOTO SMS3
BTFSC TMPFLAG,4
GOTO SMS4
BTFSC TMPFLAG,5
GOTO SMS5

GOTO HECHO

SMS1
MOVLW "1"
MOVWF DATO
CALL TXDATO
GOTO HECHO

SMS2
MOVLW "2"
MOVWF DATO

14
CALL TXDATO
GOTO HECHO

SMS3
MOVLW "3"
MOVWF DATO
CALL TXDATO
GOTO HECHO

SMS4
MOVLW "4"
MOVWF DATO
CALL TXDATO
GOTO HECHO

SMS5
MOVLW "5"
MOVWF DATO
CALL TXDATO

HECHO
CALL RET_CARRO

RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ATD ;ATD646535071;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW "a"
MOVWF DATO
CALL TXDATO

MOVLW "t"
MOVWF DATO
CALL TXDATO

MOVLW "d"
MOVWF DATO
CALL TXDATO

MOVLW "6"
MOVWF DATO
CALL TXDATO

MOVLW "4"
MOVWF DATO
CALL TXDATO

MOVLW "6"
MOVWF DATO
CALL TXDATO

MOVLW "5"
MOVWF DATO
CALL TXDATO

MOVLW "3"
MOVWF DATO
CALL TXDATO

15
MOVLW "5"
MOVWF DATO
CALL TXDATO

MOVLW "0"
MOVWF DATO
CALL TXDATO

MOVLW "7"
MOVWF DATO
CALL TXDATO

MOVLW "1"
MOVWF DATO
CALL TXDATO

MOVLW ";"
MOVWF DATO
CALL TXDATO

CALL RET_CARRO

RETURN

;***************************************************************************

INICIO
;
;PROGRAMACION DE LOS PUERTOS
BANK1

BSF PORTA,0
BSF PORTA,1
BSF PORTA,2
BSF PORTA,3

BCF TX ;PROGRAMA PIN TX COMO SALIDA


BCF OPTION_REG,INTEDG ;PROGRAMA INT CON FLANCO DE BAJADA
BANK0
CALL AT_CMPS

INFINITO
;MOVLW 0
CLRF TMPFLAG

BTFSS PORTA,0
GOTO INFINITO

DOS
BTFSS PORTA,1
GOTO TRES
BSF TMPFLAG,1
CALL AT_CMSS
GOTO ESPERA

TRES
BTFSS PORTA,2
GOTO WARNING
BSF TMPFLAG,2

16
CALL AT_CMSS
GOTO ESPERA

WARNING
CALL ATD

ESPERA
BTFSC PORTA,0
GOTO ESPERA

MOVLW 0FFh ;Espera para permitir que la entrada RA0 se estabilice a nivel bajo
MOVWF CONT8
CALL TIME
CALL TIME
CALL TIME
CALL TIME
CALL TIME
DECFSZ CONT8,F

GOTO INFINITO
;
END

17

You might also like