PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ

DEPARTAMENTO ACADÊMICO DE CIÊNCIAS EXATAS

ENGENHARIA ELÉTRICA

ÊNFASE EM TELECOMUNICAÇÕES

Valquiria aparecida alcantara lima

 

 

 

 

 

 

 

 

 

CONTROLE DE ACESSO COM RFID

 

 

 

 

 

Trabalho Acadêmico apresentado ao programa de aprendizagem de Microprocessadores e Arquitetura de Computadores II do Curso Superior de Engenharia Elétrica – ênfase Telecomunicações da Pontifícia Universidade Católica do Paraná.

Professor: Altair Olivo Santim

 

 

 

CURITIBA

2009

1.     Introdução

   É pensando em segurança que muitos lugares estão se utilizando da prática do acesso apenas para pessoas autorizadas. O controle físico de acesso pode ser obtido através de pessoas ou por aparatos mecânicos como fechaduras e chaves; ou através de outros meios tecnológicos, como sistemas baseados em cartões de acesso.

Atualmente, a confiabilidade nas informações de acesso de veículos e pedestres a condomínios ou empresas tem sido buscada visando uma maior segurança aos moradores ou funcionários. Neste sentido, um controle efetivo do acesso nos ambientes citados deve ser eficaz ao liberar rapidamente os acessos permitidos e, principalmente, bloquear os acessos indevidos. Para tanto, os equipamentos utilizados na automação devem ser também confiáveis, com resposta rápida e registro correto dos eventos ocorridos.

O mercado de identificação por rádio frequência oferece diversas soluções diferentes para a identificação. Os tags usados para este fim, vão desde cartões e chaveiros de proximidade, com número de identificação único.

Os equipamentos usados nesta aplicação possuem tecnologia de Identificação por Rádio Freqüência (RFID), com leitura de transponders (tags) de proximidade, sem contato.

2.     Objetivos

    Construir um protótipo de um sistema para controle de acesso utilizando a tecnologia RFID para bloquear os acessos indevidos.

3.     Descrição

O projeto propõe a criação de um controle de acesso que utiliza o  tag RFID, o qual libera o acesso somente as pessoas autorizadas, ou seja, as que possuem o cartão com esta tecnologia.

Devido a alta confiabilidade das informações dos acessos pode ser utilizado em lugares onde se faz necessário um controle específico das pessoas que desejam adentrar.

 E a segurança deste projeto está no fato que o cartão  somente armazena um número de série e não usa criptografia. No entanto este projeto apenas identifica o uso do Rfid, não possui a finalidade de identificar o número de série pré-gravado.

 

4.     Diagrama em blocos

 

3.1      DETALHAMENTO DO DIAGRAMA DE BLOCOS

Sinal kHz  - Usando um gerador de função para emitir uma frequência em torno de  150kHz.

RFID – No indutor descrito anteriormente, é encostado o cartão tag RFID de frequência de 125kHz.

DETECTOR – O sinal entra em um diodo detector e sai retificado e vai para um circuito  RC.

Sinal retificado e Sinal sem pulsos.

FILTROS SINAL FSK – há dois amplificadores neste estágio o primeiro funciona como passa baixa removendo boa parte do volume da portadora e o segundo como passa faixa extraindo o sinal FSK (onde a frequência de uma portadora varia no tempo de acordo com os bits a transmitir).

Sinal FSK.

MICROCONTROLADOR – o sinal que sai do ultimo amplificador pode ser conectado diretamente ao PIC e deste extrair o sinal digital.

DECODIFICAÇÃO SINAL FSK (SOFTWARE) – através de subrotinas que utilizam o TM R0 para marcar o tempo passado entre as mudanças detectadas na saída do comparador..

FILTRO PASSA BAIXA – o sinal que sai do microcontrolador é muito baixo para ser repassado para o relé por isso utilizamos essa configuração.

LIBERAÇÃO DO ACESSO – circuito final que utiliza um relé que libera ou não o acesso. Pode ser conectado a qualquer sistema seja, catraca, fechadura elétrica ou qualquer outro dispositivo

