- ;-------------------------------------------------------------------------------
- ; MSP430 Assembler Code Template for use with TI Code Composer Studio
- ;
- ;
- ;-------------------------------------------------------------------------------
- .cdecls C,LIST,"msp430.h" ; Include device header file
- ;-------------------------------------------------------------------------------
- .def RESET ; Export program entry-point to
- ; make it known to linker.
- ;-------------------------------------------------------------------------------
- .text ; Assemble into program memory.
- .retain ; Override ELF conditional linking
- ; and retain current section.
- .retainrefs ; And retain any sections that have
- ; references to current section.
- ;-------------------------------------------------------------------------------
- RESET mov.w #__STACK_END,SP ; Initialize stackpointer
- StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; Stop watchdog timer
- ;-------------------------------------------------------------------------------
- ; Zmienne
- ; R4 - wartosc licznika, R4 - pierwszwy rejestr ogolnego przeznaczenia
- ; R5 - wartosc licznika w Grayu
- ; R6 - rejestr do drgan stykow
- ; R7 - ograniczenie
- ; R8 - zrzut flag IF
- ; R9 -
- ; R10 - rejestr do drgan stykow 2
- ;-------------------------------------------------------------------------------
- ;-------------------------------------------------------------------------------
- ; Stale
- ;-------------------------------------------------------------------------------
- CLEAR_BUT .set 0x20
- DEC_BUT .set 0x10 ;przycisk
- DEB_VAL .set 0x08FF ;do odszumiania
- DEB2_VAL .set 0x0BFF
- ;-------------------------------------------------------------------------------
- ; Konfiguracja
- ;-------------------------------------------------------------------------------
- ;kierunki portow - FF wyjscie, 00 wejscie
- mov.b #0xFF, &P1DIR ;wyjscie
- mov.b #0xCF, &P2DIR ;wejscie i przerwania
- mov.b #0x00, &P3DIR ;wejscie
- ;przerwania
- bis.b #0x30, &P2IES ;jakim zboczem
- bis.b #0x30, &P2IE ;wlacza przerwanie
- xor.b P2IFG, P2IFG ; zeruj flagi przerwan
- ;inicjalizacja
- mov.b #0xFF, R4 ;"zeruje" licznik
- mov.b #0x80, R5
- mov.b R5, P1OUT ;wyswietla
- mov.b #0x00, R8
- xor.b R6, R6
- xor.b R10, R10
- jmp SLEEP ;bezwarunkowo do SLEEP
- ;-------------------------------------------------------------------------------
- ; Main loop here
- ;-------------------------------------------------------------------------------
- MAIN:
- bit.b #CLEAR_BUT, P2IN
- jz CLEAR
- bit.b #CLEAR_BUT, R8
- jnz CLEAR
- bit.b #DEC_BUT, R8
- jnz DECREMENT
- jmp SLEEP
- DECREMENT:
- and.b #0xEF, R8
- mov.w #DEB_VAL, R6
- mov.b #0x00, &P2IE ; zablokowanie przerwan
- mov.w #DEB2_VAL, R10
- jmp DEC
- DEBOUNCE:
- mov.w #DEB_VAL, R6
- bit.b #CLEAR_BUT, P2IN
- jz DEBOUNCE_CLEAR
- DEC:
- dec.w R10
- jz IE_AND_GOTO_MAIN
- bit.b #DEC_BUT, P2IN ;
- jnz DEBOUNCE ;if(!0) reset
- dec.w R6
- jnz DEC
- mov.b #0x30, &P2IE ; odblokowanie przerwan
- dec R4 ;dekrementacja
- mov.b P3IN, R7
- cmp R7, R4 ;if R4>=R7
- jge DEC_CONTINUE
- mov.b #0xFF, R4 ;"zeruje" licznik
- mov.b #0x80, R5
- DEC_CONTINUE:
- call #CONVERT_TO_GRAY
- mov.b R5, P1OUT
- ;jmp MAIN
- SLEEP: ;wylacza zegary, wlacza przerwania,wchodzi w LMP4
- bis #CPUOFF|SCG1|SCG0|OSCOFF|GIE, SR ; wylaczenie zegarow
- jmp MAIN
- CLEAR:
- and.b #0xDF, R8
- mov.b #0x00, &P2IE ; zablokowanie przerwan
- mov.w #DEB2_VAL, R10
- mov.w #DEB_VAL, R6
- jmp CLR
- DEBOUNCE_CLEAR:
- mov.w #DEB_VAL, R6
- CLR: ;zerowanie
- dec.w R10
- jz IE_AND_GOTO_MAIN
- bit.b #CLEAR_BUT, P2IN
- jnz DEBOUNCE_CLEAR
- dec.w R6
- jnz CLR
- mov.b #0x30, &P2IE ; odblokowanie przerwan
- mov.b #0xFF, R4 ;"zeruje" licznik
- mov.b #0x80, R5
- mov.b R5, P1OUT
- ;bit.b #CLEAR_BUT, P2IN
- ;jz CLEAR
- jmp SLEEP
- CONVERT_TO_GRAY:
- mov.b R4, R5
- rra.b R5
- and.b #0x7F, R5
- xor.b R4, R5
- ret
- INTERRUPT:
- bic #CPUOFF|SCG1|SCG0|OSCOFF, 0(SP) ; wylacz sleep
- mov.b P2IFG, R8
- xor.b P2IFG, P2IFG ; zeruj flagi przerwan
- RETI
- IE_AND_GOTO_MAIN:
- mov.b #0x30, &P2IE ; odblokowanie przerwan
- jmp MAIN
- ;koniec przerwania -----------------
- ;-------------------------------------------------------------------------------
- ; Stack Pointer definition
- ;-------------------------------------------------------------------------------
- .global __STACK_END
- .sect .stack
- ;-------------------------------------------------------------------------------
- ; Interrupt Vectors
- ;-------------------------------------------------------------------------------
- .sect ".reset" ; MSP430 RESET Vector
- .short RESET
- .sect ".int01"
- .short INTERRUPT