
Husdjur kan vara nog så tillgivna. Vi har också katt med mycket personlighet. Bävar för den dagen hon inte finns längre...
Kod: Markera allt
list p=16f886
#include <p16F886.inc>
__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
__CONFIG _CONFIG2, _BOR4V_BOR21V & _WRT_OFF
; Definiera adress till variabler..
dly1 equ 0x20
dly2 equ dly1 + 1
dly3 equ dly2 + 1
dat equ dly3 + 1
; Definiera pinnar
#define minneCE PORTC,2
#define led PORTA,0
reset_vector CODE 0x000
goto start
int_vector CODE 0x004
start CODE 0x006
start
banksel OSCCON
movlw 0xff
movwf OSCCON ; Sätt intern klocka till 8MHz..
banksel ANSEL
clrf ANSEL ; Alla digitala..
banksel TRISA
clrf TRISA
banksel PORTA
movlw 0xff
movwf PORTA
call init_spi ; Initsiera SPI-modulen..
main
bcf minneCE ; Sätt Chip Enable hög..
nop
nop
movlw 0x06 ; Skicka 06h (WREN)
call spi_send_byte
nop
nop
bsf minneCE
nop
nop
bcf minneCE
nop
nop
movlw 0x05 ; Skicka 05h (Read status-reg)
call spi_send_byte
movlw 0x00
call spi_send_byte ; Skicka dummybyte bara för att få en klocksignal (mottag data)
movwf dat ; Spara mottagen data.
nop
nop
bsf minneCE
call delay
goto main
; **************************************
; SPI-rutiner..
; INIT
init_spi
banksel TRISC
bcf TRISC,5 ; Gör SDO till utgång
bcf TRISC,3 ; Gör SCK till utgång
bcf TRISC,2 ; Gör Chip-select till utgång..
banksel PORTC
bsf PORTC,2
; Data samlas in av SST25VF080B-minnet på den stigande flanken av klocksignalen (Mode 3 eller Mode 0),
; därför är läge CKP = 0, CKE = 1 lämpligt. Datautgång på minnet ändras efter fallande flank => läs på stigande flank, SMP = 0.
banksel SSPSTAT
movlw b'01000000' ; SMP, CKE, .(i2c only).., status (BF)
movwf SSPSTAT
banksel SSPCON
movlw b'00000010' ; SSPEN = 0, CKP = 0, clock = Fosc/4
movwf SSPCON
bsf SSPCON,SSPEN
; (SSPCON ligger i bank 0..)
return
; SKICKA BYTE
spi_send_byte
movwf SSPBUF ; Skicka värde i W-reg.
banksel SSPSTAT
spi_send_byte_a
btfss SSPSTAT,BF ; Vänta på att Buffer Full flaggan skall sättas (Den gör tydligen det också när den blivit tömd av hårdvaran (data skickad)?)
goto spi_send_byte_a
banksel SSPBUF
movfw SSPBUF ; Lägg mottagen data i arbetsreg.
return
; **********************************
; Fördröjningsrutiner..
delay
movlw 0
movwf dly2
delay_2
movlw 0
movwf dly1
delay_1
decfsz dly1,1
goto delay_1
decfsz dly2,1
goto delay_2
return
delay_w
movwf dly2
delay_w_2
movlw 0
movwf dly1
delay_w_1
decfsz dly1,1
goto delay_w_1
decfsz dly2,1
goto delay_w_2
return
end