Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; \u0437\u0435\u043b \u043f\u0443\u0441\u0442\u043e \u0431\u0435\u043b \u0436\u0451\u043b \u0441\u0438\u043d
- ; \u043a\u0440\u0430\u0441 \u043f\u0443\u0441\u0442\u043e \u0447\u0451\u0440
- .include "tn2313adef.inc"
- .EQU POV_DELAY = 2
- .DEF d10 = r20
- .DEF d32 = r21
- .DEF tmp = r16
- .define TIMER
- .CSEG
- .ORG 0x000
- rjmp reset
- reti ; 2
- reti ; 3
- reti ; 4
- reti ; 5
- reti ; 6
- rjmp timer_overflow ; 7 timer
- reti ; 8
- reti ; 9
- reti ; 10
- reti ; 11
- reti ; 12
- reti ; 13
- reti ; 14
- reti ; 15
- reti ; 16
- reti ; 17
- reti ; 18
- reti ; 19
- rjmp timer_overflow ; 20
- reti ; 21
- digits_table:
- .DB 119,66,93,94,106,62,63,82,127,126
- ;.DB 63,6,91,79,102,109,125,7,127,111
- .def ttmp = r17
- timer_overflow:
- in r5, SREG
- ; 0 digit
- inc d10
- mov ttmp, d10
- andi ttmp, 0x0f
- cpi ttmp, 0x0a
- brlo timer_exit
- ; 1 digit
- andi d10, 0xf0
- ldi ttmp, 0x10
- add d10, ttmp
- cpi d10, 0xa0
- brlo timer_exit
- ; 2 digit
- clr d10
- inc d32
- mov ttmp, d32
- andi ttmp, 0x0f
- cpi ttmp, 0x0a
- brlo timer_exit
- ; 3 digit
- andi d32, 0xf0
- ldi ttmp, 0x10
- add d32, ttmp
- cpi d32, 0xa0
- brlo timer_exit
- clr d32
- timer_exit:
- out SREG, r5
- reti
- ; PIN INTERRUPT
- pin_interrupt:
- clr ttmp
- out TCNT0, ttmp
- reti
- main:
- ;ldi tmp, 1<<WDE
- ;out WDTCSR, tmp
- ldi r19, 0xff
- rcall delay
- loop:
- ;wdr
- rcall show_number
- rjmp loop
- ; RESET FUNCTION
- reset:
- ; ioinit
- ; PORTB output
- cli
- ldi tmp, LOW(RAMEND)
- out SPL, tmp
- ldi tmp, 0xFF
- out DDRB, tmp
- ldi tmp, 0b01111111
- out DDRD, tmp
- out PORTD, tmp
- in tmp, MCUSR
- lsl tmp
- lsl tmp
- lsl tmp
- out PORTD, tmp
- clr tmp
- out MCUSR, tmp
- WaitPin:
- in tmp, PINA
- sbrc tmp, 1
- rjmp WaitPin
- .ifdef TIMER
- ldi tmp, 1<<PSR10
- out GTCCR, tmp
- ldi tmp, (1<<CS00)|(1<<CS02)
- out TCCR0B, tmp
- ldi tmp, 1<<TOIE0
- out TIMSK, tmp
- .else
- ldi tmp, 1<<PCIE1
- out GIMSK, tmp
- ldi tmp, 1<<PCINT9
- out PCMSK1, tmp
- .endif
- ldi d10, 0x00
- ldi d32, 0x00
- sei
- rjmp main
- ; SHOW NUMBER FUNCTION
- show_digit:
- ldi ZL, LOW(digits_table*2)
- add ZL, tmp
- lpm
- out PORTB, r0
- ret
- show_number:
- ; dig1
- mov tmp, d10
- andi tmp, 0x0f
- ;show
- cbi PORTD, 0
- rcall show_digit
- ldi r19, POV_DELAY
- rcall delay
- sbi PORTD, 0
- ;dig2
- mov tmp, d10
- andi tmp, 0xf0
- swap tmp
- ;show
- cbi PORTD, 1
- rcall show_digit
- ldi r19, POV_DELAY
- rcall delay
- sbi PORTD, 1
- ;dig3
- mov tmp, d32
- andi tmp, 0x0f
- ;show
- cbi PORTD, 2
- rcall show_digit
- ldi r19, POV_DELAY
- rcall delay
- sbi PORTD, 2
- ;dig4
- mov tmp, d32
- andi tmp, 0xf0
- swap tmp
- ;show
- cbi PORTD, 3
- rcall show_digit
- ldi r19, POV_DELAY
- rcall delay
- sbi PORTD, 3
- ret
- ; DELAY FUNCTION
- ; r19=time in 0.1
- ; correct for 1MHz clock
- delay:
- ;ldi r25, 0x82
- ;ldi r24, 0x35
- ldi r25, 0x01
- ldi r24, 0x4d
- delay_loop:
- sbiw r24, 1
- brne delay_loop
- dec r19
- brne delay
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement