Autor Tema: Interface PIC16F628A + 74HC166 em ASM  (Leído 3141 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Josivan

  • PIC10
  • *
  • Mensajes: 10
Interface PIC16F628A + 74HC166 em ASM
« en: 02 de Mayo de 2009, 15:46:28 »
Boa tarde a todos, estou fazendo uma interface entre o PIC16F628 e o CI Registrador de deslocamento 74HC166, o que está acontecendo é o seguinte, a comunicação entre os dois fica ok se eu fizer a leitura de um bit por vez, o problema é que se eu quizer ler mais de um bit por vez os dados viram a mior bagunça.

se alguem poder dar uma força.... eu ficarei muito grato.

O programa é todo em ASM ok.

A rotina é essa.

;********************************************************************
;   ROTINA PARA LEITURA DO SN74HC166N                                       *
;********************************************************************
LER   
    CALL    LER_74166       ; VAI PARA LER O PRIMEIRO BYTE 
    MOVFW   VALOR         ; COPIA O VALOR LIDO PARA
    MOVWF   INPUT_0         ; O REGISTRADOR TEMPORARIO DO 1° BYTE
    ;DECFSZ   AUX_BYTES,1      ; TERMINOU O NUMERO DE BYTES?
   ;GOTO    $+2         ; NAO, ENTAO LER O PROXIMO
    RETURN               ; SIM, RETORNA

LER_74166               ; ROTINA PARA LEITURA DOS BITS
    MOVFW   N_BITS         ; COPIA O NUMERO DE BITS A SER CONTADO
   MOVWF   AUX_BITS       ; PARA O REGISTRADOR AUXILIA DA CONTAGEM
    BSF     CLOCK_74166      ; POE EM 1 O PINO CLOCK(7) DO 74166
    BSF     ENABLE_74166   ; POE EM 1 O PINO SH/LD(15) DO 74166
    ; OS PASSOS A CIMA SAO PARA INICIALIZACAO DO CI, O PINO 15 EM 1
    ;DEIXA LIVRE A ENTRADA DE DADOS 'SEIAIS'ATRAVEZ DO PINO 1
   
    BCF     ENABLE_74166   ; DA UM PULSO NEGATIVO NO PINO 15 DO 74166   
    BCF     CLOCK_74166      ; POE A 0 O PINO CLOCK(7)   
    BSF     CLOCK_74166      ; VOLTA A 1 O PINO CLOCK
    BSF     ENABLE_74166    ; VOLTA A 1 O PINO SH/LD
    ; OS PASSOS A CIMA SAO FIETOS A FIM DE CARREGAR OS DADOS CONTIDOS
    ; NA ENTRADA PARALELA PARA OS FLIP FLOPS INTERNOS, COM UM PUSLO A 0 DO PINO
    ; SH/LD(15), OS DADOS SÃO CARREGADOS, E NA PROXIMA TRASICAO DE 0 PARA 1 NO CLOCK
    ; OS DADOS SAO SALVOS INTERNAMENTES, SENDO O VALOR DO BIT MSB JÁ ESTANDO PRESENTE
    ; NA SIDA QH(13) DO CI 74166
     
CONT_IN                  ; AQUI COMECA A LEITURA DOS BITS
   BCF      STATUS,C      ; DESLIGA O PINO C DE STATUS
   BTFSC   DADO_74166      ; TESTA O VALOR DO 1° BITS LIDO SE 1 OU 0
    BSF     STATUS,C      ; SE 1, ROTACIONA O VALOR COM O BIT EM 1
    RLF     VALOR,1         ; SE 0, ROTACIONA O VALOR COM O BIT EM 0
    DECFSZ  AUX_BITS,1      ; VERIFICA SE TERMINOU A CONTAGEM DOS BITS
    GOTO    SERIAL_CLOCK   ; SE NÃO, DESVIA PARA DA UM NOVO CLOCK
    GOTO    SAIR         ; SE SIM, DEVIA PARA SAIR DA ROTINA
   
SERIAL_CLOCK             
    BCF     CLOCK_74166      ; AQUI E UMA ROTINA PARA GERAR UM NOVO   
BSF     CLOCK_74166      ; CLOCK COM TRANZICAO DE 0 PARA 1
    GOTO    CONT_IN         ; LE UM NOVO BIT
SAIR   
   RETURN               ; RETORNA DA COM O VALOR NAS ENTRADAS PARALELAS
                     ; SALVO NA VARIÁVEL 'VALOR'

;############################################################################


Desconectado Josivan

  • PIC10
  • *
  • Mensajes: 10
Re: Interface PIC16F628A + 74HC166 em ASM
« Respuesta #1 en: 10 de Mayo de 2009, 22:14:28 »
Alguém pode dar uma ajuda ai pessoal, ainda não consegui os resultados desejados ok pessoal, aguardo a ajuda.


Francisco Josivan

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Interface PIC16F628A + 74HC166 em ASM
« Respuesta #2 en: 11 de Mayo de 2009, 05:48:51 »
http://www.todopic.com.ar/foros/index.php?topic=24720.msg204913#msg204913

Jossivan dices que si lees un bit cada vez te funciona bien, al ser una transmision serie tienes que leer un bit cada vez.
en la direccion de arriba tienes informacion de la transmision serie del16f628 con ejemplo incluido en asembler, echale un vistazo, comprueba si tienes bien configurados todos los reg. ahi te explica como hacerlo.

tapi8