1.              DEFINIÇÃO DOS COMPONENTES

Para a montagem do leitor foi necessário cálculos dos componentes.

1.1.1          Indutor-antena e do capacitor

Com a fórmula abaixo foi possível definir o valor do indutor. Neste caso usamos fio de cobre que foi enrolado a fim de construir o anteparo. Utilizamos para isso alfinetes presos em um papelão formando um área quadrada 6x6cm. Valores: x=6cm, y=cm, h=1cm, b=0,3cm e o N (números de espiras) = 34. Obtemos então 160uH.

Tendo este valor usamos outra fórmula para definir o capacitor. Como o cartão RFID trabalha com uma frequência de 125kHz e responde muito bem a frequência mais altas, utilizamos nos calculos 150kHz. Conseguimos então 10nF.

1.1.2      Detector de Envoltória

Para operar o diodo detector necessita de um circuito auxiliar neste caso um circuito RC. Esse vai definir a constante de tempo de descarga que necessita ser adequada para não prejudicar a envoltória da portadora. Com valores de R=10M e C=1n que foi definido a fim de  chegar a constante abaixo.

2.     Materiais utilizados E VALORES

 

RELAÇÃO DE MATERIAL DO PROJETO

PARA O LEITOR RFID:

Resistores 4.7k, 10M, 10k, 160k, 3k, 100k, dois 1k ohms

Capacitores 56n, quatro 1n, 110p, dois 22p  F

Transistores 2N3904, 2N3906, VN2222LL

Diodo 1N4148

Indutor (cabo de cobre 1225cm)

Amplificador: dois TL062

Microcontrolador PIC16F628

Cristal de Quartzo XTAL 12MHZ

Cartão RFID

PARA O DRIVER

Transistor TIP31C

Relê 12v/10A - 220v

Diodo 1N4004

Resistores 560, 2.2k

 1 capacitor de 10pF

1 resistor de 630 ohms.

 

 

 

 

 

 

 

 

 

 

 

3.     FOTOS

 

Na foto 1 podemos verificar o circuito montado. A esquerda o leitor do cartão e a direita o circuito com o relé. 

 

Foto 1.

Foto 2.

 

 

A foto 3 podemos verificar o cartão RFID (formato chaveiro) acionando indutor-antena.

 

RFID

Foto 3.

 

 

 

ONDA_CAPACITOR

Foto 4.

P9220074

Foto 5.

Nas fotos 4 e 5 podemos verificar os sinais no osciloscópio. Na primeira no capacitor que fica logo após o indutor-antena e na segunda na saída do microcontrolador.

RELE

Foto 6.

Na Foto 6 estamos verificando a comutação do relé usando um multímetro.

 

 

 

 

4.     CIRCUITO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.     CODIGO FONTE

 

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

 

                include <p16f628.inc>

                __config                _HS_OSC              & _WDT_ON & _LVP_OFF & _BODEN_ON & _MCLRE_ON &

 

_PWRTE_ON

 

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

;**            Variaveis

TempW                  EQU                       70h                                                                        ;

BitLocal EQU                       71h

ContadorB            EQU                       72h

ProxFSR                                EQU                       73h                                                                        ;

ContadorW           EQU                       74h

BitContador          EQU                       75h

UltBitVal                EQU                       76h

Data0                     EQU                       77h                                                                        ; Final

 

Data1                     EQU                       78h

Data2                     EQU                       79h

Data3                     EQU                       7ah

Data4                     EQU                       62h

Zero                       EQU                       7bh                                                                        ; Zero é

 

SerData                  EQU                       7ch

Temp                     EQU                       7dh

Output                   EQU                       7eh

Contador               EQU                       7fh

TMR_amostra       EQU                       60h

BinCnt                   EQU                       61h

Troca                     EQU                       63h

 

#define                  _DIN       PORTB, 7                                              ;

#define                  _DOUT   PORTB, 6                                              ;

#define                  _MUX      PORTB, 5                                              ; 

#define                  _DE                        PORTB, 4                                             

 

#define                  DecisaoVal                            d'170'     ; decisao, 0 = 159 , 1 = 198

 

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

;** Programa codigo

                goto       Inicio

                ORG       4                                                             ;esperar para <0004>

                                                                                              ;interrupcao vetor

                ;goto      Interrupcao

                ORG       5

 

 

 

 

               

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

;********************   Programa inicio

Inicio:

                ;*********************  ligando WDT

                ;********************** configurando TMR0, usando decod. fsk

                clrwdt

                bsf                          STATUS, RP0

                movlw    b'00001111'                           ;Prescaler to WDT, 1:128

                movwf    OPTION_REG

                clrwdt

                ;*********************  configurando

                movlw    b'10000010'                           ;Serial port

                movwf    TRISB                                    ;Set port B I/O

                movlw    b'00000111'

                movwf    TRISA                                    ;Set port A I/O

                bcf                          STATUS, RP0

                clrf          PORTA

                ;********************** desativar recursos exclusivos 16f628

                movlw    b'00000110'                           ;inst o comparador

                movwf    CMCON

                ;**********************  configurando o modulo PWM  150KHz

                movlw    b'00001100'                           ;habilitar PWM , duty = 2

                movwf    CCP1CON

                movlw    b'00000010'                           ;Usando freq = 12MHz

                movwf    CCPR1L

                movlw    b'00000101'                           ;configurando TMR2, Prescale = 1:4

                movwf    T2CON

                bsf                          STATUS, RP0

                movlw    b'00000100'

                movwf    PR2                                                        ;Setando o periodo = 4

                bcf                          STATUS, RP0

                ;**********************  configurando  UART

                bsf                          STATUS, RP0

                movlw    d'12'                                       ;57600 para 12MHz Clock, alta veloc

                movwf    SPBRG                                 

                movlw    b'10100111'                           ;assincrono 8 bits

                movwf    TXSTA

                bcf                          STATUS, RP0

                movlw    b'10110000'                           ;habilitar porta serial

                movwf    RCSTA

                clrf          Zero

                call          EnviarString

                ;----------------------- inserir Debug

                goto       Pular_debug

                movlw    0a0h

                movwf    FSR

                movlw    b'00000011'

                movwf    INDF

                incf         FSR, F

                movlw    b'11111111'

                movwf    INDF

                incf         FSR, F

                movlw    b'11111100'

                movwf    INDF

                incf         FSR, F

                movlw    b'00011111'

                movwf    INDF

                incf         FSR, F

                movlw    b'10000001'

                movwf    INDF

                incf         FSR, F

                movlw    b'11110000'

                movwf    INDF

                incf         FSR, F

                movlw    b'00111110'

                movwf    INDF

                incf         FSR, F

                movlw    b'00000111'

                movwf    INDF

                incf         FSR, F

                goto    Decodificar_entrada

Pular_debug:

                ;----------------------- esperar por comando

Esperar:

                clrwdt

                btfsc       RCSTA, OERR

                goto       Limpar_erro

                btfss       PIR1, RCIF

                goto       Esperar

                movfw    RCREG

                movwf    SerData

                movwf    TXREG                                 

                call          Espaco

               

                movlw    '1'                                                           ;Decodif comando

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       Testar_amostra    ;Inicio RFID

                movlw    '2'           

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       DebugAmostra                    ;Depurar executar, saída de dados amostrados

                movlw    '3'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       Decodificar                           ;Totalmente capturados  e decodificados os

 

dados

                movlw    '4'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       HexTest                                 ;testando routina HEX

                movlw    '5'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       BinTest                                 ;testando routina bin

                movlw    '6'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       Comando_agora                  ;nao esta em uso

                movlw    '7'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       Comando_agora

                movlw    '8'                          

                xorwf      SerData, W

                btfsc       STATUS, Z

                goto       Comando_agora

 

Comando_agora:                                                               ;Para todos os comandos não estão em

 

uso

               

                call          EnviarString                         ;Enviar mensagem de erro de comando

                goto       Esperar 

 

                ;*********************  limpar erro

Limpar_erro:

                movfw    RCREG

                movfw    RCREG

                bcf                          RCSTA, CREN

                bsf                          RCSTA, CREN

                goto       Esperar

                ;---------------------- comando executar

