Académique Documents
Professionnel Documents
Culture Documents
12/0042223
Questo 1
Programa 8
;-------------------------------------------------------------------------------
; MSP430 Assembler Code Template for use with TI Code Composer Studio
;
;
;-------------------------------------------------------------------------------
.cdecls C,LIST,"msp430.h"
;-------------------------------------------------------------------------------
.def RESET
;
;-------------------------------------------------------------------------------
.text
.retain
.retainrefs
;-------------------------------------------------------------------------------
RESET mov.w #__STACK_END,SP ; Inicializa o stackpointer
StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; para o watchdog timer
;------------------------------------------------------------------------------
.text ;
;------------------------------------------------------------------------------
start: mov.w #0x0280,SP ; init stack pointer
mov.w #WDTPW|WDTHOLD,&WDTCTL ; para WDT
bis.b #0x01,&P1DIR ; define P1.0 como sada
call #T500ms ;chama a subrotina
;-------------------------------------------------------------------------------
; Interrupt Vectors
;-------------------------------------------------------------------------------
.sect ".reset" ; MSP430 RESET Vector
.short RESET
Programa 9
;-------------------------------------------------------------------------------
; Main loop here
;-------------------------------------------------------------------------------
;LED1 (P1.0)
bic.b #BIT0 ,& P1OUT ;bic - LED desligado
bis.b #BIT0 ,& P1DIR ;LED1 como sada
;LED2 (P4.7)
bic.b #BIT7 ,& P4OUT ;bic - LED desligado
bis.b #BIT7 ,& P4DIR ;LED2 como segunda sada
;Chave S1 (P2.1)
bic.b #BIT1, &P2DIR ;habilita a chave como entrada
bis.b #BIT1, &P2REN ;habilita o resistor
bis.b #BIT1, &P2OUT ;resistor de pull up
;Chave S2 (P1.1)
bic.b #BIT1, &P1DIR ;habilita a chave como entrada
bis.b #BIT1, &P1REN ;habilita o resistor
bis.b #BIT1, &P1OUT ;resistor de pull up
Chaves: nop
;mov #0h,#0h
bit.b #BIT1 ,&P2IN ;testa a chave S1 (bit test)
jnz S1floating ;verifica o estado do boto S1
S1pressed: nop
;mov #0h,#0h ;Boto S1 pressionado
bis.b #BIT0 ,& P1OUT ;liga o LED
jmp testeS2 ;testa o boto S2
S1floating: nop
;mov #0h,#0h ;caso S1 no esteja pressionado
bic.b #BIT0 ,& P1OUT ;desliga o LED2
Programa 10
;-------------------------------------------------------------------------------
; Main loop here
;-------------------------------------------------------------------------------
;atribui os valores de atraso e define os bits de cada LED/chave
DELAYLENGTH .equ 5000
LED1 .equ BIT0
LED2 .equ BIT7
S2 .equ BIT1
;LED1 (P1.0)
bic.b #LED1 ,& P1OUT ;led desligado
bis.b #LED1 ,& P1DIR ;configura o LED como sada
;LED2 (P4.7)
bic.b #LED2 ,& P4OUT ;led desligado
bis.b #LED2 ,& P4DIR ;configura o LED como sada
;chave S2 (P1.1)
bic.b #BIT1, &P1DIR ;define a chave como entrada (0)
bis.b #BIT1, &P1REN ;habilita o resistor
bis.b #BIT1, &P1OUT ;resistor de pull up
delay: push R4
mov #0, R4 ;limpa
loop: inc R4
;add #1,dst
;incrementa R4
cmp #DELAYLENGTH, R4 ;pelo tempo do atraso
jnz loop ;enquanto no for zero,
continua no loop
pop R4
;mov @SP+,dst
;retorna o valor
ret
;mov @SP+,PC
Programa 11
;-------------------------------------------------------------------------------
; Main loop here
;-------------------------------------------------------------------------------
;define os valores, endereos de memria e os BITs para os LEDs
DELAYDECKICK .equ 5000
DELAYPISCA .equ 60000
CONT1 .equ 0x2400
CONT2 .equ 0x2402
LED1 .equ BIT0
LED2 .equ BIT7
;LED1 (P1.0)
bic.b #BIT0 ,& P1OUT ;LED1 desligado
bis.b #BIT0 ,& P1DIR ;configura como sada
;LED2 (P4.7)
bic.b #BIT7 ,& P4OUT ;LED2 desligado
bis.b #BIT7 ,& P4DIR ;configura como sada
;Chave S1 (P2.1)
bic.b #BIT1, &P2DIR ;chave S1 como entrada
bis.b #BIT1, &P2REN ;habilita o resistor
bis.b #BIT1, &P2OUT ;pull up
;Chave S2 (P1.1)
bic.b #BIT1, &P1DIR ;chave S2 como entrada
bis.b #BIT1, &P1REN ;habilita o resistor
bis.b #BIT1, &P1OUT ;pull up
clr R5
;mov 0,dst
decideS1S2: bit.b #BIT1, &P2IN ;se S1 foi pressionado, verificar se foi somente
ele ou S2 tambm
jz S1orBoth
bit.b #BIT1, &P1IN ;se S2 foi pressionado, pula para a rotina de S2
jz S2
Questo 2
Verificar cdigos acima.
Questo 3
dlayDekick: push R4 ;salva o estado no registrador
mov #0, R4
loop1: inc R4
cmp #DELAYDECKICK, R4
jnz loop1
pop R4 ;retorna este estado
ret
Nessa rotina, o estado da chave alocado em R4, e limpo com a segunda linha. Posteriormente,
realizado o incremento e comparado com o atraso definido para o rebote. Enquanto ele no tiver o mesmo
valor, executado o loop. Quando atingir o valor de DELAYDECKICK, o estado mostrado.
Questo 4
O atraso que deve ser considerado, assim como a necessidade de processamento para mais um registrador.
Questo 5
As duas diretivas definem uma constante a um smbolo. Logo, no h diferena e podem ser usadas sem
distino.