Advertisement
Guest User

Untitled

a guest
Jun 20th, 2011
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; \u0437\u0435\u043b \u043f\u0443\u0441\u0442\u043e \u0431\u0435\u043b \u0436\u0451\u043b \u0441\u0438\u043d
  2. ; \u043a\u0440\u0430\u0441 \u043f\u0443\u0441\u0442\u043e \u0447\u0451\u0440
  3. .include "tn2313adef.inc"
  4.  
  5. .EQU POV_DELAY = 2
  6. .DEF d10 = r20
  7. .DEF d32 = r21
  8. .DEF tmp = r16
  9.  
  10. .define TIMER
  11.  
  12. .CSEG
  13. .ORG 0x000
  14.     rjmp    reset
  15.     reti ; 2
  16.     reti ; 3
  17.     reti ; 4
  18.     reti ; 5
  19.     reti ; 6
  20.     rjmp timer_overflow ; 7 timer
  21.     reti ; 8
  22.     reti ; 9
  23.     reti ; 10
  24.     reti ; 11
  25.     reti ; 12
  26.     reti ; 13
  27.     reti ; 14
  28.     reti ; 15
  29.     reti ; 16
  30.     reti ; 17
  31.     reti ; 18
  32.     reti ; 19
  33.     rjmp timer_overflow ; 20
  34.     reti ; 21
  35.  
  36. digits_table:
  37. .DB 119,66,93,94,106,62,63,82,127,126
  38. ;.DB 63,6,91,79,102,109,125,7,127,111
  39.  
  40. .def ttmp = r17
  41. timer_overflow:
  42.     in r5, SREG
  43.  
  44.     ; 0 digit
  45.     inc d10
  46.     mov ttmp, d10
  47.     andi ttmp, 0x0f
  48.     cpi ttmp, 0x0a
  49.     brlo timer_exit
  50.  
  51.     ; 1 digit
  52.     andi d10, 0xf0
  53.     ldi ttmp, 0x10
  54.     add d10, ttmp
  55.     cpi d10, 0xa0
  56.     brlo timer_exit
  57.  
  58.     ; 2 digit
  59.     clr d10
  60.  
  61.     inc d32
  62.     mov ttmp, d32
  63.     andi ttmp, 0x0f
  64.     cpi ttmp, 0x0a
  65.     brlo timer_exit
  66.  
  67.     ; 3 digit
  68.     andi d32, 0xf0
  69.     ldi ttmp, 0x10
  70.     add d32, ttmp
  71.     cpi d32, 0xa0
  72.     brlo timer_exit
  73.  
  74.     clr d32
  75.  
  76. timer_exit:
  77.     out SREG, r5
  78.     reti
  79.  
  80. ; PIN INTERRUPT
  81. pin_interrupt:
  82.     clr ttmp
  83.     out TCNT0, ttmp
  84.  
  85.     reti
  86.  
  87. main:
  88.     ;ldi tmp, 1<<WDE
  89.     ;out WDTCSR, tmp
  90.     ldi r19, 0xff
  91.     rcall delay
  92.  
  93. loop:
  94.     ;wdr
  95.     rcall show_number
  96.     rjmp loop
  97.  
  98. ; RESET FUNCTION
  99. reset:
  100.     ; ioinit
  101.     ; PORTB output
  102.     cli
  103.     ldi tmp, LOW(RAMEND)
  104.     out SPL, tmp
  105.  
  106.     ldi tmp, 0xFF
  107.     out DDRB, tmp
  108.     ldi tmp, 0b01111111
  109.     out DDRD, tmp
  110.     out PORTD, tmp
  111.  
  112.     in tmp, MCUSR
  113.     lsl tmp
  114.     lsl tmp
  115.     lsl tmp
  116.     out PORTD, tmp
  117.     clr tmp
  118.     out MCUSR, tmp
  119.  
  120. WaitPin:
  121.     in tmp, PINA
  122.     sbrc tmp, 1
  123.     rjmp WaitPin
  124.  
  125. .ifdef TIMER
  126.     ldi tmp, 1<<PSR10
  127.     out GTCCR, tmp
  128.     ldi tmp, (1<<CS00)|(1<<CS02)
  129.     out TCCR0B, tmp
  130.     ldi tmp, 1<<TOIE0
  131.     out TIMSK, tmp
  132. .else
  133.     ldi tmp, 1<<PCIE1
  134.     out GIMSK, tmp
  135.     ldi tmp, 1<<PCINT9
  136.     out PCMSK1, tmp
  137. .endif
  138.  
  139.     ldi d10, 0x00
  140.     ldi d32, 0x00
  141.  
  142.     sei
  143.     rjmp main
  144.  
  145. ; SHOW NUMBER FUNCTION
  146. show_digit:
  147.     ldi ZL, LOW(digits_table*2)
  148.     add ZL, tmp
  149.     lpm
  150.     out PORTB, r0
  151.  
  152.     ret
  153.  
  154. show_number:
  155. ; dig1
  156.     mov tmp, d10
  157.     andi tmp, 0x0f
  158.  
  159. ;show
  160.     cbi PORTD, 0
  161.     rcall show_digit
  162.     ldi r19, POV_DELAY
  163.     rcall delay
  164.     sbi PORTD, 0
  165.  
  166. ;dig2
  167.     mov tmp, d10
  168.     andi tmp, 0xf0
  169.     swap tmp
  170.  
  171. ;show
  172.     cbi PORTD, 1
  173.     rcall show_digit
  174.     ldi r19, POV_DELAY
  175.     rcall delay
  176.     sbi PORTD, 1
  177.  
  178. ;dig3
  179.     mov tmp, d32
  180.     andi tmp, 0x0f
  181.  
  182. ;show
  183.     cbi PORTD, 2
  184.     rcall show_digit
  185.     ldi r19, POV_DELAY
  186.     rcall delay
  187.     sbi PORTD, 2
  188.  
  189. ;dig4
  190.     mov tmp, d32
  191.     andi tmp, 0xf0
  192.     swap tmp
  193.  
  194. ;show
  195.     cbi PORTD, 3
  196.     rcall show_digit
  197.     ldi r19, POV_DELAY
  198.     rcall delay
  199.     sbi PORTD, 3
  200.  
  201.     ret
  202.  
  203. ; DELAY FUNCTION
  204. ; r19=time in 0.1
  205. ; correct for 1MHz clock
  206. delay:
  207.     ;ldi r25, 0x82
  208.     ;ldi r24, 0x35
  209.     ldi r25, 0x01
  210.     ldi r24, 0x4d
  211.  
  212. delay_loop:
  213.     sbiw r24, 1
  214.     brne delay_loop
  215.  
  216.     dec r19
  217.     brne delay
  218.  
  219.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement