Facebook
From Sweltering Sloth, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 293
  1. ;-------------------------------------------------------------------------------
  2. ; MSP430 Assembler Code Template for use with TI Code Composer Studio
  3. ;
  4. ;
  5. ;-------------------------------------------------------------------------------
  6.             .cdecls C,LIST,"msp430.h"       ; Include device header file
  7.  
  8. ;-------------------------------------------------------------------------------
  9.             .def    RESET                   ; Export program entry-point to
  10.                                             ; make it known to linker.
  11. ;-------------------------------------------------------------------------------
  12.             .text                           ; Assemble into program memory.
  13.             .retain                         ; Override ELF conditional linking
  14.                                             ; and retain current section.
  15.             .retainrefs                     ; And retain any sections that have
  16.                                             ; references to current section.
  17.  
  18. ;-------------------------------------------------------------------------------
  19. RESET       mov.w   #__STACK_END,SP         ; Initialize stackpointer
  20. StopWDT     mov.w   #WDTPW|WDTHOLD,&WDTCTL  ; Stop watchdog timer
  21.  
  22. ;-------------------------------------------------------------------------------
  23. ; Zmienne
  24. ; R4 - wartosc licznika, R4 - pierwszwy rejestr ogolnego przeznaczenia
  25. ; R5 - wartosc licznika w Grayu
  26. ; R6 - rejestr do drgan stykow
  27. ; R7 - ograniczenie
  28. ; R8 - zrzut flag IF
  29. ; R9 -
  30. ; R10 - rejestr do drgan stykow 2
  31. ;-------------------------------------------------------------------------------
  32.  
  33.  
  34. ;-------------------------------------------------------------------------------
  35. ; Stale
  36. ;-------------------------------------------------------------------------------
  37.  
  38. CLEAR_BUT .set 0x20
  39. DEC_BUT  .set 0x10  ;przycisk
  40.  
  41. DEB_VAL  .set 0x08FF  ;do odszumiania
  42. DEB2_VAL        .set 0x0BFF
  43.  
  44.  
  45. ;-------------------------------------------------------------------------------
  46. ; Konfiguracja
  47. ;-------------------------------------------------------------------------------
  48.  
  49. ;kierunki portow - FF wyjscie, 00 wejscie
  50.     mov.b #0xFF, &P1DIR  ;wyjscie
  51.     mov.b #0xCF, &P2DIR  ;wejscie i przerwania
  52.     mov.b #0x00, &P3DIR  ;wejscie
  53. ;przerwania
  54.     bis.b #0x30, &P2IES  ;jakim zboczem
  55.     bis.b #0x30, &P2IE  ;wlacza przerwanie
  56.     xor.b P2IFG, P2IFG  ; zeruj flagi przerwan
  57.  
  58. ;inicjalizacja
  59.     mov.b #0xFF, R4  ;"zeruje" licznik
  60.     mov.b #0x80, R5
  61.     mov.b R5, P1OUT  ;wyswietla
  62.     mov.b #0x00, R8
  63.  
  64.     xor.b R6, R6
  65.     xor.b R10, R10
  66.  
  67.     jmp SLEEP ;bezwarunkowo do SLEEP
  68.  
  69. ;-------------------------------------------------------------------------------
  70. ; Main loop here
  71. ;-------------------------------------------------------------------------------
  72. MAIN:
  73.     bit.b #CLEAR_BUT, P2IN
  74.     jz CLEAR
  75.     bit.b #CLEAR_BUT, R8
  76.     jnz CLEAR
  77.  
  78.     bit.b #DEC_BUT, R8
  79.     jnz DECREMENT
  80.  
  81.     jmp SLEEP
  82.  
  83. DECREMENT:
  84.         and.b #0xEF, R8
  85.         mov.w #DEB_VAL, R6
  86.  
  87.         mov.b #0x00, &P2IE ; zablokowanie przerwan
  88.         mov.w #DEB2_VAL, R10
  89.     jmp DEC
  90.  
  91. DEBOUNCE:
  92.     mov.w #DEB_VAL, R6
  93.     bit.b #CLEAR_BUT, P2IN
  94.     jz DEBOUNCE_CLEAR
  95.  
  96. DEC:
  97.         dec.w R10
  98.         jz IE_AND_GOTO_MAIN
  99.     bit.b #DEC_BUT, P2IN ;
  100.     jnz DEBOUNCE ;if(!0) reset
  101.  
  102.     dec.w R6
  103.     jnz DEC
  104.  
  105.     mov.b #0x30, &P2IE ; odblokowanie przerwan
  106.  
  107.     dec R4  ;dekrementacja
  108.     mov.b P3IN, R7
  109.     cmp R7, R4  ;if R4>=R7
  110.     jge DEC_CONTINUE
  111.     mov.b #0xFF, R4  ;"zeruje" licznik
  112.     mov.b #0x80, R5
  113. DEC_CONTINUE:
  114.     call #CONVERT_TO_GRAY
  115.     mov.b R5, P1OUT
  116.         ;jmp MAIN
  117. SLEEP:  ;wylacza zegary, wlacza przerwania,wchodzi w LMP4
  118.     bis #CPUOFF|SCG1|SCG0|OSCOFF|GIE, SR ; wylaczenie zegarow
  119.     jmp MAIN
  120.  
  121. CLEAR:
  122.         and.b #0xDF, R8
  123.         mov.b #0x00, &P2IE ; zablokowanie przerwan
  124.         mov.w #DEB2_VAL, R10
  125.         mov.w #DEB_VAL, R6
  126.     jmp CLR
  127. DEBOUNCE_CLEAR:
  128.         mov.w #DEB_VAL, R6
  129. CLR:  ;zerowanie
  130.         dec.w R10
  131.         jz IE_AND_GOTO_MAIN
  132.         bit.b #CLEAR_BUT, P2IN
  133.     jnz DEBOUNCE_CLEAR
  134.  
  135.     dec.w R6
  136.     jnz CLR
  137.  
  138.         mov.b #0x30, &P2IE ; odblokowanie przerwan
  139.     mov.b #0xFF, R4  ;"zeruje" licznik
  140.     mov.b #0x80, R5
  141.     mov.b R5, P1OUT
  142.  
  143.     ;bit.b #CLEAR_BUT, P2IN
  144.     ;jz CLEAR
  145.  
  146.     jmp SLEEP
  147.  
  148. CONVERT_TO_GRAY:
  149.         mov.b R4, R5
  150.         rra.b R5
  151.         and.b #0x7F, R5
  152.         xor.b R4, R5
  153.         ret
  154.  
  155. INTERRUPT:
  156.     bic #CPUOFF|SCG1|SCG0|OSCOFF, 0(SP) ; wylacz sleep
  157.     mov.b P2IFG, R8
  158.     xor.b P2IFG, P2IFG  ; zeruj flagi przerwan
  159.     RETI
  160.  
  161. IE_AND_GOTO_MAIN:
  162.         mov.b #0x30, &P2IE ; odblokowanie przerwan
  163.         jmp MAIN
  164. ;koniec przerwania -----------------
  165.  
  166.  
  167.  
  168.  
  169. ;-------------------------------------------------------------------------------
  170. ; Stack Pointer definition
  171. ;-------------------------------------------------------------------------------
  172.             .global __STACK_END
  173.             .sect   .stack
  174.  
  175. ;-------------------------------------------------------------------------------
  176. ; Interrupt Vectors
  177. ;-------------------------------------------------------------------------------
  178.             .sect   ".reset"                ; MSP430 RESET Vector
  179.             .short  RESET
  180.             .sect   ".int01"
  181.             .short  INTERRUPT
  182.