Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [ASM-PIC] Carry

  1. #1
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245

    [ASM-PIC] Carry

    Ciao
    Non riesco a capire come funziona il carry. In particolare mi riferisco alla programmazione di un PIC.
    All'interno di un ciclo utilizzo lo shift dei bit, prima sinistro e poi destro:
    codice:
    btfss UD,0
    rlf Count3,F
    btfsc UD,0
    rrf Count3,F
    Io pensavo che il carry fosse settato (1) quando veniva effettuato lo shift con il bit più significativo anch'esso settato...
    Se la variabile vale '10000000' e faccio lo shift a sinistra, allora la variabile conterrà '00000000' e il carry varrà '1'.
    Il mio ragionamento però credo sia errato in quanto effettuo lo shift tre volte a sinistra e tre volte a destra, cioè:
    0001
    0010
    0100
    1000
    0100
    0010
    0001
    ma il risultato non è come quello appena descritto perchè ottengo questo:
    0001
    0011
    0110
    1100
    0110
    0011
    Il risultato corretto viene eseguito azzerando il carry prima dello shift, ma perchè il carry viene settato visto che uso solo i primi 4 bit ?

    Grazie
    ... e non usare while wend è una sintassi deprecata

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    è un po' che non lavoro sui PIC, ma ricordo che c'erano
    due tipi di carry, uno relativo ad un gruppo di quattro bit.
    se hai un po di tempo, vai su www.microchip.com e consulta il
    data sheet del tuo microcontrollore, in particolare il
    significato dei vari bit del registro STATUS (0x03 o 0x05 non
    ricordo).

    ciao
    Slack? Smack!

  3. #3
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Si, il registro relativo al carry è il Registro di Stato (STATUS) che contiene 8 flag. Io utilizzo un PIC16F84 ed il registro di stato contiene: al 3° bit il flag Z, che indica se il risultato di un'operazione è zero; al 2° bit il flag DC, che indicase dopo un'operazione c'è un riporto dal 4° al 5° bit; al 1° bit il flag C, che indica se dopo un'operazione c'è il riporto dal bit più significativo.
    Secondo il programma (e secondo me) però, nessuno dei due dovrebbe essere influenzato:
    codice:
    movf Count3,W     ;uscita combinazione
    movwf PORTA
    
    ;bcf STATUS,C      ;shift dei bit
    btfss UD,0        ;<---
    rlf Count3,F
    btfsc UD,0        ;--->
    rrf Count3,F
    
    btfsc Count3,3    ;controllo fine ciclo    '1000'
    bsf UD,0
    btfsc Count3,0    ;controllo inizio ciclo  '0001'
    bcf UD,0
    Una piccola conferma l'ho trovata anche qui.

    ... e non usare while wend è una sintassi deprecata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.