Testar_amostra:                                                  ;Comando 1: amostra de dados RFID, de 1024

 

bits

                call          Comp_verif                           ; ler condicao de instalacao

                movlw    0a0h                                      

                movwf    FSR                                                       ;Usar FSR para armazenamento de

 

dados

                movlw    d'80'                                       ;Fazer isso para 80 bytes

                movwf    Contador

 

AmostraLoop1:

                call          CapturarByte

                incf         FSR, F                                   ; byte esta cheio, passar para o próximo

                decfsz    Contador, F

                goto       AmostraLoop1

                ;---------------------- Switch memory bank

                movlw    020h                                      

                movwf    FSR                                                       ;Use FSR para armazenamento de dados

                movlw    d'64'                                       ;Fazer isso para 64 bytes

                movwf    Contador

 

AmostraLoop2:

                call          CapturarByte

                incf         FSR, F                                  

                decfsz    Contador, F

                goto       AmostraLoop2

 

                ;---------------------- Dados está cheio, agora liberar os dados

                movlw    d'80'                                       ;fazer para 80 bytes

                movwf    Contador

                movlw    0a0h                                      

                movwf    FSR                                                       ;Use FSR para acessar os dados

 

AmostraLoop10:

                movfw    INDF

                call          EnviarBin

                incf         FSR, F

                decfsz    Contador, F

                goto       AmostraLoop10

 

                ;---------------------- Switch -banco

                movlw    d'64'                                       ;fazer para 64 bytes

                movwf    Contador

                movlw    020h                                      

                movwf    FSR                                                       ;Use FSR para acessar dados

 

AmostraLoop11:

                movfw    INDF

                call          EnviarBin

                incf         FSR, F

                decfsz    Contador, F

                goto       AmostraLoop11

 

                call          NovaLinha

                goto       Esperar

 

                ;*********************** Comando 2 modulo debug

 

DebugAmostra:                                                  ;Comando 2: amostra de dados  RFID, o modo

 

de depuração

                call          Comp_verif                           ;ler configuracao

                movlw    0a0h                                      

                movwf    FSR                                                       ;Use FSR para armazenar dados

                movlw    d'80'                                       ;fazer para 80 bytes

                movwf    Contador

 

DebugSLoop1:

    call      Comp_verif                          

                movfw    TMR_amostra

                movwf    INDF

               

                incf         FSR, F                                   ;byte é cheio, passar para a próxima

                decfsz    Contador, F

                goto       DebugSLoop1

 

                ;---------------------- Switch memoria banco

                movlw    020h                                      

                movwf    FSR                                                       ;Use FSR para armazenar dados

                movlw    d'64'                                       ;fazer para 64 bytes

                movwf    Contador

 

DebugSLoop2:

                call          Comp_verif

                movfw    TMR_amostra

                movwf    INDF

                incf         FSR, F                                  

                decfsz    Contador, F

                goto       DebugSLoop2

 

                ;---------------------- Dados está cheio, agora liberar dados

                movlw    d'80'                                       ;fazer para 80 bytes

                movwf    Contador

                movlw    0a0h                                      

                movwf    FSR                                                       ;Use FSR p armazenar dados

 

DebugSLoop10:

                movfw    INDF

                call          EnviarHex

                call          NovaLinha

                incf         FSR, F

                decfsz    Contador, F

                goto       DebugSLoop10

 

                ;---------------------- Switch banco

                movlw    d'64'                                       ;fazer para 64 bytes

                movwf    Contador

                movlw    020h                                      

                movwf    FSR                                                      

 

DebugSLoop11:

                movfw    INDF

                call          EnviarHex

                call          NovaLinha

                incf         FSR, F

                decfsz    Contador, F

                goto       DebugSLoop11

 

 

                call          NovaLinha

                goto       Esperar

 

                ;*********************** Comando 3 captura total e decodificar

Decodificar:                                                                         ;Espere seqüência de início, e

 

