Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

1
voti

SCRAMBLER AD INVERSIONE DI TEMPO.ASM

<prev>

.......................
SCRAMBLER DIGITALE
041015
RC0 = DATA INPUT
RC1 = LED
RC2 = OUT B.F.
RC3 = ING. B.F.
RC4 = PULSANTE INC.
RC5 = PULSANTE DEC.
RA0 = n.c.
RA1 = V.REF ADC
RA2 = C.S.
RA3 = n.c.
RA4 = DATA OUT
RA5 = CLOCK
...........................
  PROCESSOR       16F1704
  RADIX           DEC
  INCLUDE         "P16F1704.INC" 
  ERRORLEVEL      -302
  ERRORLEVEL      -305
  ORG 0170H  ;  130H

INDL RES 1 INDH RES 1 LINEA RES 1 DATO_LEG RES 1 DATO_SCRI RES 1 RIT RES 2 CONTA RES 1 DIREZ RES 1 PASSATA RES 1 CONT_BIT RES 1 TEMP_L RES 1 TEMP_H RES 1

   __CONFIG  H'8007', H'3FA4'
   __CONFIG  H'8008', H'1FFF'
      ORG 00H 
 

VIA

 MOVLB  1
 MOVLW    B'00000011'
 MOVWF    TRISA
 MOVLB  0
 MOVLW  B'00000010'
 MOVWF   PORTC
MOVLB 2
CLRF LATC
 MOVLW  B'00000100'
 MOVWF   LATA
 MOVLB  3
 CLRF   ANSELC
 MOVLB    2
 MOVLW    B'10000000'
 MOVWF    DAC1CON0 
 MOVLB    10
 MOVLW    B'10010010'
 MOVWF    OPA1CON
 MOVLB    1
 MOVLW    B'00011101'
 MOVWF    ADCON0
 MOVLW    B'01100010'
 MOVWF    ADCON1
 MOVLW    B'00000000'
 MOVWF    ADCON2


 MOVLW    B'00111001'
 MOVWF    TRISC
 MOVLW    B'11110000'    ;26mS
 MOVWF    OSCCON 
 BCF      OPTION_REG,7 ;pull-up
-------------------
 MOVLB  3
 MOVLW  B'00001000'  ;MOVLW  B'00010000'
 MOVWF  ANSELC    ;MOVWF  ANSELA
----------------


INIZIALIZZO SPI
 MOVLB      .29
 MOVLW      .18  ;SDO SU RC3
 MOVWF      RA4PPS  ; ERA RC4PPS ;ERA SU RC3
 
 MOVLW      .16  ;SCK 
 MOVWF      RA5PPS  ;ERA RC4PPS
 MOVLB      .28
 MOVLW      .16  ;SDI SU RC0
 MOVWF      SSPDATPPS
 MOVLB      .4
  MOVLW      .1
  MOVWF      SSP1ADD
 MOVLW      B'00001010'
 MOVWF       SSP1CON1
  MOVLW      B'11000000'
  MOVWF      SSP1STAT
 BSF        SSP1CON1, 5
-----------------------
  MOVLW   .255
 MOVWF   LINEA
 CLRF    INDH
 CLRF    INDL
 CLRF    DIREZ
 CLRF    RIT+0
 CLRF    RIT+1
 CLRF    CONTA
 MOVLW   .3
 MOVWF   PASSATA

CICLO

---avvio nuova ADC----
 MOVLB  1
 BSF    ADCON0,ADGO
--avviato--
-----leggo un byte dalla ram-------

RILEGGI

 MOVLB  0  ; n° del banco
 BCF      LATA,2 ; C.S.
 NOP
 
 MOVLB    .4  ; n° del banco
 MOVLW    .03 ; comando in lettura
 MOVWF    SSP1BUF

ANCORA1L

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA1L
 MOVFW    INDH ; indirizzo alto
 MOVWF    SSP1BUF

ANCORA2L

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA2L
 MOVFW    INDL ; indirizzo basso
 MOVWF    SSP1BUF

ANCORA3L

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA3L
 MOVLW    .255   ; finto dato in uscita
 MOVWF    SSP1BUF

ANCORA4L  ;leggo dato in arrivo

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA4L
 MOVFW    SSP1BUF
MOVWF DATO_LEG ;salvo dato letto
 MOVLB  0  ; n° del banco
 BSF   LATA,2  ; C.S.
 NOP
---fine lettura----
-----scrivo un byte nell' DAC----------
MOVFW DATO_LEG
 MOVLB   2
 MOVWF   DAC1CON1
----fine----
-----scrivo un byte nella ram----------

RIPETI

 MOVLB  0  ; n° del banco
 BCF      LATA,2 ; C.S.
 NOP
 MOVLB    .4  ; n° del banco
 MOVLW    .02 ; comando in scrittura
 MOVWF    SSP1BUF

ANCORA1

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA1
 MOVFW    INDH ; indirizzo alto
 MOVWF    SSP1BUF

ANCORA2

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA2
 MOVFW    INDL ; indirizzo basso
 MOVWF    SSP1BUF

ANCORA3

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA3
 MOVFW    DATO_SCRI  ; dato da scrivere
 MOVWF    SSP1BUF

ANCORA4

 BTFSS      SSP1STAT, 0
 GOTO       ANCORA4
 MOVLB  0  ; n° del banco
 BSF   LATA,2  ; C.S.
 NOP
----fine scrittura------
  MOVLB  1 ;conversione ADC terminata ?

NON_PRONTO

 BTFSC  ADCON0,ADGO
 GOTO   NON_PRONTO 
 MOVFW   ADRESH
 MOVWF   DATO_SCRI
............................
--controllo dec/cod----
 MOVLB  0
 BTFSS    PORTC,5
 GOTO     PUNTATORE
----decodifica tono---------

DEC_TONO

 BTFSS   DATO_SCRI,7
 GOTO    MIN_127
MAG_127 ---semionda alta---
 INCF    TEMP_H
   BTFSS   PASSATA,0
   GOTO    FINE_CTRL_BIT
 BCF     PASSATA,0
 BSF     PASSATA,1 
 MOVFW   TEMP_L
 ADDLW   256-13  ; è <= DI 10 ??
 BTFSC   STATUS,C
 GOTO    MAG_7L
MIN_7
 CLRF    TEMP_L
 INCF    CONT_BIT
 GOTO    FINE_MISURA

MAG_7L

 CLRF    CONT_BIT
 CLRF    TEMP_L
 GOTO    FINE_CTRL_BIT

MIN_127 ;---semionda bassa---

 INCF    TEMP_L
   BTFSS   PASSATA,1
   GOTO    FINE_CTRL_BIT
 BCF     PASSATA,1
 BSF     PASSATA,0 
 MOVFW   TEMP_H
 ADDLW   256-13  ; è <= DI 10 ??
 BTFSC   STATUS,C
 GOTO    MAG_7H
MIN_7
 CLRF    TEMP_H
 INCF    CONT_BIT
 GOTO    FINE_MISURA

MAG_7H

 CLRF    CONT_BIT
 CLRF    TEMP_H
 GOTO    FINE_CTRL_BIT

FINE_MISURA ;semionde in arrivo

 MOVFW   CONT_BIT
 ADDLW   256-20 ; è > 20 ??
 BTFSS   STATUS,C
   GOTO    FINE_CTRL_BIT
 CLRF    CONT_BIT
 CLRF    INDH
 CLRF    INDL
 CLRF    DIREZ
   

FINE_CTRL_BIT

........................
---puntatore memoria----

PUNTATORE

 BTFSC      DIREZ,0
 GOTO     INVERSO
 INCFSZ     INDL
 GOTO     CICLO
 INCFSZ     INDH
 GOTO     CICLO
 DECF   INDL ;carico FF
 DECF   INDH ;carico FF
 BSF    DIREZ,0
 GOTO    CICLO

INVERSO

 DECF     INDL
 COMF   INDL,W ; =FF ?
 BTFSS   STATUS,Z
 GOTO     CICLO
 DECF     INDH
 COMF   INDH,W  ; =FF ?
 BTFSS   STATUS,Z
 GOTO     CICLO
 BCF    DIREZ,0
 CLRF   INDL
 CLRF   INDH

--controllo dec/cod----
 MOVLB  0  
 BTFSC    PORTC,5
 GOTO     CICLO
------------------------

SINCRO

   CLRF    CONTA
   MOVLB   2

SINCRO1

 MOVLW  .255 ; semip+
 MOVWF   DAC1CON1
   MOVLW    .3
   MOVWF    RIT+1

NO_ZERO1

   DECFSZ   RIT+0
   GOTO     NO_ZERO1
   DECFSZ   RIT+1
   GOTO     NO_ZERO1
 MOVLW  .0 ; semip-
 MOVWF   DAC1CON1
   MOVLW    .3
   MOVWF    RIT+1

NO_ZERO2

   DECFSZ   RIT+0
   GOTO     NO_ZERO2
   DECFSZ   RIT+1
   GOTO     NO_ZERO2
 INCF    CONTA
 BTFSS   CONTA,4
 GOTO    SINCRO1
 GOTO     CICLO
--------------------


 END
---------------------

</prev>

0

Commenti e note

Inserisci un commento

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.