.DEVICE ATTINY13 ; ***** Portadressen .EQU PINB = 0x16 .EQU PORTB_DDR = 0x17 .EQU PORTB_D = 0x18 .EQU CLKPR = 0x26 ; ***** I/O-Memory .EQU RAMEND = 0x9F ; Adresse SRAM-End .EQU STATUS_FLAG = 0x3F ; Status Register .EQU SP = 0x3D ; Stackpointer .EQU GIMSK = 0x3B ; General Interupt Mask Register .EQU GIFR = 0x3A ; General Interupt Mask Register .EQU TIMSK0 = 0x39 ; Timer/Counter Interupt Mask Register .EQU TIFR0 = 0x38 ; Timer/Counter Interupt Flag Register .EQU OCR0A = 0x36 ; Output/Compare A .EQU MCUCR = 0x35 ; MCU Control Register .EQU TCCR0B = 0x33 ; Timer/Counter 0 Control Register 8bit .EQU TCCR0A = 0x2F ; Timer/Counter 0 Control Register 8bit ; Macro for loading 16 bit values into two registers .macro wait ldi r25,high(@0) ldi r24,low(@0) rcall wait10 .endm .macro pulse_on ldi r16, 0b01000010 out TCCR0A, r16 wait @0 .endm .macro pulse_off ldi r16, 0b00000000 out TCCR0A, r16 ldi r16, 0b00000000 out PORTB_D, r16 wait @0 .endm ; ****************************************************************************** ; *** Sprungtabelle für Interrupts *** .CSEG .ORG $0 Reset: rjmp Init_Reset ; Reset behandlung, Neuinitaliesieren INT0: reti ; PCINT0: reti ; TIM0_OVF: reti ; EE_RDY: reti ; ANA_COMP: reti ; TIM0_COMPA: reti ; Timer 16bit overflow interrupt TIM0_COMPB: reti ; Timer 8bit zur Tasterabfrage WDT: reti ; Watchdog ADC: reti ; ADC conversion complete ;****** Routine nach Reset bzw. Neustart Init_Reset: cli ; Prozessor schnell machen ldi r16, 0b10000000 out CLKPR, r16 ldi r16, 0b00000000 out CLKPR, r16 ; Stackpointer initialisieren ldi r16, RAMEND out SP, r16 ; Sleep-Mode enablen ldi r16, 0b00110000 out MCUCR, r16 ; Port initialisieren ldi r16, 0b00111111 out PORTB_DDR, r16 ldi r16, 0b00000000 out PORTB_D, r16 ldi r16, 125 out OCR0A, r16 ldi r16, 0b00000000 ; CTC mode, toggle OCR0A out TCCR0A, r16 ldi r16, 0b00000001 out TCCR0B, r16 sei ; repeated impulse sequence (see http://www.bigmike.it/ircontrol/ ) ; 2000 uS on ; 27830 uS off ; 390 uS on ; 1580 uS off ; 410 uS on ; 3580 uS off ; 400 uS on ; 63200 uS off ldi r17, 3 ; repeat count blink: pulse_on 200 pulse_off 2783 pulse_on 39 pulse_off 158 pulse_on 41 pulse_off 358 pulse_on 40 pulse_off 6320 dec r17 brne blink ; stop execution sleep ; r25:r24 * 10µs delay loop. wait10: ; waiting time is in r25:r24 ldi r19, 31 waitloop: dec r19 brne waitloop sbiw r25:r24, 1 brne wait10 ret