Sunteți pe pagina 1din 4

Rotar una luz en los LEDs

U1
13
14
1
2
3
4
5
6
7
8
9
10

OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7

33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26

200
200
200
200
200
200
200
200

19
20
21
22
27
28
29
30

PIC16F877

; rotar luz en LEDs con el PIC16F877


; ******** DEFINICION DE REGISTROS UTILIZADOS
status equ
ptoa
equ
ptob
equ
ptoc
equ
ptod
equ
ptoe
equ
pclath equ
intcon equ
pir1
equ
rcsta equ
txreg equ
rcreg equ
adresh equ
adcon0 equ
trisa
equ
trisb
equ
trisc
equ
trisd
equ
trise
equ
txsta equ
spbrg equ
adresl equ
adcon1 equ

03
05
06
07
08
09
0ah
0bh
0ch
18h
19h
1ah
1eh
1fh
85h
86h
87h
88h
89h
98h
99h
9eh
9fh

;Definicion de bits utilizados

D1

D2

D3

D4

D5

D6

D7

D8

LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED

rp0
rp1
irp
z
c
txif
go

equ
equ
equ
equ
equ
equ
equ

5
6
7
2
0
4
2

;Variables del usuario


loops equ
loops2 equ
buffer equ
rotador equ
cuenta8

20h
21h
22h
23h
equ

24h

; ************ Configuracion para el simulador Proteus


list p=16f877
_CP_ALL
_CP_HALF
_CP_UPPER_256
_CP_OFF
_DEBUG_ON
_DEBUG_OFF
_WRT_ENABLE_ON
_WRT_ENABLE_OFF
_CPD_ON
_CPD_OFF
_LVP_ON
_LVP_OFF
_BODEN_ON
_BODEN_OFF
_PWRTE_OFF
_PWRTE_ON
_WDT_ON
_WDT_OFF
_LP_OSC
_XT_OSC
_HS_OSC
_RC_OSC

EQU
EQU
EQU

EQU

EQU

H'0FCF'
EQU H'1FDF'
EQU H'2FEF'
H'3FFF'
H'37FF'
EQU H'3FFF'
EQU H'3FFF'
EQU H'3DFF'
EQU H'3EFF'
EQU H'3FFF'
H'3FFF'
EQU H'3F7F'
EQU H'3FFF'
EQU H'3FBF'
EQU H'3FFF'
EQU H'3FF7'
EQU H'3FFF'
EQU H'3FFB'
H'3FFC'
EQU H'3FFD'
EQU H'3FFE'
EQU H'3FFF'

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON

; ***** EMPIEZA EL PROGRAMA


org
goto
retarms
top2

00
inicio
movlw
movwf
movlw
movwf

;Empieza ejecucion en direccion 000h


d'255'
loops
d'110'
loops2

;subrutina de retardo en milisegundos


;el numero de milisegundos est
;cargado en el registro loops

top

nop
nop
nop
nop
nop
nop
decfsz loops2,1
goto top
decfsz loops,1
goto top2
return

;pregunta si termino 1 ms
;pregunta si termina el retardo

; ************ PROGRAMA PRINCIPAL ***************


inicio

clrf
bsf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
bcf

status
status,rp0
b'11111111'
trisa
b'00000000'
trisb
b'11111111'
trisc
b'11111111'
trisd
b'11101111'
trise
b'11110111'
adcon1
status,rp0

movlw d'8'
movwf cuenta8
clrf

ptob

;poner status en cero para asegurar banco 0


;pasar al banco 1 de la RAM
;puerto A entradas
;puerto B salidas
;puerto C entradas
;puerto D entradas
;puerto E entradas
;pasar al banco 0
;se prepara para ocho rotaciones
;carga el registro que lleva la cuenta de rotaciones
;inicia puerto B con ceros para apagar LEDs

movlw b'00000001'

;carga W con un bit en uno para encender el primer LED

movwf rotador

;carga el registro que contiene los bits a encender del puerto B

seguir movf

rotador,0

;pasa el contenido de rotador al registro W

movwf ptob

;pasa los datos del registro rotador al puerto B para encender LED

call

retarms

;este retardo equivale a 255 milisegundos

bcf

status,c

;Pone el carry en cero para que al rotar entre un cero por la derecha

rlf

rotador,1

;hace la rotacion a la izquierda para que se desplaze el uno que enciende el

LED
decfsz cuenta8,1

;pregunta si ya hizo ocho rotaciones verificando si llego a cero

goto

;si no ha hecho las ocho rotaciones no ha llegado a cero y sigue rotando

seguir

goto
end

inicio

;Solo salta si ya termino ocho rotaciones y vuelve a empezar

S-ar putea să vă placă și