comece a captura

                call          Comp_verif                           ;ler config.

                call          Esperar_ateIniciar                ;esperar para iniciar

 

                movlw    0a0h                                      

                movwf    FSR                                                       ;Use FSR para armazenar dados

                movlw    d'80'                                       ;fazer p 80 bytes

                movwf    Contador

 

DLoop1:

                call          CapturarByte

                incf         FSR, F                                  

                decfsz    Contador, F

                goto       DLoop1

 

                ;---------------------- Dados está cheio, agora liberar dados

                movlw    d'80'                                      

                movwf    Contador

                movlw    0a0h                                      

                movwf    FSR                                                      

 

DLoop10:

                movfw    INDF

                call          EnviarBin

                incf         FSR, F

                decfsz    Contador, F

                goto       DLoop10

 

                call          NovaLinha

Decodificar_entrada:

                ;---------------------- dados bits

                movlw    d'8'                                         ;conf para bit lido

                movwf    BitLocal

                movlw    0a0h

                movwf    ProxFSR

               

                ;---------------------- iniciar extracao

                clrf          Data0                                     ;limpar dados

                clrf          Data1

                clrf          Data2

                clrf          Data3

                clrf          Data4

                clrf          Troca

               

D_BitLoopZ:

                call          GetBitContador

                movfw    BitContador

                movlw    d'20'

                subwf     BitContador, W

                btfsc       STATUS, C

                goto       D_decodif_fim      ; BitContador - 15 = Positivo, loop ja feito, pare           

 

                movlw    d'7'

                subwf     BitContador, W

                btfss       STATUS, C                           

                goto       D_enviar2bit                         ;Negativo 1 bit

                movlw    '*'                                                           ;Positivo, 2 bit

                call          EnviarCaract

                call          EnviarCaract

                bsf                          STATUS, C

                call          Deslocar

                call          Deslocar

                goto       D_proxbit

D_enviar2bit:

                movlw    '_'

                call          EnviarCaract

                bcf                          STATUS, C

                call          Deslocar

D_proxbit:

                movlw    0efh

                subwf     ProxFSR, W                          ;ProxFSR - W

                btfss       STATUS, C

                goto       D_BitLoopZ                          ;Negative, manter loop

                call          NovaLinha                                            ;Positivo, ProxFSR > 0xef

 

                ;----------------------- Final dados

D_decodif_fim:

                call          NovaLinha

                movfw    Data4

                call          EnviarHex

                movfw    Data3

                call          EnviarHex

                movfw    Data2

                call          EnviarHex

                movfw    Data1

                call          EnviarHex

                movfw    Data0

                call          EnviarHex

               

                call          NovaLinha                                           

                goto       Esperar

 

                ;*********************** Comando 4,5 Serial debug

 

HexTest:

                call          RcvHex                                  ;Command 4: Hex test

                movfw    Output

                call          EnviarHex

                call          NovaLinha

                goto       Esperar

 

BinTest:

                call          RcvHex                                  ;Command 5: Bin test

                movfw    Output

                call          EnviarBin

                call          NovaLinha

                goto       Esperar

 

 

;*****************************       SUBROUTINA

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

 

Deslocar:

                btfss       Troca, 0

                goto       TrocaNotSet

                rlf                            Data0, F

                rlf                            Data1, F

                rlf                            Data2, F

                rlf                            Data3, F

                rlf                            Data4, F

                bcf                          Troca, 0

                return

 

TrocaNotSet:

                bsf                          Troca, 0

                return

 

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

 

CapturarByte:

    call      Comp_verif                          

                movlw    DecisaoVal                            ;decisao , 0 = 159 , 1 = 198

                subwf     TMR_amostra, W

                rlf                            INDF, F                                  ;Armazenar os dados no endereço

 

