Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;================================================
- ;Sistemi Elettronici
- ;File di base per la scrittura di applicazioni per
- ;il microcontrollore AT90S8535
- ;
- ;================================================
- ;================================================
- ;include del file standard di definizione dei
- ;nomi dei registri
- .include "8535def.inc"
- ;================================================
- ;==============
- ;definizione delle variabili. La Memoria Ram
- ; inizia dall'indirizzo esadecimale 60
- .DSEG
- .ORG 0x60
- ;=============
- ;=================================================
- ;Interrupt jump table;
- ;questa sezione di codice deve essere
- ;caricata in memoria programma a partire dall'indirizzo $000
- .CSEG
- .ORG 0x000
- rjmp RESET ;Reset Handle $000
- rjmp int_0 ;INT0 Handle $001
- reti ;INT1 Handle $002
- reti ;TIMER2 COMP Handle $003
- reti ;TIMER2 OVF Handle $004
- reti ;TIMER1 CAPT Handle $005
- reti ;TIMER1 COMPA Handle $006
- reti ;TIMER1 COMPB Handle $007
- reti ;TIMER1 OVF Handle $008
- reti ;TIMER0 OVF Handle $009
- reti ;SPI STC Handle $00A
- reti ;UART RX Handle $00B
- reti ;UART UDRE Handle $00C
- reti ;UART TX Handle $00D
- reti ;ADC Handle $00E
- reti ;EE_RDY Handle $00F
- reti ;ANA_COMP Handle $010
- ;==========================================================
- ;
- ;
- ; Here main program starts
- RESET:
- ;===========================
- ; la prima operazione da compiere in ogni caso e'
- ; l'inizializzazione dello Stack pointer
- ;Setting Stack Pointer
- ldi r16, low(RAMEND)
- out SPL, r16
- ldi r16, high(RAMEND)
- out SPH, r16
- ; done
- ;===========================
- ;========Inizio programma principale================
- DOVE: .DW 0b0101010101010101
- ;CONFIGURAZIONE DELLE PORTE (A-B IN USCITA, D INGRESSO)
- ser r16
- out ddra, r16
- out ddrb, r16
- com r16 ;complemento a 1
- out ddrd, r16
- ;LEGGO IL VALORE DALLA MEMORIA E SETTO DUE REGISTRI AL VALORE 8
- ldi zh, high(DOVE*2)
- ldi zl, low(DOVE*2)
- lpm ;carica la parte bassa o alta dell'indirizzo di memoria dell'etichetta DOVE
- mov r17, r0
- inc zl
- lpm
- mov r16,r0
- ldi r18, 0x09
- ldi r19, 0x09
- clr r22
- ;CONFIGURO LE INTERRUPT
- in r25, gimsk ;carico il gimsk su r16
- ori r25, 0b01000000 ;faccio un ori fra r16 e quel valore binario
- out gimsk, r25 ;carico in gimsk il contenuto di r16
- sei ;abilito le interrupt
- ;PROGRAMMA PRINCIPALE
- wait: rjmp wait
- ;QUANDO AVVIENE L'INTERRUPT
- int_0:
- ;SALVO I REGISTRI
- push r16
- push r17
- push r18
- push r19
- hdata:
- lsl r16
- dec r18
- brcs cerca_0H
- breq ldata
- rjmp hdata
- cerca_0H:
- lsl r16
- dec r18
- breq coppia_centrale
- brcs cerca_0H
- inc r22
- rjmp hdata
- coppia_centrale:
- lsl r17
- dec r19
- brcs cerca_0L
- inc r22
- rjmp ldata
- ldata:
- lsl r17
- dec r19
- brcs cerca_0L
- breq fine_conteggio
- rjmp ldata
- cerca_0L:
- lsl r17
- dec r19
- brcs cerca_0L
- breq fine_conteggio
- inc r22
- rjmp ldata
- fine_conteggio:
- loop: rjmp loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement