Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

ARA-SAVIOLI

#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

btfsc INTCON,T0IF ;testo i bit di interrupt flag per capire


goto routine_timer ;chi ha scatenato la chiamata
btfss INTCON,INTF
goto ritorna

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"

VAL0 EQU 0XFE


VAL1 EQU 0X30
VAL2 EQU 0XDA
VAL3 EQU 0XF2
VAL4 EQU 0X66
VAL5 EQU 0XB6
VAL6 EQU 0XBE
VAL7 EQU 0XE0
VAL8 EQU 0XFF
VAL9 EQU 0XF6

ELENCO EQU 0X0C


DIREZIONE EQU 0X17
W_TEMP EQU 0X18
CONT EQU 0x19
STATUS_TEMP EQU 0x20

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"

VAL0 EQU b'11111110'


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


DIREZIONE EQU 0x17
W_TEMP EQU 0x018
STATUS_TEMP EQU 0x19
CONT EQU 0x1A
LETTURA EQU 0x1B

org 000
goto inizio

org 004 ;INDIRIZZO STANDARD ROUTINE DI INTERRUPT

movwf W_TEMP ;salvo i valori di w e status


swapf STATUS,0
movwf STATUS_TEMP

bcf INTCON,INTF ;resetto il flag di interrupt legato a


RB0
comf DIREZIONE,1 ;INVERTO IL VALORE CHE

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

bsf STATUS,5 ;INIZIALIZZAZIONE


clrf 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 ;INIZIO CON DIREZIONE CRESCENTE

movlw VAL0 ;CARICO I VALORI IN MEMORIA


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

movlw ELENCO
movwf FSR
movlw 0x90
movwf INTCON

ripeti

;DECIDO SE FARE UNA CONTA CRESCENTE O


DECRESCENTE
movf INDF,0 ;leggo dalla memoria
movwf PORTA ;copio su PORTA
incf FSR,1 ;INCREMENTO IL PUNTATORE
movf FSR,0
xorlw 0x17

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

;LIMITE DEI MIEI DATI

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

bsf STATUS,RP0 ;prescaler a 32


bsf OPTION_REG,2
bcf OPTION_REG,1
bsf OPTION_REG,0
bcf STATUS,RP0
movlw .125 ;contatore a 125
movwf CONT
movlw 0x06 ;tmr0 conta 250
movwf TMR0
movlw 0x06
bcf INTCON,T0IF
btfss INTCON,T0IF
goto $-1
movwf TMR0
decfsz CONT,1
goto $-6

END
RIGHETTI-GNOLI

#include "P16f84.inc"

W_TEMP EQU OX18


STATUS_TEMP EQU OX19
DIREZIONE EQU OX17
ELENCO EQU OXOC
CONT EQU OX0D

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'

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

ripeti btfsc DIREZIONE,

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

You might also like