apontado                             

 

                                              

 

    call      Comp_verif                           ;Faz isso por 8 vezes, para encher um byte

                movlw    DecisaoVal                                          

                subwf     TMR_amostra, W

                rlf                            INDF, F                 

 

    call      Comp_verif

                movlw    DecisaoVal           

                subwf     TMR_amostra, W

                rlf                            INDF, F

 

    call      Comp_verif

                movlw    DecisaoVal                           

                subwf     TMR_amostra, W

                rlf                            INDF, F  

 

 

 

    call      Comp_verif

                movlw    DecisaoVal

                subwf     TMR_amostra, W

                rlf                            INDF, F

 

    call      Comp_verif

                movlw    DecisaoVal                           

                subwf     TMR_amostra, W

                rlf                            INDF, F  

 

    call      Comp_verif

                movlw    DecisaoVal

                subwf     TMR_amostra, W

                rlf                            INDF, F

 

    call      Comp_verif

                movlw    DecisaoVal           

                subwf     TMR_amostra, W

                rlf                            INDF, F

                return

 

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

 

Esperar_ateIniciar:

                movlw    d'20'

                movwf    ContadorW

WTS_prox:

                call          Comp_verif

                movlw    DecisaoVal

                subwf     TMR_amostra, W

                btfsc       STATUS, C                            ;Verifique se há um valor de 0

                goto       Esperar_ateIniciar                ; SE 1, reinicia

                decfsz    ContadorW, F

                goto       WTS_prox                             ;Loop

                return

 

 

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

 

Comp_verif:

                                                                                                              ;Process: Loop until a

 

transition, 

limparTMR0,

                                                                                                              ;esperar ate a prox

 

transicao 0-1

SCAmostra3:

                btfsc       CMCON, C1OUT

                goto       SCAmostra3

SCAmostra2:                                                                       ;estava baixo, esperar alto

                btfss       CMCON, C1OUT

                goto       SCAmostra2                        

 

                movfw    TMR0

                movwf    TMR_amostra                       ;Store the result in TMR_amostra

                clrf          TMR0                                     ;Limpar TMR0 para o próximo bit

                return

 

 

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

 

GetBitContador:

                clrf          BitContador

                btfss       UltBitVal, 0

                goto       OBC_ultimobit0

;              goto       GBC_lastbit1        ;Last bit is a 1

OBC_loop1:

                call          ObterProxBit

                btfss       STATUS, Z

                goto       OBC_mod1

                incf         BitContador, F                     ;Continue se o valor é zero

                goto       OBC_loop1

OBC_mod1:                                                                        ;fazer s o bit mudar para 1

                bcf                          UltBitVal, 0

                return

 

OBC_ultimobit0:                                                 ;ultimo bit é zero

GBC_loop0:

                call          ObterProxBit

                btfsc       STATUS, Z

                goto       OBC_mod0

                incf         BitContador, F                     ;Continue ise o valor é 1

                goto       GBC_loop0

OBC_mod0:                                                                        ;fazer s o bit mudar para 1

                bsf                          UltBitVal, 0

                return

 

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

 

ObterProxBit:

                movfw    ProxFSR

                movwf    FSR

                movfw    BitLocal

                movwf    ContadorB           

                decfsz    BitLocal, F            ;ir para o prox bit

                goto       OPB_proxEtapa

                movlw    d'8'

                movwf    BitLocal

                incf         ProxFSR, F                           ;ir para a prox leitura

OPB_proxEtapa:

                clrf          TempW

                bsf                          STATUS, C

OPB_loop:

                rlf                            TempW, F                             ;TempW contem máscara de bits

                decfsz    ContadorB            , F

                goto       OPB_loop

                movfw    TempW

                andwf     INDF, W                                 ;Resultado em z

                return

               

;*****************************       SUBROUTINA

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

 

EnviarHex:

                movwf    Temp

                swapf     Temp, W

                andlw     00fh

               

HexEsperarLoop1:

                btfss       PIR1, TXIF             ;espere ate o buffer esta vazio

                goto       HexEsperarLoop1

                movwf    TXREG

                movf       Temp, W

                andlw     00fh

               

HexEsperarLoop2:

                btfss       PIR1, TXIF             ;espere ate o buffer esta vazio

                goto       HexEsperarLoop2

                movwf    TXREG

                return

 

 

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

 

EnviarBin:

                movwf    Temp

                movlw    8h

                movwf    BinCnt

 

