хотелось бы понять его,ибо тяжко очень с пониманием того,что здесь происходит, не имея комментариев к каждой строчке)))
- Код: Выделить всё
.include "m8def.inc" ;
.org 0 //
rjmp RESET
; reti ; reti
; reti
; reti
.equ DD_MOSI = DDB3
.equ DD_MISO = DDB4
.equ DD_SCK = DDB5
.equ DDR_SPI = DDRB
RESET:
;
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND)
out SPL,r16
SPI_MasterInit: //
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret //
SPI_MasterTransmit:
out SPDR,r16
Wait_Transmit:
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
SPI_SlaveInit:
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
in r16,SPDR
ret
timer:
ldi r18,9
loop: ; prescaler Fosc/1
ldi r16, (0<<ICNC1 | 0<<ICES1 | 0<<WGM13 | 0<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10)
; == ldi r16, 0x07 ; == 00000100b
out TCCR1B, r16
ldi r16, (0<<COM1A1 | 0<<COM1A0 | 0<<COM1B1 | 0<<COM1B0 | 0<<FOC1A | 0<<FOC1B | 0<<WGM11 | 0<<WGM10)
; == ldi r16, 0x00
out TCCR1A, r16
in r16, TIMSK
ori r16,1<<TOIE1 ; == 0000 0100 == 7
; andi r16,~(1<<TOIE1) ; == 1111 1011 == 0xFB
out TIMSK, r16
dec r18
breq SPI_MasterInit
rjmp loop