Guest User

LED Blinker

a guest
Nov 13th, 2014
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * BobbycarUnterbodenbeleuchtung.asm
  3.  *
  4.  *  Created: 17.09.2014 21:42:51
  5.  *   Author: Benjamin
  6.  */
  7. .include "2313def.inc"
  8.  
  9. .def temp  = r16
  10. .def leds  = r17 // Ausgaberegister
  11. .def scene = r18 // Welche Scene wird gespielt
  12. .def counter = r19 // Was ist der Nächste Schritt der Scene
  13. .def reset = r20 // Zu Entprellen
  14.  
  15. .org 0x0000
  16.         rjmp    main                  ; Reset Handler
  17. .org OVF0addr
  18.         rjmp    timer0_overflow       ; Timer Overflow Handler
  19. main:
  20.         ; Stackpointer initialisieren
  21.         ;ldi     temp, HIGH(RAMEND)    
  22.         ;out     SPH, temp
  23.         ldi     temp, LOW(RAMEND)    
  24.         out     SPL, temp
  25.  
  26.         ldi     temp, 0xFF      ; Port D auf Ausgang
  27.         out     DDRD, temp
  28.  
  29.         ldi     temp, 0x00      ; Port B auf Eingang
  30.         out     DDRB, temp
  31.  
  32.         ldi temp, 0xFF     ; An allen Pins vom Port B die Pullup-Widerstände
  33.         out PORTB, temp
  34.  
  35.         ldi     leds, 0xFF
  36.  
  37.         ldi     temp, (1<<CS00)|(1<<CS02); CS00 setzen: Teiler 1024
  38.         out     TCCR0, temp
  39.  
  40.         ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer Overflow
  41.         out     TIMSK, temp
  42.  
  43.         ldi     temp, (1<<ACD)      ; Analog Comperator abschalten
  44.         out     ACSR, temp
  45.         sei
  46.  
  47. input:  
  48.         sbic PINB, 0 // warten bis gedrückt
  49.         rjmp input
  50.  
  51.         // wurde gedrückt
  52.         sbrs reset,0 // reset ist 0
  53.         rjmp resethin
  54.         rjmp input
  55.  
  56. resetweg:  
  57.         ldi reset, 0x00
  58.         ret
  59.  
  60. resethin:  
  61.         ldi reset,0xFF // reset auf 1
  62.         inc scene // nächste LED scene
  63.         ldi counter, 0x00 // Scene neu starten.
  64.         rjmp input
  65.  
  66. timer0_overflow:
  67.      
  68.       sbic PINB, 0
  69.       ldi reset, 0x00 // Wurde der Taster losgelassen dann reset auf 0
  70.  
  71.       ldi temp, 0x00
  72.       sub temp, scene // Welche Scene wird abgespielt
  73.       breq action0
  74.  
  75.       ldi temp, 0x01
  76.       sub temp, scene
  77.       breq action1
  78.  
  79.       ldi temp, 0x02
  80.       sub temp, scene
  81.       breq action2
  82.  
  83.       ldi temp, 0x03
  84.       sub temp, scene
  85.       breq action3
  86.  
  87.       ldi scene, 0x00
  88.       reti
  89.  
  90.       action0:  // Dauer leuchten 1 Schritt
  91.          
  92.           ldi temp, 0x00
  93.           sub temp, counter // Welche LEDs gehen als nächstes an
  94.           breq action00
  95.  
  96.           action00:
  97.           ldi leds, 0xFF
  98.           out DDRD, leds // !
  99.           ldi counter, 0x00
  100.           reti
  101.  
  102.       action1: //Alle blinken, 2 Schritte
  103.          
  104.           ldi temp, 0x00
  105.           sub temp, counter
  106.           breq action10
  107.  
  108.           ldi temp, 0x01
  109.           sub temp, counter
  110.           breq action11
  111.  
  112.           action10:
  113.           ldi leds, 0xFF
  114.           out DDRD, leds // !
  115.           inc counter
  116.           reti
  117.  
  118.           action11:
  119.           ldi leds, 0x00
  120.           out DDRD, leds // !
  121.           ldi counter, 0x00
  122.           reti
  123.  
  124.         action2: // Paare blinken, 2 Schritte
  125.          
  126.           ldi temp, 0x00
  127.           sub temp, counter
  128.           breq action20
  129.  
  130.           ldi temp, 0x01
  131.           sub temp, counter
  132.           breq action21
  133.  
  134.           action20:
  135.           ldi leds, 0x05
  136.           out DDRD, leds // !
  137.           inc counter
  138.           reti
  139.  
  140.           action21:
  141.           ldi leds, 0x0A
  142.           out DDRD, leds // !
  143.           ldi counter, 0x00
  144.           reti
  145.  
  146.         action3: // Jede Einzeln, 4 Schritte
  147.          
  148.           ldi temp, 0x00
  149.           sub temp, counter
  150.           breq action30
  151.  
  152.           ldi temp, 0x01
  153.           sub temp, counter
  154.           breq action31
  155.  
  156.           ldi temp, 0x02
  157.           sub temp, counter
  158.           breq action32
  159.  
  160.           ldi temp, 0x03
  161.           sub temp, counter
  162.           breq action33
  163.  
  164.           action30:
  165.           ldi leds, 0x01
  166.           out DDRD, leds // !
  167.           inc counter
  168.           reti
  169.  
  170.           action31:
  171.           ldi leds, 0x02
  172.           out DDRD, leds // !
  173.           inc counter
  174.           reti
  175.  
  176.           action32:
  177.           ldi leds, 0x04
  178.           out DDRD, leds // !
  179.           inc counter
  180.           reti
  181.  
  182.           action33:
  183.           ldi leds, 0x08
  184.           out DDRD, leds // !
  185.           ldi counter, 0x00
  186.           reti
Advertisement
Add Comment
Please, Sign In to add comment