Professional Documents
Culture Documents
Esercizi Assembly 4f
Esercizi Assembly 4f
#include "P16F84.inc"
ORG 000
val0 equ b'11111100'
val1 equ b'01100000'
val2 equ b'11011010'
val3 equ b'11110010'
val4 equ b'01100110'
val5 equ b'10110110'
val6 equ b'10111110'
val7 equ b'11100000'
val8 equ b'11111110'
val9 equ b'11110110'
elenco equ 0X0C
org 000
goto inizio
org 004
movwf w_TEMP
SWAPF status,0
MOVWF status_temp
swapf STATUS,0
movwf STATUS_TEMP
btfss PORTA,0
nop
routine_rb0
btfss INDF,0 ;modifico il valore del prescaler
bsf INDF,0 ;se è a due lo metto a tre e viceversa
addwf INDF,1
bcf INTCON,INTF ;resetto il flag di RB0
goto ritorna
routine_timer
movlw 0x06
movwf TMR0 ;faccio partire la conta da 6 per contare 250
decfsz CONT,1 ;decremento il contatore esterno
goto fine_timer
movlw .125 ;resetto contatore
movwf CONT
btfss PORTA,0 ;accendo o spengo RA0 a seconda del suo stato
bsf PORTA,0
btfsc PORTA,0
bcf PORTA,0
fine_timer
inizio
movlw val0
movwf indf
incf fsr,1
movlw val1
movwf indf
incf fsr,1
movlw val2
movwf indf
incf fsr,1
movlw val3
movwf indf
incf fsr,1
movlw val4
movwf indf
incf fsr,1
movlw val5
movwf indf
incf fsr,1
movlw val6
movwf indf
incf fsr,1
movlw val7
movwf indf
incf fsr,1
movlw val8
movwf indf
incf fsr,1
movlw val9
movwf indf
movlw elenco
movwf FSR
END
;Baldiserra Thomas Esposito Nicolò 14/12/2019 4°F
#include "P16F84.inc"
org 000
goto inizio
org 004
btfss INTCON,T0IF
goto indietro
movwf W_TEMP
swapf STATUS,0
movwf STATUS_TEMP
swapf STATUS_TEMP,0
movwf STATUS
swapf W_TEMP,1
swapf W_TEMP,0
indietro retfie
bsf STATUS,RP0
bsf OPTION_REG,2
bcf OPTION_REG,1
bcf OPTION_REG,0
bcf STATUS,RP0
movlw .125
movwf CONT
movlw 0x06
movwf TMR0
movlw 0x06
bcf INTCON,T0IF
btfss INTCON,T0IF
goto $-1
movwf TMR0
decfsz CONT,1
goto $-6
return
inizio
bsf STATUS,5
clrf TRISA
movlw 0x01
movwf TRISB
bcf STATUS,5
movlw ELENCO
movwf FSR
clrf DIREZIONE
movlw VAL0
movwf INDF
incf FSR,1
movlw VAL1
movwf INDF
incf FSR,1
movlw VAL2
movwf INDF
incf FSR,1
movlw VAL3
movwf INDF
incf FSR,1
movlw VAL4
movwf INDF
incf FSR,1
movlw VAL5
movwf INDF
incf FSR,1
movlw VAL6
movwf INDF
incf FSR,1
movlw VAL7
movwf INDF
incf FSR,1
movlw VAL8
movwf INDF
incf FSR,1
movlw VAL9
movwf INDF
incf FSR,1
END
;esercizio 4 Brtolucci,Frutteti,Giammaria
; Classe 4F 13/12/2019
#include"P16f84.inc"
org 000
goto inizio
bcf INTCON,INTF
comf LETTURA,1
btfsc LETTURA,0
goto $-3
bsf PORTB,1
bsf STATUS,5
movlw 0x01
movwf TRISB
movlw b'00011111'
inizio
movwf FSR
clrf DIREZIONE ;INIZIO CON DIREZIONE CRESCENTE
movlw ELENCO
movwf FSR
movlw 0x90
movwf INTCON
ripeti
btfss STATUS,2
goto ripeti
movlw ELENCO ;RICOMINCIO DAL PRIMO
movwf FSR
goto ripeti
invertita
movf INDF,0
movwf PORTA
decf FSR,1
movf FSR,0
xorlw 0x0B ;CONTROLLO SE IL PUNTATORE PUNTA AD
UN INDIRIZZO OLTRE IL
btfss STATUS,2
goto ripeti
movlw 0x16 ;RICOMINCIO DALL'ULTIMO
movwf FSR
goto ripeti
bsf STATUS,RP0
bsf OPTION_REG,2
bcf OPTION_REG,1
bcf OPTION_REG,0
bcf STATUS,RP0
movlw .125
movwf CONT
movlw 0x06
bcf INTCON,T0IF
btfss INTCON,T0IF
goto $-1
movwf TMR0
decfsz CONT,1
goto $-6
return
END
;esercizio n°4
;Nicola Casali Andrea Maioli
; classe 4^F
;14/12/19
#INCLUDE "P16F84.inc"
ELENCO EQU 0x0C
DIREZIONE EQU 0x17
W_TEMP EQU 0x18
STATUS_TEMP EQU 0x19
CONT EQU 0x1A
VAL0 EQU b'11111100' ; mia sequenza di valori del codice a 7
segmenti da 0 a 9
VAL1 EQU b'01100000'
VAL2 EQU b'11011010'
VAL3 EQU b'11110010'
VAL4 EQU b'01100110'
VAL5 EQU b'10110110'
VAL6 EQU b'10111110'
VAL7 EQU b'11100000'
VAL8 EQU b'11111110'
VAL9 EQU b'11110110'
org 000
goto inizio
ORG 004
movwf W_TEMP ;salvo i valori
di w e status
swapf STATUS,0
movwf STATUS_TEMP
bcf INTCON,INTF
comf DIREZIONE,1
btfsc DIREZIONE,0
goto $+3
bsf PORTA,2
bcf PORTA,3
goto ritorna
bsf PORTA,3
bcf PORTA,2
ritorna
swapf STATUS_TEMP,0 ; ricarico in status
e w i valori presenti prima dell'interruzione
movwf STATUS
swapf W_TEMP,1
swapf W_TEMP,0
retfie ; riabilito il GIE
inizio
bsf STATUS,5
movlw 0x02
movwf TRISA
movlw 0x01
movwf TRISB
bcf STATUS,5
movlw ELENCO ; carico in FSR
l'indirizzo del primo registro del mio blocco di memoria
movwf FSR
clrf DIREZIONE
movlw VAL0
movwf INDF
incf FSR,1
movlw VAL1
movwf INDF
incf FSR,1
movlw VAL2
movwf INDF
incf FSR,1
movlw VAL3
movwf INDF
incf FSR,1
movlw VAL4
movwf INDF
incf FSR,1
movlw VAL5
movwf INDF
incf FSR,1
movlw VAL6
movwf INDF
incf FSR,1
movlw VAL7
movwf INDF
incf FSR,1
movlw VAL8
movwf INDF
incf FSR,1
movlw VAL9
movwf INDF
movlw ELENCO
movwf FSR
movlw 0x90
;ATTIVO GIE E INTE
movwf INTCON
ripeti
movf INDF,0
movwf PORTA
incf FSR,1 ; incremento il
puntatore
movf FSR,0
xorlw 0x17 ; controllo se il
puntatore supera il limite dei dati
btfss STATUS,2
goto ripeti
movlw ELENCO
movwf FSR
btfss
goto ripeti
END
RIGHETTI-GNOLI
#include "P16f84.inc"
org 000
goto inizio
org 004
movwf W_TEMP
swapf STATUS,0
movwf STATUS_TEMP
btfsc INTCON,T0IF
goto routine_timer
btfss INTCON,INTF
goto ritorna
routine_rb0
btfss INDF,0
bsf INDF,0
btfsc INDF,0
bcf INDF,0
bcf INTCON,INTF
goto ritorna
routine_timer
movlw OX06
movwf TMR0
decfsz CONT,1
goto fine_timer
movlw .125
movwf CONT
btfss PORTA,0
bsf PORTA,0
btfsc PORTA,0
bcf PORTA,0
fine_timer
bcf INTCON,T0IF
bcf INTCON,INTF
comf DIREZIONE,1
btfsc DIREZIONE,0
goto $-3
bsf PORTA,2
bcf PORTA,3
goto ritorna
bsf PORTA,3
bcf PORTA,2
ritorna
swapf STATUS_TEMP,0
movwf STATUS
swapf W_TEMP,1
swapf W_TEMP,0
retfie
inizio
bsf STATUS,5
clrf TRISA
movlw 0x01
movwf TRISB
movlw b'00011111
movlw ELENCO
movwf FSR
clrf DIREZIONE
movlw VAL0
movwf INDF
incf FSR,1
movlw VAL1
movwf INDF
incf FSR,1
movlw VAL2
movwf INDF
incf FSR,1
movlw VAL3
movwf INDF
incf FSR,1
movlw VAL4
movwf INDF
incf FSR,1
movlw VAL5
movwf INDF
incf FSR,1
movlw VAL6
movwf INDF
incf FSR,1
movlw VAL7
movwf INDF
incf FSR,1
movlw VAL8
movwf INDF
incf FSR,1
movlw VAL9
movwf INDF
movlw ELENCO
movwf FSR
movlw OX09
movlw INTCON
aspetta
bsf STATUS,5
bsf OPTION_REG,2
bcf OPTION_REG,1
bsf OPTION_REG,0
bcf STATUS,5
movlw .125
movwf CONT
movlw 0X06
movwf TMR0
movlw 0X06
bcf INTCON,T0IF
btfss INTCON,T0IF
goto $-1
movwf TMR0
decfsz CONT,1
goto $-6
return