-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPL73_SequencialRotation_modified.asm
55 lines (46 loc) · 1.53 KB
/
PL73_SequencialRotation_modified.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
;**********************************************
;Rotação sequencial dos leds na saída da porta B
LIST P=16F84A ;Tipo de dispositivo
INCLUDE "p16f84a.inc" ;Definição de registros
Contador EQU 0x0c
ORG 0 ;Vetor de reset
goto INICIO
ORG 5 ;Saltamos o vetor
;de interrupção
;**********************************************
;ROTINA DE DELAY DE 250 MS
Delay: movlw .10
btfss PORTA, 0 ;Salta se RA0 = true, para selecionar
;velocidade
movlw .4
movwf Contador ;Repetirá 10 vezes um temporizador de 25 ms
Delay_0: bcf INTCON, T0IF ;Limpa a flag de interrupção de TMR0
movlw 0x3c ;255-60, para contar 195 x 128 us = 24.960 ms
movwf TMR0 ;pois estamos usando pre-scaler de 128
Delay_1: clrwdt
btfss INTCON, T0IF ;Salta se houver interrupção de TMR0
goto Delay_1
decfsz Contador, F ;Decrementa contador e salta se for 0
goto Delay_0
return
;**********************************************
;COMEÇO DO PROGRAMA PRINCIPAL
INICIO: clrf PORTB
bsf STATUS, RP0 ;Banco 1
clrf TRISB ;Porta B saída
movlw b'00011111' ;5 pinos de A para entrada
movwf TRISA
movlw b'00000110' ;Divide-se o timer por 128 obtendo
;128 us por pulso
movwf OPTION_REG
bcf STATUS, RP0 ;Banco 0
bsf STATUS, C ;Ativa flag de carry on
LOOP: call Delay ;Aguarda 25 ms
btfsc PORTA, 1 ;Salta se RA1 = false
goto A_DIREITA
A_ESQUERDA: rlf PORTB, F ;Rola bits para esquerda, pegando
;bit de carry on
goto LOOP
A_DIREITA: rrf PORTB, F ;Rola bits para direita
goto LOOP
END ;Fim do programa