BinEnviarLoop1:

                btfss       PIR1, TXIF             ;espere ate o buffer esta vazio

                goto       BinEnviarLoop1

 

                movlw    '0'

                btfsc       Temp, 7

                movlw    '1'

                movwf    TXREG

 

                rlf                            Temp, F

                decfsz    BinCnt, F

                goto       BinEnviarLoop1

                return

 

 

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

 

RcvHex:

                btfss       PIR1, RCIF

                goto       RcvHex

                movfw    RCREG

                movwf    SerData

                movwf    TXREG                   ; envia-lo d volta

               

                movlw    30h

                subwf     SerData, F

                movlw    10h        

                subwf     SerData, W            ; F - W

                btfsc       STATUS, C            ; positivo signf - na entrada

                goto       Tipo1

RtnTipo1:

                swapf     SerData, W

                movwf    Output

RcvHexLoop:

                btfss       PIR1, RCIF

                goto       RcvHexLoop

                movfw    RCREG

                movwf    SerData

                movwf    TXREG                   ; envia-lo d volta

               

                movlw    30h

                subwf     SerData, F

                movlw    10h        

                subwf     SerData, W            ; F - W

                btfsc       STATUS, C            ; positivo signf - na entrada

                goto       Tipo2

RtnTipo2:

                movfw    SerData

                iorwf       Output, F

                call          Espaco

                return

Tipo1:

                movlw    07h

                subwf     SerData, F

                movlw    10h

                subwf     SerData, W

                btfsc       STATUS, C            ;  Positivo significa entrada ruim

                goto       Tipo1E

                goto       RtnTipo1

Tipo1E:

                movlw    d'32'

                subwf     SerData, F

                goto       RtnTipo1

Tipo2:

                movlw    07h

                subwf     SerData, F

                movlw    10h

                subwf     SerData, W

                btfsc       STATUS, C            ;  Positivo significa entrada ruim

                goto       Tipo2E

                goto       RtnTipo2

Tipo2E:

                movlw    d'32'

                subwf     SerData, F

                goto       RtnTipo2

 

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

; LongDelay, 15 ciclos, 3ins/ciclos 22.5uS para 8Mhz clock

longo_delay:

                movlw    d'15'

                movwf    Contador

longo_delay_L:

                decfsz    Contador, F

                goto       longo_delay_L

                return

 

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

 

EnviarString:

                movwf    Contador

EnviarLoop:

                btfss       PIR1, TXIF             ;Espere até buffer está vazio

                goto       EnviarLoop

                call          StringInicio          

                iorwf       Zero, W

                btfsc       STATUS, Z            ;Zero é o fim da string

                return

                movwf    TXREG

                incf         Contador, F

                movfw    Contador

                goto       EnviarLoop

 

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

 

NovaLinha:

                btfss       PIR1, TXIF             ;Espere até buffer está vazio

                goto       NovaLinha

                movlw    0dh

                movwf    TXREG

                movlw    0ah

NovaLinhaLoop:

                btfss       PIR1, TXIF             ;Espere até buffer está vazio

                goto       NovaLinhaLoop

                movwf    TXREG

                return    

 

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

 

Espaco:

                btfss       PIR1, TXIF             ;Espere até buffer está vazio

                goto       Espaco

                movlw    ' '

                movwf    TXREG

                return    

 

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

 

EnviarCaract:

                btfss       PIR1, TXIF             ;Espere até buffer está vazio

                goto       EnviarCaract

                movwf    TXREG

                return    

 

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

;FIM DO PROGRAMA ..

                end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

REFERENCIAS

 

PROJETOS BASE PARA ESTUDO

 

http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2006/cjr37/Website/index.htm.Acesso. 17/10/2009.

www.rogercom.com/.../ControleAcesso/Controle.htm. Acesso em 21/10/2009.

 

EMBASAMENTO TEÓRICO

 

http://www.wirelessbrasil.org/wirelessbr/colaboradores/sandra_santana/rfid_01.html. Acesso 20/10/09

http://pt.wikipedia.org/wiki/Controle_de_acesso. Acesso 20/10/09

http://pt.wikipedia.org/wiki/RFID. Acesso 20/10/09